由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 最近3年各语言的两大恶俗趋势——
进入Programming版参与讨论
1 (共1页)
m*****n
发帖数: 3575
1
coroutine 和 functional programming
google算是把coroutine给整明白了,python却在全局单核锁的条件下把coroutine弄得
非常繁琐。好像Java也绷不住了,也上了coroutine. 新版的C++是不是也上了?
要我说python这种连起双核都很难的语言,老老实实学Qt玩signal slot就得了,整个
屁的coroutine脱了裤子放屁。
第二大烂坑是functional programming,其实就是去对象化。这里面最激进的是golang
,到现在我也不明白为什么要彻底去除class和methods. 谁知道原因?
h****e
发帖数: 2125
2

golang

【在 m*****n 的大作中提到】
: coroutine 和 functional programming
: google算是把coroutine给整明白了,python却在全局单核锁的条件下把coroutine弄得
: 非常繁琐。好像Java也绷不住了,也上了coroutine. 新版的C++是不是也上了?
: 要我说python这种连起双核都很难的语言,老老实实学Qt玩signal slot就得了,整个
: 屁的coroutine脱了裤子放屁。
: 第二大烂坑是functional programming,其实就是去对象化。这里面最激进的是golang
: ,到现在我也不明白为什么要彻底去除class和methods. 谁知道原因?

d*******r
发帖数: 3299
3
OOP原教旨: 尽量只用名词来描述世界
FP原教旨: 尽量只用动词来描述世界
动词名词自然使用的人类: 上面都是神经病
c******n
发帖数: 16666
4
我是进来看fp的
结果看到了说go是fp
N***e
发帖数: 61
5
真是不能同意再多。

【在 d*******r 的大作中提到】
: OOP原教旨: 尽量只用名词来描述世界
: FP原教旨: 尽量只用动词来描述世界
: 动词名词自然使用的人类: 上面都是神经病

m*****n
发帖数: 3575
6
go明确表示不支持class.
其它很多写法是C++的变种
C++ 减class 减thread 加coroutine 约等于go

【在 c******n 的大作中提到】
: 我是进来看fp的
: 结果看到了说go是fp

w***g
发帖数: 5958
7
同意。比如python的generator,也是一种coroutine,但是用起来
非常舒服。更加一般的coroutine,我还没能体会到秒处。
class非常重要,没有class根本活不了。go那套东西根本就不是
广义的coroutine。那说goroutine是coroutine,那C的所有函数
也都是没有yield的coroutine。从语言上来说,goroutine就是
标准的线程。
C++动作慢,最后连yield都因为兼容性不能进入关键字了,搞个
什么co_yield, 一点都不漂亮。钱多了拔苗助长,百年基业怕是
要毁于一旦。

golang

【在 m*****n 的大作中提到】
: coroutine 和 functional programming
: google算是把coroutine给整明白了,python却在全局单核锁的条件下把coroutine弄得
: 非常繁琐。好像Java也绷不住了,也上了coroutine. 新版的C++是不是也上了?
: 要我说python这种连起双核都很难的语言,老老实实学Qt玩signal slot就得了,整个
: 屁的coroutine脱了裤子放屁。
: 第二大烂坑是functional programming,其实就是去对象化。这里面最激进的是golang
: ,到现在我也不明白为什么要彻底去除class和methods. 谁知道原因?

w***g
发帖数: 5958
8
goroutine不能yield,不是coroutine。
coroutine是deterministic的,控制权在两个协程之间交换。
goroutine是带cooperative scheduling的threading,
goroutine的yield是yield到scheduler里的,
其实就是windows 98,逆历史潮流而动。windows 98
如果该yield的地方没有yield就会导致操统挂死。
windows98是coroutine吗?
不过纠结这些屁用没有,他们要写go,就让他们写go去,
老子反正不参与。 年轻人里也有脑子明白的,C++标准
研究的透透的,不用怕将来没有人写程序。
go就是比特币,说不明白。过10年再看。这两年深感
世人的糊涂和不可救药。

【在 m*****n 的大作中提到】
: go明确表示不支持class.
: 其它很多写法是C++的变种
: C++ 减class 减thread 加coroutine 约等于go

