半年前,Iron.io 从 Ruby 迁移到 Go:减少了 28 台服务器并避免了连锁故障,这个新闻惊动了不少小朋友,但是在 RUBY 社区,很多人不以为然,却引发 robbin 写了 Ruby 社区应该去 Rails 化了 http://robbinfan.com/blog/40/ruby-off-rails
前些日子无聊简单测试 GO 性能,写了个口水贴,并被荣幸加精:
http://ruby-china.org/topics/14364 GO 的性能真的是很惊人啊 Ruby • jihua0a • 于 4 天前发布 • 最后由 lyman_lai 于 1 天前回复 • 5738 次阅读 据说跟 C 比只差 10% 了,简单写了个 http server 输出个字符串,AB 测了下,-KC 100 -N 10000,双核老 I3 笔记本,4G 内存,MINT 64 位,飚到近 50000 每秒,用仿 SINATRA 的 beego 框架,prod 环境下用模板输出个字符串,也能飚到 26000,拿来 JAVA 的仿 SINATRA 框架 PLAY 输出同样字符串,每秒 8000 多。
帖子中引来各种 GO 黑,比如:
luikore 10 楼 , 3 天前 喜欢 #5 楼 @jihua0a c 在 server 的话我用 libmicrohttpd + mongodb-c-driver 和 go 对比测试过的,tps 大约 10 倍左右 (已经接近硬盘 io 极限了). 虽然也很 hello world 但也比不连 db 的测试靠谱点 c 在各种 micro benchmark 里基本都是比 go 快 2 到 10 几倍不等,代码量和 go 在一个数量级
当然这位老兄实际还是非常专业的,虽然他用两年前的 GO 来黑现在的 GO 不妥当。 但是,突然出现了低水平黑 GO 的新贴并被加精,显得咱们 RUBY 社区被固执与偏见占领:
http://ruby-china.org/topics/14407?page=1#replies 真的没必要浪费心思在 Go 语言上 瞎扯淡 • gaicitadie • 于 2 天前发布 • 最后由 jun1st 于 11 小时前回复 • 6903 次阅读
如此垃圾低级口水贴被加精,是准备宣告 RUBY 社区就是不欢迎 GO 吗???以 gaicitadie 的逻辑,干脆大家别用 V8,别用 ANDROID,别用 GOOGLE 搜索,别用 GOAGENT 好了,这些都是 GOOGLE 的东东。。。
本来这种贴,一般都是呵呵
完事了,但很是忍不住解释下了,如果说大家不喜欢 go,或者没有去学习 go,就是固执或者不接收新事物,也只能说楼主说的也太片面了吧。至于口水帖子加精,是有人觉得有价值的回复点喜欢了,还有他们也代表不了整个社区吧,仅仅是个人的看法而已。
LZ 你才是固执啊~!大家的讨论归讨论。go 真心的说还是不错的~!至少 martz 大牛都对 go 表示很认同~!另外本人也很看好 go,只是一个是动态语言一个是静态语言。两者差别还是有的~!另外我觉得 ruby 社区的人思想也很前卫。很 open,没有你想的那么 close~!另外就目前来说,在 web 方面好像真没有什么能撼动 rails 的地位,快速的开发效率,敏捷的思想,……这写特性真是 web 开发者的福音啊~,谈到性能。我觉得@robbin说的也对~,很多网站一开始就死了。还没有到性能需要优化的地步。如果真到了性能需要优化的地步,那后面用 go,c,java 都是可以的~!总的来说,感觉你有点极端~! ** 如此垃圾低级口水贴被加精, 是准备宣告 RUBY 社区就是不欢迎 GO 吗 ,ruby 社区没说过不欢迎任何人。大家的讨论也都只是个人行为,纯粹是口味的问题。就像有些人喜欢吃米饭,有些人喜欢吃面条。
楼主你先上个头像吧,引战帖没头像怎么对喷,都不知道喷得谁。
请看完评论在喷,我不认为这个社区排挤其他语言。在这里问其他语言都有一群人回答你的问题。
还有就是,每个人都有言论自由,就算他说他讨厌 google,你喜欢 google 一样,你可以客观的说你为什么不喜欢 google,你为什么喜欢 google,请勿上升到口水战,出现垃圾这样的字眼,纯粹技术讨论而已,勿上升到人身攻击。
喜欢或者不喜欢听听算了,没必要跟网上一个你没见过的人说那么多,该干啥干啥去
首先是你们的 benchmark 太片面,对其他语言很不公平,光列出几个和 C 而且是很多年前的 GCC 的 benchmark 就说和 C 有得比,太误导人了。GCC 某些情况下 -O3
比 -O2
慢,所以这些 benchmark 里用 -O3
就会比 -O2
慢?另一方面却又说我给的带数据库查询和模板渲染的 benchmark 用的 Go 版本太老,双重标准...
在你们的"权威" helloworld 测试中,有没有 cache policy / secure header ? (不明白可以就地看看 ruby-china 的响应头 X-XSS-Protection 等部分) 有没有靠 keep-alive 减少握手?(真实世界 keep-alive 然后连续几万个请求的只有爬虫和 ddos 了吧?) 有没有 session ?(事实上签名 cookie 做 session 的话要 openssl 取 secure random, 以标准计算签名等操作也是非常费时间的; 用服务器端 session 的话要多产生 io, 速度也会折扣)
对不同的 benchmark 和应用场景,比较的结果都是不同。我发那帖的目的就是表明 Go 和 C++ 也有不如 Ruby 快的情况,认清楚为什么快和慢更重要,而且模板渲染比 n-body 之类的 benchmark 对 web 开发更有意义。
python 是和 ruby 差不多"慢"的,但是 Go 有性能可以和 numba 相比的库么?通过 DSL 和动态生成代码优化高性能计算,python 都超越 hadoop 了 (从视频 10 分钟起,这个 talk 也阐述了数据结构的重要性).
其实加 CDN / 加缓存 / 改进算法 / 改进设计做性能优化的效果好得多。从 iron.io 那种没代码没真相的以广告为目的的例子里又能看到啥?做网站我们还要考虑网络延迟,还要用很多同样用 C 编写的第三方库 (尤其是需要性能的部分), 花很多时间在系统调用上,考虑浏览器渲染速度,更一步冲淡了语言框架选择的性能影响。
Rails 开发无所不用... 很多项目里 js, python, perl, go 写的库都用到了...
给这么多负面评价真抱歉,我承认我的表述也不乏冲动失实的地方,但没人唱唱反调的话真要牛吹上天了...
首先定义慢。慢指的是完成相同的任务,消耗的总 CPU 时间多。
第一是 Hadoop 本来就很慢。MapReduce 的首要目标不是快。
第二,Hadoop 也没拦着你在上面用 Numba。你在 Hadoop 上跑 numba,显然比直接用 numba 慢。
第三,我觉得 numba 基本上是不可能比得过现代的 APL 系的语言,比如 J/K,和 Fortran 的组合的。
numba 优化太底层了,APL 系列的都是在矩阵运算层面优化的。Numpy/Scipy 也是调用了不少 Fortran 库的。
当然,单纯拼矩阵乘法的话,搞不好都是被 GPU 完爆的货
所以我感觉还是下面这个库有希望啊
@wppurking @bhuztez 专业歪楼 30 年...
@bhuztez 嗯,编译到 llvm 没有编译到 C 然后交给 opencl 有前途。不过 opencl 的代码限制略多,编译到 llvm 然后靠 llvm 的自动矢量化,代码的自由度应该更高点
1, 瓶颈往往不在 hello world . 2, Go 语言本是以 C 为原型,以 C++ 为目标设计,但最终却大相径庭。语法复杂是必须的。ruby 相对优雅. 3, 语言的性能,开发效率,维护效率,学习曲线,库,平台,设计目标,IDE, 社区 等 都是要考虑的。而且随着时间推移,这些都是变数。 4, 没准 Go 3.0 和 python3.0 一样,会大改。
#28 楼 @bhuztez 需要啊,一种情况是对矩阵做非标准操作,例如按条件修改元素。
另一种情况是抽象操作并非最优的,例如
D = A * B * C
按照 numpy 的做法,这里的乘法最终变成调用 CUDA/opencl 的矩阵乘法了,但是中间结果还是要转化成 python 的矩阵。但这两个运算可以放到一起,展开来做 lazy fusion, 中间结果的内存分配也能省掉,如果乘法运算里 emit 的是 llvm IL, 就能 inline 进来做优化。如果编译器知道运算对象是矩阵,也能主动生成更优的代码。
再一种情况是你可以告诉编译器,说不关心浮点运算做分配律 / 交换率变换的精度损失,那么可以做的优化就更多了。
别争呀!
想想,你看不起 VB, 那些靠 VB 发达的人笑死你 ...
你看不起 Ruby? 那些靠 ruby 买房买车的笑死你...
错!不争啥都不知道!
@jihua0a 口水贴被加精,既不能代表整个 ruby 界 ,也不能代表国内的 ruby 界 ,甚至不能代表 ruby-china 社区 。我觉得那只能代表某个管理员的个人偏好。你觉得不爽,可以直接开喷加精的管理员,没必要扩大化。
为什么你应该学 Ada
Ada 在处理 Concurrency 上一点都不比 Go 差。
https://groups.google.com/forum/message/raw?msg=erlang-programming/5X1irAmLMD8/qCQJ11Y5jEAJ
A better Pascal than Pascal. Handled concurrency about as nicely as an imperative language can.
Concurrency in Ada
http://cs.nyu.edu/courses/fall02/G22.2110-001/tasking.ppt
更多请参考
http://cs.nyu.edu/courses/fall02/G22.2110-001/
Ada 还支持 Generic。
Ada 有成熟的 IDE。在这个不用 IDE 根本无法写代码的 Java 都能流行的时代,有个强大的 IDE 不算 Bug。
为什么你不该学 Ada
没有 Type Inference (只怪 Ada 生得早) 没有 GC (Ada 的定义里 GC 是可选的,GNAT 应该是没 GC 的,jGNAT 是被 JVM GC 的)
#32 楼 @Victor 印象中是我加精的,加的时候我也犹豫过,毕竟是一篇口水贴,精彩的有一定技术含量的内容在回复中。当然回复中也不乏片面,断章取义,甚至叫嚣,甚至嘲讽内容。如果加精给大家带来困扰,我愿意认错,并取消加精的处理。
关于这篇 Ruby 社区这么固执偏见不喜接受新事物
明显属于瞎扯淡
的主题帖,我跟 #2 楼的观点一致,呵呵了事。Ruby 语言都出现 15 年了,从当初的 Ruby V.S. Python 到 Ruby V.S. Java 以及 Ruby V.S. PHP 这么一路走下来这么多年,无论哪一种语言都有自己的地位,自己的领域,这些都不是一朝一夕建立的,也不是靠几个拿性能说事,拿语言表达能力说事的人就能左右的...... 所以,我对楼主的观点是:呵呵
#39 楼 @huacnlee #38 楼 @lgn21st 一般论坛设定精华帖的出发点应该是从较大量的信息中筛选出“干货”,以此给新加入论坛的群众造成一种:这个论坛是有实质性内容的,我来这里可以获得 XXX 方面的知识。间接给论坛的广大群众传递一种信号,什么样的帖子才是精华帖,才符合论坛的管理层对论坛的定位和导向。但是这种设置必然被管理员个人偏好所影响。造成的后果就是,凭什么这么烂的帖子都可以设置成精华,而我的就不能?不爽,我就要喷。喷就要扩大化,喷一个人是不够的,要喷就喷整个社区。
虽然很多帖子下面的回复的确有干货,但是可没有人能天天有时间从头到尾拜读所有精华主题和所有精华主题下面的全部回复哦。所以一个帖子的主题,内容,和占前排的回复一般就会足够影响大部分读者对这个论坛的印象了。
翻看目前的精华帖,给我的印象是: 1 管理员鼓励开源(关于 gem 和开源的加精) 2 关于 Rails 经验的分享(XXX 使用的个人浅薄经验,XXX 的结合使用) 3 适用于新人的一些入门知识 (XX 译文) 4 技术细节的探讨 (XX 方法的一个疑问) 5 友情广告,业内新闻 (XX 活动) 6 前端,SEO,口水,或许还有其它
对于 6。这到底是 ruby china 还是什么前端小组,SEO 论坛?如果要看这些知识,一定要来这里么?当然,我作为普通不明真相群众可以选择忽略,希望不会有一天进入社区的第一页是满眼和 ruby 无关的主题,毕竟精华帖列表现在是默认的首页了。
这有啥好争论的。
切西瓜自然用西瓜刀要比三寸水果刀效率来得高,但西瓜刀的成本却是三寸水果刀的好几倍。 反过来,你用西瓜刀去削苹果皮试试,绝对坑爹。
引用一句土话:到什么山,唱什么歌。 或许几十年之后,你坐着老板椅,喝着咖啡,看着公司报表。再来回顾几十年前的自己身为码畜时,为了几门语言和小伙伴们吵得不可开交,那是多么的可笑。
写这么长个帖子,来说 ruby 社区固执,固执的究竟是谁?
有这么多时间,用来赚钱吧,不用来赚钱,也可以用来给 Go 社区做些真正有用的贡献也许会更好些。
为 Go 摇旗呐喊的人不少,贡献的好项目又有几个?Web 框架都是稀稀落落你做一个,我做一个,技术选型的,最终确定一个语言,需要考虑的因素很多,性能远不是唯一也不是最重要的,糟糕的代码带来的害处要远大于优秀的 hello world 性能能带来的好处。
管理员精华这几个争吵贴,并没有制止这些无聊的语言之争,足见 ruby 社区并不是你想象的那么固执,希望这种无聊的关于语言孰优孰劣的争执,还是能消停一点
干脆大家别用 V8,别用 ANDROID,别用 GOOGLE 搜索,别用 GOAGENT 好了,这些都是 GOOGLE 的东东。。。
我还真的一个都不用。以前还用用搜索,现在也不用了。gmail 正在淡出。预计年底彻底脱离 Google
#89 楼 @blacktulip 我看了好久才懂这什么意思
@jihua0a 我不知道你为什么急着要别人全盘接受你的看法,如果没办法把话题限定在对问题本身的讨论上,那么就请离开。
Go 语言没有体验,无发言权。
但是 Ruby 我很了解,Web 开发现在也算小有心得,我有发言权,我只想说,做 WEB 时,当涉及到复杂的后端逻辑,在性能,易用和可维护性上综合考量,更重要的是在编写代码的体验上,又有那个语言比 Rails 赖以成功的底层语言 Ruby 更适合?我不清楚 Go 的定位,但是,我知道做 WEB 后端开发,Rails 是一个很不错的选择。
如果让让我在 Linux 下选择系统语言,我会毫不犹豫的选择 C, 为什么?至少我看来,有两个原因。
自底向上
的开发哲学来说,开发的点,经常都是足够小,例如可能仅仅是一个函数,C 刚好足够。Go 额外提供的,真的好的东西,只能是累赘。最近有不少心得,就是整整花了半个月时间,完全重写了之前存在各种误用的很多 shell 脚本,重写 后代码简练多了,原来 bash shell 代码也可以写的很优雅,至少在做系统脚本 (复杂性不会太高), 以及做胶水语言这点上来说,bash shell 至少是我首选的语言。
说了半天,其实要表达的是:Ruby 和 Go 各是各码子的事,完全八杆子打不着的两个东西,为什么一定要这样比较呢?
本不想回帖,因为我一直都觉得,这样的语言比较 (甚至上升到社区的喜好高度) 的帖子,又有什么意义?个人有个人的喜好。
顺便提一句局外話,我觉得社区的整体氛围充满了浮躁,也许和当前社会大环境有关吧。
为了可以立即做项目,而满足于对 Ruby 的浮浅了解,一个技术还一知半解时,又去尝试另一个新的技术。如果你真喜欢 Ruby(或你喜欢的任何东西), 那你就专注于它,专注于在它之上实现你所知道的任何最佳实践,争取创造一些原创的东西出来,Ruby 当然不是万能的,但就算暂时没有产出,我相信,作为 Ruby 这样一个语言来说,你在 Ruby 之上的投资,在你学习其他语言时,一定会有丰厚的回报。
最近有不少心得,就是整整花了半个月时间,完全重写了之前存在各种误用的很多 shell 脚本,重写 后代码简练多了,原来 bash shell 代码也可以写的很优雅,至少在做系统脚本 (复杂性不会太高), 以及做胶水语言这点上来说,bash shell 至少是我首选的语言。
http://ruby-china.org/topics/14311
您还真是多情啊。
概念 1: Ruby 是一个非常优雅的动态语言,而字符串处理则更甚。
概念 2: BASH 也可以写出幽雅的代码。
这俩有冲突吗?
说起来,那个例子中的代码,通过 read 的确是丑陋点。我早改了。
IFS='.' && array=($(basename "$0"))
不觉得比原来幽雅一些吗?
那也要分干嘛呀。就像你说的,拿别人短处和自己长处比
...
何况用 Ruby 写脚本,我也没有这方面经验,最多也就是一些 ruby -e 的方式,也有用到,也许将来会以 Ruby 直接发系统调用的方式的改写,不过现在没精力呀,最近每天痛苦的啃 the rails 4 way 当中...
今天刚把《松本行弘的程序世界》看完。觉得 Ruby 之父也没有在书中批评某个语言,而是客观的说了一些各个语言的特点以及 Ruby 是如何做到的。
我很赞同关于动态语言与静态语言方面他说的内容。以及在评价 Erlang 的时候对 Ruby 未来的乐观。
我觉得,这才是 Ruby 人应该有的风格。好的事物要想发展,怕被别的语言取代是没有任何用处的。还是应该考虑如何兼容并包才对。
PS:真都应该向松本行弘学学。。。
好久没来了,纠正个错误。
你看到的几乎所有东西都是架构在 C 之上的。( linux 系统 有汇编,测试应该用的 python)
咱们用的 ubuntu 啊,软件什么的,大部分是 c 和 c++
是好久不见你了呀~
其实,我所看到的东西,几乎都是建立在 小命令
以及 bash shell 脚本语言
之上的。现在除了 Ruby , 最爱 bash shell 了。