`
tetsu.soh
  • 浏览: 78166 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

Ruby的source code很难读

阅读更多
最近在读CRuby1.9的source code,感觉code写的很烂。
到不是我的C有多好,只是同时也在读Python的code。
对比之下有差距。

最明显的两点:
1。 Ruby的src基本没注释。
随便打开一个Ruby的src file,比如gc.c 或者 thread.c, 从头浏览到尾,没几行注释。
类似的,找个Python的src file看看,该有注释的地方都有。

2。 Ruby的命名混乱。
变量名,方法名很多时候让人莫名其妙。更糟糕的是误导。比如gc.c里面定义了heaps_used,从名字上看会给你一个印象--已经被使用了的heaps的大小。(这里的used本身就是很泛泛的词)其实看了具体的实现就会发现,这里的used是allocated的意思,就是通过malloc取得了实际的内存。

Ruby对内存管理部分的命名也很郁闷。最小的单位是slot, slot的数组称为heap, heap的数组称为heaps。
看看Python是怎么命名的吧--最小的单位是block,block的集合称为pool, pool的集合称为arena。这样避免了*heap*这个被滥用的词。而且单从字面意思上也能看出层次。

鄙人英文一般,不看src是死活品味不出slot和heap怎么会有集合的关系。
分享到:
评论
39 楼 rubynroll 2009-10-31  
gigix 写道

绝大多数人根本就不应该来做软件


这句话很有意思,挺一个,呵呵~
38 楼 gigix 2009-10-30  
vdgame 写道
很遗憾,绝大数人写不出彪悍的代码。

绝大多数人根本就不应该来做软件
37 楼 gigix 2009-10-30  
vdgame 写道
gigix 写道
vdgame 写道
我一直反对“良好的代码本身就是注释”这句话。什么叫良好的代码?每个程序员都可以说自己的代码是良好的。
一段代码除非够简单,否则加上注释是有必要的,起码要告诉别人:是做啥的?设计思路是啥?

第一句话就是废话
同样每个程序员都可以说自己的注释是良好的,那写了注释还是看不懂又怎么搞?
代码至少还可以编译可以测试可以运行,你拿什么来证明注释是最起码正确的──更不要说什么“良好”了

> 一段代码除非够简单
出于什么原因你不能把它写得足够简单?

> 起码要告诉别人:是做啥的?设计思路是啥?
出于什么原因你的代码不能说出这些?

而且,如果你的代码做不到,出于什么原因你相信注释就能做到?

很显然,你没参与过大型项目,没有读过很多别人代码。小作坊式的编码随便怎么玩都可以
对别人的话咬文嚼字没意义,有些事情是要你境界到了才能体会的
随便说说而已

我曾经在一百五十万行代码的项目里亲眼看到程序员们对着注释写得漂漂亮亮的函数一行都不敢动手改,只好copy&paste小修改一点点来对付出一个新功能。你不妨告诉我,需要多大的项目,读过多少代码,才能看到烂代码可以由好注释来弥补?

然后我带着这些程序员在这个一百五十万代码的项目里添加测试,重构,重构之后把注释全都删掉,因为代码一眼就能看懂。我的同事甚至在超过千万行的代码库里做同样的事。我也很想知道,到了什么境界我才能知道”非小作坊式的编码“该怎么玩?
36 楼 vdgame 2009-10-30  
t0uch 写道
gigix 写道
vdgame 写道
我一直反对“良好的代码本身就是注释”这句话。什么叫良好的代码?每个程序员都可以说自己的代码是良好的。
一段代码除非够简单,否则加上注释是有必要的,起码要告诉别人:是做啥的?设计思路是啥?

第一句话就是废话
同样每个程序员都可以说自己的注释是良好的,那写了注释还是看不懂又怎么搞?
代码至少还可以编译可以测试可以运行,你拿什么来证明注释是最起码正确的──更不要说什么“良好”了

> 一段代码除非够简单
出于什么原因你不能把它写得足够简单?

> 起码要告诉别人:是做啥的?设计思路是啥?
出于什么原因你的代码不能说出这些?

而且,如果你的代码做不到,出于什么原因你相信注释就能做到?

严重同意,无论是什么语言,就算是C这样的代码,写得好的话一目了然,写得不好,有注释也是白搭。
彪悍的代码不需要注释。

走敏捷路线的?代码就是文档?
很遗憾,绝大数人写不出彪悍的代码。
35 楼 vdgame 2009-10-30  
gigix 写道
vdgame 写道
我一直反对“良好的代码本身就是注释”这句话。什么叫良好的代码?每个程序员都可以说自己的代码是良好的。
一段代码除非够简单,否则加上注释是有必要的,起码要告诉别人:是做啥的?设计思路是啥?

第一句话就是废话
同样每个程序员都可以说自己的注释是良好的,那写了注释还是看不懂又怎么搞?
代码至少还可以编译可以测试可以运行,你拿什么来证明注释是最起码正确的──更不要说什么“良好”了

> 一段代码除非够简单
出于什么原因你不能把它写得足够简单?

> 起码要告诉别人:是做啥的?设计思路是啥?
出于什么原因你的代码不能说出这些?

而且,如果你的代码做不到,出于什么原因你相信注释就能做到?

很显然,你没参与过大型项目,没有读过很多别人代码。小作坊式的编码随便怎么玩都可以
对别人的话咬文嚼字没意义,有些事情是要你境界到了才能体会的
随便说说而已
34 楼 t0uch 2009-08-21  
gigix 写道
vdgame 写道
我一直反对“良好的代码本身就是注释”这句话。什么叫良好的代码?每个程序员都可以说自己的代码是良好的。
一段代码除非够简单,否则加上注释是有必要的,起码要告诉别人:是做啥的?设计思路是啥?

第一句话就是废话
同样每个程序员都可以说自己的注释是良好的,那写了注释还是看不懂又怎么搞?
代码至少还可以编译可以测试可以运行,你拿什么来证明注释是最起码正确的──更不要说什么“良好”了

> 一段代码除非够简单
出于什么原因你不能把它写得足够简单?

> 起码要告诉别人:是做啥的?设计思路是啥?
出于什么原因你的代码不能说出这些?

而且,如果你的代码做不到,出于什么原因你相信注释就能做到?

严重同意,无论是什么语言,就算是C这样的代码,写得好的话一目了然,写得不好,有注释也是白搭。
彪悍的代码不需要注释。
33 楼 lxiaodao 2009-08-21  
我觉得这个现象背后有更深层的东西值得我们学习,而不是代码要写注释。
我们已经习惯了拿来"轮子"用了,现在发现有的轮子不是100%好用,或者有点暇疵,那么怎么办呢?有能力我们就自己改轮子呗,有能力我们就自己造轮子呗。
Ruby的制造者有必要把注释写得让"我们都能容易读懂"的程度么?没有。
32 楼 gigix 2009-08-14  
vdgame 写道
我一直反对“良好的代码本身就是注释”这句话。什么叫良好的代码?每个程序员都可以说自己的代码是良好的。
一段代码除非够简单,否则加上注释是有必要的,起码要告诉别人:是做啥的?设计思路是啥?

第一句话就是废话
同样每个程序员都可以说自己的注释是良好的,那写了注释还是看不懂又怎么搞?
代码至少还可以编译可以测试可以运行,你拿什么来证明注释是最起码正确的──更不要说什么“良好”了

> 一段代码除非够简单
出于什么原因你不能把它写得足够简单?

> 起码要告诉别人:是做啥的?设计思路是啥?
出于什么原因你的代码不能说出这些?

而且,如果你的代码做不到,出于什么原因你相信注释就能做到?
31 楼 vdgame 2009-08-14  
xifo 写道
vdgame 写道
我最讨厌代码没注释了,简直就是在浪费看代码人的时间。


良好的代码本身就是注释,不适当的注释反而会影响阅读。

API注释文档是另外一回事,这相当于产品说明书,很多客户程序员并不是通过阅读源代码,而是通过这个说明书来了解API使用方法的。

我一直反对“良好的代码本身就是注释”这句话。什么叫良好的代码?每个程序员都可以说自己的代码是良好的。
一段代码除非够简单,否则加上注释是有必要的,起码要告诉别人:是做啥的?设计思路是啥?

这个主题讨论是源代码的阅读,把API注释文档拉进来就不必了。除非API注释文档有源代码的解释,但是这样的话,放到源代码里不是更好吗?
30 楼 Hooopo 2009-08-13  
Magicloud 写道
下一站,火星 写道
towjzhou 写道
从python的语法上看就知道python是完美主义设计的,源码当然也很完美了。


你给解释解释函数也是对象这个是什么意思呗

个人认为,就完美性而言,如果说ruby能甩开python一条街的距离,那么as要甩开python好几条街的距离,所以完美性不足以作为python的卖点,倒是稳定性、可用的库比较强大

python算是数学家设计的,很多地方还是体现了数学美
当然,我对for in这种结构天生反感。

愿闻其详。。
29 楼 Magicloud 2009-08-13  
下一站,火星 写道
towjzhou 写道
从python的语法上看就知道python是完美主义设计的,源码当然也很完美了。


你给解释解释函数也是对象这个是什么意思呗

个人认为,就完美性而言,如果说ruby能甩开python一条街的距离,那么as要甩开python好几条街的距离,所以完美性不足以作为python的卖点,倒是稳定性、可用的库比较强大

python算是数学家设计的,很多地方还是体现了数学美。
当然,我对for in这种结构天生反感。
28 楼 xifo 2009-08-12  
vdgame 写道
我最讨厌代码没注释了,简直就是在浪费看代码人的时间。


良好的代码本身就是注释,不适当的注释反而会影响阅读。

API注释文档是另外一回事,这相当于产品说明书,很多客户程序员并不是通过阅读源代码,而是通过这个说明书来了解API使用方法的。
27 楼 fyting 2009-08-06  
dogstar 写道
chandler 写道
potian 写道
我不觉得,整个宏、数据结构、函数、变量的命名还是一致可读的

代码注释本来就是没有必要的

相反,对于CAPI部分,文档说明非常完整


  学生?
如果是学生,应该成绩不怎么样吧?


无知者无畏呀.

呵呵 
26 楼 dogstar 2009-08-05  
chandler 写道
potian 写道
我不觉得,整个宏、数据结构、函数、变量的命名还是一致可读的

代码注释本来就是没有必要的

相反,对于CAPI部分,文档说明非常完整


  学生?
如果是学生,应该成绩不怎么样吧?


无知者无畏呀.
25 楼 swordz 2009-08-04  
我研究排序算法,看了一下 RUBY1.9 的数组排序CODE,发现好老,里面还用堆栈,一堆GOTO.
我把代码单独移植到C++里,比较了一下,发现效率也不咋样。比C LIB的SORT快,但比STL 的QSORT要慢。
为什么不采用STL里的比较标准的 INTROSORT 代码呢?
24 楼 chandler 2009-07-26  
potian 写道
我不觉得,整个宏、数据结构、函数、变量的命名还是一致可读的

代码注释本来就是没有必要的

相反,对于CAPI部分,文档说明非常完整


  学生?
如果是学生,应该成绩不怎么样吧?
23 楼 vdgame 2009-07-25  
下一站,火星 写道
towjzhou 写道
从python的语法上看就知道python是完美主义设计的,源码当然也很完美了。


你给解释解释函数也是对象这个是什么意思呗

个人认为,就完美性而言,如果说ruby能甩开python一条街的距离,那么as要甩开python好几条街的距离,所以完美性不足以作为python的卖点,倒是稳定性、可用的库比较强大

as 是啥?actionscript?
22 楼 vdgame 2009-07-25  
liusu 写道
我倒觉得蛮好读得。。 因为我不怎么用c写程序,所以不知道有没有特别好的工具可以方便阅读C代码,需要有方法跳转,声明跳转之类的。

试试看source insight
21 楼 night_stalker 2009-07-24  
小内存分配叫 slot 的做法不是 matz 独创的,哪个更贴切就见仁见智了。
20 楼 liusu 2009-07-24  
我倒觉得蛮好读得。。 因为我不怎么用c写程序,所以不知道有没有特别好的工具可以方便阅读C代码,需要有方法跳转,声明跳转之类的。

相关推荐

    Ruby元编程 源代码 Metaprogramming Ruby source code

    Ruby元编程是编程领域中的一个高级技术,它允许程序员在运行时操纵语言的结构和行为。这本《Metaprogramming Ruby》书籍深入探讨了如何利用Ruby的特性进行元编程,帮助开发者提升代码的灵活性、可扩展性和复用性。源...

    ruby 1.9.3 source code

    ruby 1.9.3 source code

    Ruby Source Code

    本资源“Ruby Source Code”提供了一系列的Ruby源代码示例,旨在帮助学习者深入理解Ruby编程语言的核心概念和实践技巧。 1. **面向对象编程**:Ruby是完全的面向对象语言,所有数据都是对象,包括基本类型。了解...

    Programming Ruby (English Version) and Source Code

    《Programming Ruby》是著名的Ruby语言教程,英文版的书籍旨在为全球开发者提供深入理解Ruby编程语言的途径。这本书详尽地介绍了Ruby的语法、特性、类库以及编程实践,是学习和进阶Ruby编程的宝贵资源。源代码的提供...

    source code

    源代码(Source Code)是计算机程序设计中的一个重要概念,它是指程序员用高级编程语言书写的、人类可读的文本形式的指令集合。这些指令描述了软件如何运行,以及如何处理各种输入、输出和数据交互。在计算机系统中...

    ruby part code of proj

    this is a ruby project code

    ruby part code of 2

    ruby part code of proj this is a sample of survey

    ruby part code of proj3

    ruby part code of proj this is a sample of survey

    ruby part code of proj 6

    ruby part code of proj this is a sample of survey

    ruby part code of proj5

    ruby part code of proj this is a sample of survey

    ruby part code of proj2

    ruby part code of proj this is a sample of survey

    ruby part code of proj4

    ruby part code of proj this is a sample of survey

    ruby part code of proj7

    ruby part code of proj this is a sample of survey

    sourcecode:Scala库为您的程序提供“源”元数据,类似于Python的__name __,C ++的__LINE__或Ruby的__FILE__-python source file

    sourcecode是一个小的Scala库,用于在运行时为您的程序提供通用的“源代码”上下文,类似于Python的__name__ ,C ++的__LINE__或Ruby的__FILE__ 。 例如,您可以通过()语法或通过隐式查询当前文件的文件名和行号: ...

    Ruby 教程 The Book of Ruby

    ### Ruby 教程《The Book of Ruby》知识点总结 #### 一、书籍基本信息 - **书名**:《The Book of Ruby》 - **作者**:Huw Collingbourne - **出版年份**:2011年 - **出版社**:No Starch Press - **ISBN-10**:1-...

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    ruby1.8.6stdlib.rar完整版

    stdlib-doc is a RubyForge project that converts Ruby source code into this documentation you are looking at. It also tracks the status of the documentation effort; you can see some of that effort in ...

    RubyDoc Source Code Documenter-开源

    RubyDoc 是一个开源的源代码文档生成工具,它主要用于解析 Ruby 语言的代码,并自动生成易于阅读和理解的文档。这个项目虽然已经终止,但它的影响力依然存在,尤其是在早期的 Ruby 社区中,RubyDoc 曾是重要的文档...

Global site tag (gtag.js) - Google Analytics