m*****n
发帖数: 3575
9
go的妙处是可以静等,不用动等一个全局变量变动
很多线程是要自旋动等某个全局变量变动的——这点不如goroutine,直接来个channel
阻塞。这点是最好的。也就是说goroutine的优点是再也不用while true, sleep, if
break大法。
而python根本没有这个,最多用的是await,表面上说是另一个函数相当于起了个协程
,我等它做完,其实不就是调用一个函数么?所以我说脱了裤子放屁。

【在 w***g 的大作中提到】
: goroutine不能yield,不是coroutine。
: coroutine是deterministic的,控制权在两个协程之间交换。
: goroutine是带cooperative scheduling的threading,
: goroutine的yield是yield到scheduler里的,
: 其实就是windows 98,逆历史潮流而动。windows 98
: 如果该yield的地方没有yield就会导致操统挂死。
: windows98是coroutine吗?
: 不过纠结这些屁用没有,他们要写go,就让他们写go去,
: 老子反正不参与。 年轻人里也有脑子明白的,C++标准
: 研究的透透的,不用怕将来没有人写程序。

w***g
发帖数: 5958
10
不过消息队列是一个比coroutine更加广泛的技术。
coroutine能做的多线程加消息队列也都能做。
而coroutine没法做multi-producer multi-consumer。
这个也许是为什么过去几十年主流语言一直没有
coroutine。

【在 w***g 的大作中提到】
: goroutine不能yield,不是coroutine。
: coroutine是deterministic的,控制权在两个协程之间交换。
: goroutine是带cooperative scheduling的threading,
: goroutine的yield是yield到scheduler里的,
: 其实就是windows 98,逆历史潮流而动。windows 98
: 如果该yield的地方没有yield就会导致操统挂死。
: windows98是coroutine吗?
: 不过纠结这些屁用没有,他们要写go,就让他们写go去,
: 老子反正不参与。 年轻人里也有脑子明白的,C++标准
: 研究的透透的,不用怕将来没有人写程序。

n******t
发帖数: 4406
11
golang這種帶了把進程調度弄進runtime的,只能寫某些很固定panttern的程序。如果
機器上有一堆程序都是go寫得,肯定behaviour亂七八糟,沒準星的。不過golang的
tooling是強項這個還是要承認的。
coroutine是個很老的東西,不知道這幾年爲啥炒這麼熱。大部分程序都不用增加併發
度,而不用增加併發度去用coroutine是會讓程序變慢的,很多人這種基本的道理都不
知道。

【在 w***g 的大作中提到】
: goroutine不能yield,不是coroutine。
: coroutine是deterministic的,控制权在两个协程之间交换。
: goroutine是带cooperative scheduling的threading,
: goroutine的yield是yield到scheduler里的,
: 其实就是windows 98,逆历史潮流而动。windows 98
: 如果该yield的地方没有yield就会导致操统挂死。
: windows98是coroutine吗?
: 不过纠结这些屁用没有,他们要写go,就让他们写go去,
: 老子反正不参与。 年轻人里也有脑子明白的,C++标准
: 研究的透透的,不用怕将来没有人写程序。

w***g
发帖数: 5958
12
python就是地性能的代名词,且不说根本就搞不定,就是搞定了,
别的地方也一样慢。python要性能的地方直接接入C++就完了。

channel

【在 m*****n 的大作中提到】
: go的妙处是可以静等,不用动等一个全局变量变动
: 很多线程是要自旋动等某个全局变量变动的——这点不如goroutine,直接来个channel
: 阻塞。这点是最好的。也就是说goroutine的优点是再也不用while true, sleep, if
: break大法。
: 而python根本没有这个,最多用的是await,表面上说是另一个函数相当于起了个协程
: ,我等它做完,其实不就是调用一个函数么?所以我说脱了裤子放屁。

