由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 关于各种语言应该这么理解
相关主题
我最近写ruby写得很开心不知道为什么都在骂krill,我觉得他说的是实情啊
看你们讨论IDE热烈,问个问题如何设计一个支持 survey or questionnaire 的数据结构?
感觉os之上很多automation都是用perl类脚本来搞最近的科技发展简直要逼死人了
在手机上用browser里的web application,和手机上用app store下(转载)groovy整个就是一个better python
你们这些做游戏的,用unity,是自己掏钱吗?哪种脚本语言适合做代码的文本分析?
Cassandra VS ElasticSearch 一般 logging 哪个好创业公司的代码会放在云平台上吗?
大牛们讨论下Nasdaq故障吧。goodbug,什么时候在java里用Groovy?
老魏你玩过chaos monkey吗?这里对infra有莫名其妙的热衷
相关话题的讨论汇总
话题: 机器话题: 语言话题: java话题: 代码话题: monkeys
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 54598
1
计算机语言这个东西,应该说有两个职能
就像人类语言最重要的职能是人与人交流的工具一样
计算机语言的主要职能是机器与人交流的工具
但是很多人都忘记了一点,计算机语言,同样具备有人跟人交流的职能
最早在计算机语言设计之初认为,人跟人交流通过注释来实现
后来发现,coding monkeys只喜欢劈里啪啦敲代码
最讨厌的就是写文档写注释,而且写出来的注释文档错误一堆
经常几十年不更新,所以最后大多数monkeys只能回头去看代码
所以计算机语言不得不具备有跟人类语言一样的职能,这不能不说是一个喜剧
回到最初的职能上去,那就是机器和人交流的工具
在以前,社会资源有限,计算能力有限,所以机器和人都爽是很难的
所以只能选一个爽,那当然是要让机器爽,机器爽了客户才爽
客户如果不爽,没人给monkeys发工资,那不行,所以第一步是满足机器
最早的汇编什么就是指令集,那就是机器语言
当时所谓的编程就是给计算机下指令,其实不存在有真正意义上的编程
然后有了c这个伟大的发明,c给人类社会最大的遗产应该是操作系统
操作系统之上,c就难堪大任了,一个很重要原因是
c没有搞定内存的管理,c搞定了cpu的管理,这个是一大进步
但是前人也不是神仙,不可能指望他们把内存也给搞定
只能一步一步来,先搞定cpu,内存的管理交给后人了
c和unix的发明是重大突破,为此作者获得了图灵奖
机器爽了之后,随着机器性能的提升
人开始要求也爽了,因为只是机器爽
人不爽的话,这个东西还是没法搞,毕竟最后事情还是要人来做
机器自身无法直接接收来自客户的各种命令
那人爽又分为写代码的人自己爽和别人爽,所谓别人爽包括让老板爽
别人如果不爽,那你自己再爽也是找死,别人爽了,写代码的人不爽也可以过得下去
而老板的主要职责就是组织一堆monkeys写代码
那怎么让老板爽呢?那就是把内存管理,跨平台这些琐事给搞定
从老板利益出发,老板都希望能够跨平台,谁不希望自己客户越多越好啊?
现在你看做app,老板们都希望ios一套,android一套,web一套,最后desktop还来一套
以前其实也一样,所以实现了跨平台需求的语言更有生命力
其次就是内存管理,因为内存管理老出错,不行,错多了,项目老失败,那搞什么
所以内存集中管理也符合老板的利益,手下monkeys出错的概率降低了
最后一个就是代码的维护,可读性很重要,因为monkey会跳槽,会离职
而后来的monkeys要看懂代码很重要,否则无法上手给老板创造收益
相比之下,写代码就容易多了,只要是monkey就能写,所以精明的老板
也都会关注代码的可读性,当然不精明的大有人在
所以c++横行的时候,大部分项目是失败的
但是人总会学习的,错多了,自然就有了经验,有了经验自然就会做防范
久而久之,这些经验就会推广,就会被更多的老板所学习
这就是后来的没有银弹以及软件工程的诞生
当然这期间的过程也不是一帆风顺的,经历了无数的失败和挫折
比如最早跨平台的尝试就是fortran搞出来的,把fortran编译成byte code以跨平台
最后因为机器性能达不到,华丽地失败了,再比如,最早的jit优化是smalltalk搞出来的
但是因为这个语言本身跟c语法相去甚远,所以也没有成功,直到java的诞生
之前还包括python的诞生,但是python有些矫枉过正
python让别人很爽,但是机器也吃不消,所以python在java之前也没红起来
java的成功在于,在保证机器爽的前提下
尽最大可能,让除了写程序以外的其他人都爽了
保证机器爽java用了很多优化的手段,比如jit,甚至aot都一度提上日程
还比如让hotspot变成缺省的jvm,不合格的性能不够好的jvm淘汰了一大批
甚至ibm都没做出像样的流行的jvm,在此基础之上,尽一切可能搞oop
因为oop让写的人很不爽,但是让看的人很爽,也就是让别人爽
所以公孙大神强调python是oo语言,也是这个目的
这一切到今天回头看,无疑是成功的,oop的开创者甚至在01和03年获得了两次图灵奖
这也是图灵奖至今为止,仅有的两次颁发给对于某一种paradigm作出突出贡献的人
其他的都不是因为paradigm获奖,而是各种理论,甚至很多都不是cs的东西
比如姚期智的伪随机数,这个我觉得跟cs没啥必然联系,放在其他engineering
也都会有如何产生一个伪随机数的需求,扯远
在让机器爽(c)和别人爽(java)了之后,现在最大的问题在于
我们如何让写代码的人爽?写代码的人要爽,必需多样化
因为monkey跟monkey是不一样的,不可能要求所有monkeys都用一种方式写代码
当然让所有monkeys按照他们想法随心所欲写代码,这也不对
所以要在让写代码的monkey爽的同时,我们不能让别的monkey不爽
更不能让机器不爽,scala最大的问题就在于,别人很不爽,这是最大的问题
其实fp整个都有这个问题,看的人会很不爽
而脚本的主要问题是机器不太爽,动态类型,让很多优化机制无法难以适应
从而整个拖慢了机器的性能,所以这也就造成了这些语言对于java的霸主地位无法撼动
那现在怎么办?
我觉得vert.x提出的理念很好地address这个problem
那就是我们不在c和java的地盘争食,我们绕开这两个东西
java有的,我们拿来我用,然后呢?用脚本还有fp语言做补充
但是因为这些语言可能造成机器或者其他人的不爽
所以我们应该对这些语言的使用范围,做一个限制
这就是module,你这个语言可以写,但是不要超出这个module的范畴
超出的部分,交给vert.x去做,vert.x框架本身是java写的
而java的jvm本身,则是建立在c的基础之上,而每一个module内部
可以由monkeys们自由选择语言,你爱用什么就用什么
但是不要写多,保证结构的同时,又尽可能让写的人能爽起来
以后每一个monkeys负责一个module,哪个module错了就找哪个monkey
很容易的,这个其实就是soa啊
所以vert.x将会是将来,会是c和java之后的future
z****e
发帖数: 54598
2
图灵奖和菲尔兹奖还有诺贝尔奖一样,都是重大突破奖
从c/unix还有oop的作者获奖说明你可以感觉到,c/unix和oop在整个cs历史上有多么重
要的地位
z****e
发帖数: 54598
3
脚本/动态类型->groovy, javascript, ruby & python
这一类是让机器很不爽的,which是c解决的问题
fp -> scala, clojure
这一类是让看代码的人很不爽的,which是java解决了的问题
z****e
发帖数: 54598
4
jvm==gc,跨平台和jit
jvm的执行效率跟dart vm不相上下,可能会慢一点点
但是基本上感觉不出来,毕竟dart不需要考虑多平台
它只要搞定google自己的平台就好了
如果dart编译成js再比,那java胜出没有任何问题
z****e
发帖数: 54598
5
无论是scala还是clojure,我觉得看的人都会很不爽的
fp本身不直观,比较抽象和学术化,不是所有人都能接受的
这学期学校开了一门fp的课,选的不超过10个人
无奈取消了
动态类型对程序员要求很低,但是机器执行起来非常痛苦
基本上trade off在jvm上是20-25%左右的性能折扣
也就是如果java写的代码执行效率在100分左右的话
groovy,js,jruby,jython这些,大概得分在75-80分左右
cruby和cpython就更糟糕了
jruby在1.0以后的版本,执行效率就比cruby快40%左右
其中20%是jvm带来的,还有20%是其自身用了一个dynamic什么叉叉机制所带来的
但是比起java还是差20%左右,可想而知cruby有多慢了
python也差不多,除了pypy用了jit会好一点外
其实cpython的虚拟机跟jvm不在一个档次上
目前跟jvm效率最接近的是clr,但是clr最大问题在于,不跨平台
这个没办法,dartvm其实也有类似问题,最后估计还是要靠jvm
这个可以回答为什么王垠做的那个开源项目用java写的原因
王某人还是有点小聪明的,知道哪里便宜比较多,好骗
jvm上这么多语言,就jython的爹最弱了,其他都有大腕爹在背后撑着
现在都是拼爹模式
z****e
发帖数: 54598
6
python和js最大的问题就在于,他们没有意识到,脚本其实应该是多样化的
不同的人完全可以用不同的语法写脚本,为什么不行?
ruby的问题在于,同一种语言内部,居然有多种方式来表达
那这个会造成混乱,所以最好的方式就是不同的脚本起不同的名字
然后不同名字的脚本,对于同一种东西有各自唯一一种表达
但是凑在一起,又有很多种表达方式
酱紫就好了,所以这些脚本需要的,其实是一个统一的平台
which is jvm
java自身也搞出了groovy来凑热闹,hoho
z****e
发帖数: 54598
7
vert.x的好处在于,汇集各种脚本引擎和语言包
给了各位语言爱好者以真正华山论剑的平台
结果一堆人吓尿了,哎呀,不要啊,不要去华山论剑啊
行不行,拉出来遛遛,躲躲闪闪算什么,hoho
一堆人以前唧唧歪歪java要完蛋要完蛋
这个要干掉java,那个要干掉java
现在java把门打开了,来吧,来干掉我吧
结果吓得半死,不敢上啊
叶公好龙啊叶公好龙
a***n
发帖数: 538
8
其实性能差个两三倍关系不大。对于一般公司堆硬件就可以了。
c*******9
发帖数: 9032
9
抽象和学术化的我看着才爽。haskell就类似文学中的诗歌,精简(文字的间隔起作用
)。
计算机并行话高以后,fp能广泛使用以后,计算机系也会相应提高数学要求。