g****t
发帖数: 31659
13
My two cents:
主流语言例如C这样的,没有coroutine 是因为其function的概念(或者call , return
的概念)与stack
绑定在一起。一个函数一个frame ,互不侵犯。
此stack之概念又与硬件深度绑定。例如stack memory之虚拟地址转换成物理地址,要
用到特殊
设计的寄存器与cache,查表等东西。
(我认为)不考虑硬件之配合与设计。任何一本is 书上那些启发式寻地址或者调度之类
的算法都是似是而非,甚至不合理,不成立的。
假设我们有一种特殊的函数。
F1(special_arg, arg1,arg2...) 允许指定一个special_arg(以及return)不放在函数
自己分配的stack里,而是可以放在与另一函数F2皆可访问的一个地址里。问题就解决
了。
但是此种设计之内存寻址什么的,必定要改硬件。不然速度上不去。最基本的,内存
miss之类的
代价是不可承受的。所以此類東西只弄個語法實現沒什麼意義。
所以楼主所说之functional, coroutine 之
等问题的根源,是在于silicon对stack frame之支持。由此你无法有性能的实现对函数
的call,
return的不同理解。
In one word,function, stack, etc不是硬件无关的概念。这点我认为教科书是强调
的不够的。


: 不过消息队列是一个比coroutine更加广泛的技术。

: coroutine能做的多线程加消息队列也都能做。

: 而coroutine没法做multi-producer multi-consumer。

: 这个也许是为什么过去几十年主流语言一直没有

: coroutine。



【在 w***g 的大作中提到】
: python就是地性能的代名词,且不说根本就搞不定,就是搞定了,
: 别的地方也一样慢。python要性能的地方直接接入C++就完了。
:
: channel

g****t
发帖数: 31659
14
Goroutine算是线程同级别的调度单位吧。
Core-process-thread
Core-process-goroutine
goroutine 之语法与Thread 不同。
逻辑层在同一层。


: 同意。比如python的generator,也是一种coroutine,但是用起来

: 非常舒服。更加一般的coroutine,我还没能体会到秒处。

: class非常重要,没有class根本活不了。go那套东西根本就不是

: 广义的coroutine。那说goroutine是coroutine,那C的所有函数

: 也都是没有yield的coroutine。从语言上来说,goroutine就是

: 标准的线程。

: C 动作慢,最后连yield都因为兼容性不能进入关键字了,搞个

: 什么co_yield, 一点都不漂亮。钱多了拔苗助长,百年基业怕是

: 要毁于一旦。

: golang



【在 w***g 的大作中提到】
: python就是地性能的代名词,且不说根本就搞不定,就是搞定了,
: 别的地方也一样慢。python要性能的地方直接接入C++就完了。
:
: channel

g****t
发帖数: 31659
15
Python应该用于把不同的东西粘贴在一起。其他用法本質上似乎都是一些hack。可靠性
是个谜。


: python就是地性能的代名词,且不说根本就搞不定,就是搞定了,

: 别的地方也一样慢。python要性能的地方直接接入C 就完了。

: channel



【在 w***g 的大作中提到】
: python就是地性能的代名词,且不说根本就搞不定,就是搞定了,
: 别的地方也一样慢。python要性能的地方直接接入C++就完了。
:
: channel

m**u
发帖数: 541
16
C++ 实际是学院派, 从定义出发,然后就是应用。 基本是数学的演绎。
其它的玩意,都是打野球拳。
这好比学校里,老老实实搞定义的,都比较难, 大部分人是套题的。
走定义的好学生少,大部分都是套题。
这个够清晰了把?
h**********c
发帖数: 4120
17
大致有三本书奠定了我的程序语言的理解,
一是超大规模集成电路设计。这门课我F,不过当时把好几个计算机图形的问题搞清楚
,觉得也值那一学期,觉得随时可以去教研究生计算机图形。说这门可,里面的捷径太
多,说bug 是里说当然,就是为了干活,你不可能设计一个全真值表,绝不可能。弄出
个东西上线,再调,这就是工程。这段核心是你不可能设计一个全真值表,其它都是废
话。
第二是bruce wikel thinking in c; 还有后来thinking in C++; 他好像那个时候很清
楚地要代码重用,现在好像神经病出钱,要他hype。cpp 就是c语言加宏,trovald 永
远不可能干掉C
第三是计算机架构,computer architecture; 现在叫computer organization
就是讲从高级语言到cpu 的优化,比如
while (i<100) i+=',n';
regex.relace(',\n$','');
这种基本的优化非常们清。
整个这个路程不多不少八年左右。达到我现在的理解。当然有更高的理解,弄斧了。
其实以现在的技术手段,copy/paste 也没什么大不了,编译器,解释器应该自己去
diff或更聪明一点。第一门课,我基本没学,但知道了厉害;第三门,大致听老师讲了
一遍,马马虎虎;第二的两本书加谭好强的C语言,每道题都做过一边。大概有五门课
有多线程的大作业。

golang

【在 m*****n 的大作中提到】
: coroutine 和 functional programming
: google算是把coroutine给整明白了,python却在全局单核锁的条件下把coroutine弄得
: 非常繁琐。好像Java也绷不住了,也上了coroutine. 新版的C++是不是也上了?
: 要我说python这种连起双核都很难的语言,老老实实学Qt玩signal slot就得了,整个
: 屁的coroutine脱了裤子放屁。
: 第二大烂坑是functional programming,其实就是去对象化。这里面最激进的是golang
: ,到现在我也不明白为什么要彻底去除class和methods. 谁知道原因?

h**********c
发帖数: 4120
18
while (i<100) i+=',n';
这个地方写错了,你大致理解就行了
i********y
发帖数: 6
19
coroutine火起来是随着大规模几十万人同时在线服务的流行,例如阿里的游戏三国志
战略版。

【在 n******t 的大作中提到】
: golang這種帶了把進程調度弄進runtime的,只能寫某些很固定panttern的程序。如果
: 機器上有一堆程序都是go寫得,肯定behaviour亂七八糟,沒準星的。不過golang的
: tooling是強項這個還是要承認的。
: coroutine是個很老的東西,不知道這幾年爲啥炒這麼熱。大部分程序都不用增加併發
: 度,而不用增加併發度去用coroutine是會讓程序變慢的,很多人這種基本的道理都不
: 知道。

m*****n
发帖数: 3575
20
浪费了我半个小时,订单系统连锁都没说。
这种家伙的东西还是少看吧!

【在 h****e 的大作中提到】
:
: golang

n******t
发帖数: 4406
21
所以我說了,coroutine只適合某一類程序。
此外,幾十萬人在線服務幾十年前就有方案了,用select/kqueue/epoll那一族就可以
而且性能更好,程序要難寫一點點而已,其實也就是boiler plate。

如果
併發
都不

【在 i********y 的大作中提到】
: coroutine火起来是随着大规模几十万人同时在线服务的流行,例如阿里的游戏三国志
: 战略版。

i********y
发帖数: 6
22
有几个帖子提到Python单核问题。
实践中Python经常调用外部程序,用Python的线程调用外部程序的过程中操作系统是充
分利用了多核的。例如开十个线程用top查看会发现外部程序的CPU各核分布比较均匀,
虽然Python自己只占一核。
N***e
发帖数: 61
23
看到Coroutine,第一时间我想到了PERL。

golang

【在 m*****n 的大作中提到】
: coroutine 和 functional programming
: google算是把coroutine给整明白了,python却在全局单核锁的条件下把coroutine弄得
: 非常繁琐。好像Java也绷不住了,也上了coroutine. 新版的C++是不是也上了?
: 要我说python这种连起双核都很难的语言,老老实实学Qt玩signal slot就得了,整个
: 屁的coroutine脱了裤子放屁。
: 第二大烂坑是functional programming,其实就是去对象化。这里面最激进的是golang
: ,到现在我也不明白为什么要彻底去除class和methods. 谁知道原因?

m*****n
发帖数: 3575
24
我再强调一遍,go的goroutine是一种进步——进步就体现在它用信号槽机制取代了反
复读取全局变量。
当一个线程的继续进行有赖于别的线程改变状态,即它是依赖于别的线程的,传统的做
法是
while True:
if some_flag ==1:
break
[sleep some time] #这行如果不加会造成cpu忙,成熟的程序员会加这行
resume the rest of process
自旋检查线程是极大的浪费,无论从写代码还是从运行效率上来讲。
而goroutine引入了channel,它会自动的阻塞在channel的收端,等待别的线程给向
channel发信号,来解锁。代码层面上前四行可以压缩成一行。
这是一种广义上的信号槽机制。信号槽机制是Qt发明的,为了避免图形操作界面的各线
程无序启动,造成卡死,统一建了个注册机制,由主线程去调度启停,当一个线程想要
启动一个函数,即起一个coroutine时,它只能发一个信号,被主线程捕获后,主线程
在不忙的时候再去启动槽函数。所以goroutine的成功是在于运用了信号槽机制,而不
是在coroutine本身。
凡是看不明白关键是信号槽,而错以为是协程更优秀的诸多跟风者,
只能是东施效颦。
n******t
发帖数: 4406
25

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
你這是哪個師傅教出來的??TMD多線程程序不是這麼寫的好吧。