【在 z****e 的大作中提到】
: 无论是scala还是clojure,我觉得看的人都会很不爽的
: fp本身不直观,比较抽象和学术化,不是所有人都能接受的
: 这学期学校开了一门fp的课,选的不超过10个人
: 无奈取消了
: 动态类型对程序员要求很低,但是机器执行起来非常痛苦
: 基本上trade off在jvm上是20-25%左右的性能折扣
: 也就是如果java写的代码执行效率在100分左右的话
: groovy,js,jruby,jython这些,大概得分在75-80分左右
: cruby和cpython就更糟糕了
: jruby在1.0以后的版本,执行效率就比cruby快40%左右

c******o
发帖数: 1277
10
zhaoce你真能写。。。
1 (共1页)
进入Programming版参与讨论
相关主题
这里对infra有莫名其妙的热衷你们这些做游戏的,用unity,是自己掏钱吗?
[bssd]去年研究CS最大的收获Cassandra VS ElasticSearch 一般 logging 哪个好
请zhaoce大牛比较一下reactor和vert.x大牛们讨论下Nasdaq故障吧。
最expressive的三大语言老魏你玩过chaos monkey吗?
我最近写ruby写得很开心不知道为什么都在骂krill,我觉得他说的是实情啊
看你们讨论IDE热烈,问个问题如何设计一个支持 survey or questionnaire 的数据结构?
感觉os之上很多automation都是用perl类脚本来搞最近的科技发展简直要逼死人了
在手机上用browser里的web application,和手机上用app store下(转载)groovy整个就是一个better python
相关话题的讨论汇总
话题: 机器话题: 语言话题: java话题: 代码话题: monkeys