【在 m*****n 的大作中提到】
: 我再强调一遍,go的goroutine是一种进步——进步就体现在它用信号槽机制取代了反
: 复读取全局变量。
: 当一个线程的继续进行有赖于别的线程改变状态,即它是依赖于别的线程的,传统的做
: 法是
: while True:
: if some_flag ==1:
: break
: [sleep some time] #这行如果不加会造成cpu忙,成熟的程序员会加这行
: resume the rest of process
: 自旋检查线程是极大的浪费,无论从写代码还是从运行效率上来讲。

m*****n
发帖数: 3575
26
呵呵了,就是这么写的。
状态机原理。
而且给我做项目的某高校导师的一群研究生连那句sleep都不会写。

【在 n******t 的大作中提到】
:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 你這是哪個師傅教出來的??TMD多線程程序不是這麼寫的好吧。

h**********c
发帖数: 4120
27
我就像当初我们讲computer architecture的老P还是比较牛的,这人是美国人跑到加拿
大我们学校做AP,我们学校的教职十个有三个左右是普林以上的出身,一半左右是多大
麦几尔博士资历,我们系的几个中国人好像都是清华的。说实在清华就是读书好,淡然
有能力比例肯定要高,但你不能保证每个能力都强,出东西还得有狠劲能拼,肯花钱花
时间能选对研究生。说老P,从我听课看computer architecture这本书他每章都很熟,
但他不好好讲,发牢骚,他在美国参加过CPU设计,还有什么方案没被军方采用。他确
实懂,我学的很烂,我当时的目标是争取读博,第二非常想去auto desk 的inventor在
蒙特利尔有一个大组。我们学校学生参差不齐,很多勤工俭学,上夜课;有一个越南妹
平均A,最高是A+,我记得不是平均是最低A,应该包括的老P的课。属于基本工的东西
就是一段程序算多少个tick.还有一个和我打过架的土耳其xbzz后来去麦基尔读研。然
后讲cache的设计,一句话,你的程序写的好,cache和内存之间的折腾就少,现在我觉
得concurrency就肯定少不了中断处理,那CPU就会不停的折腾,大概就是另外一门课讲
的sigjump longjump,我当时都没有重点学。当时觉得数学很高大上,图形学找工作的
本钱,最后都没有用上。这本书太后,去年买了最新版,内容大变,一开是就说,原来
的内容请去看computer organizaiton.基本优化减少程序里的branch,核心是避免寻址
有很大的偏移,避免cache miss.
想到那里说哪里,我很不以为然的是,基本每天都看hacker news,象google 亚麻, FB
这种牛逼到放卫星的公司,很少写文章从CPU层面benchmark他们的程序,应用,框架。
现代CPU自己就能统计一些关键数据,而且有商业的专业的bench mark 工具。非常的
amateur sheep我记得这本书就介绍了一些工具。里面的信息量太多挺厚一本书。
新版买了看了几十页,搬家就放下了。大致章节不是我想看的东西。还得看computer
organization.
现在很多事情莫名其妙,美国本来是一个很较真的国家,这也是我们来的原因。我觉得
如果你想在这里退休,就叫叫真吧。

【在 h**********c 的大作中提到】
: 大致有三本书奠定了我的程序语言的理解,
: 一是超大规模集成电路设计。这门课我F,不过当时把好几个计算机图形的问题搞清楚
: ,觉得也值那一学期,觉得随时可以去教研究生计算机图形。说这门可,里面的捷径太
: 多,说bug 是里说当然,就是为了干活,你不可能设计一个全真值表,绝不可能。弄出
: 个东西上线,再调,这就是工程。这段核心是你不可能设计一个全真值表,其它都是废
: 话。
: 第二是bruce wikel thinking in c; 还有后来thinking in C++; 他好像那个时候很清
: 楚地要代码重用,现在好像神经病出钱,要他hype。cpp 就是c语言加宏,trovald 永
: 远不可能干掉C
: 第三是计算机架构,computer architecture; 现在叫computer organization

1 (共1页)
进入Programming版参与讨论