level 6
mew~mew~
楼主
这里我就不累述 Ruby 语言的历史了。如果您还不了解 Ruby,官方网站 www.ruby-lang.org 是最好的去处。而对于已经了解 Ruby 的各位,我在此给出我爱上这门(相对比较)新的语言的理由。
Ruby 是面向对象语言。这意味着什么呢?的确,关于“什么是 OOP”,每十位程序员当中恐怕就有十二种看法。这个问题我留待您自己判断。而就特征而言,Ruby提供了机制,将数据和方法封装到对象里,实现了一个类到另一个类的继承机制,还提供对象多态机制。与某些语言(C++、Perl 5等等)不同的是,Ruby 从一开始的时候就是以面向对象为目标来设计的。
Ruby 是“纯正”的 OOP 语言。 我说重复了么?我可不这么认为。说“纯正”,这就意味着,所有的一切——包括字符串或整型之类的基本数据类型——都是以对象的形态来表达的。在 Ruby 中用不着 Java 里面提供的那种wrapper class(包裹类)(译注:wrapper class用来将基本类型包装成对象类型)。而且,甚至连常量都被当作对象来对待,因此方法可以由——比如数字常量——来唤起。
Ruby 是动态语言。 对于只熟悉诸如 C++、Java 等静态语言的人而言,这就是个新概念。所谓动态意味着,可以在运行期动态地追加或者重新定义方法和变量。这种动态机制免除了对 C 语言中条件编译(#ifdef)这类功能的需要,并且使构建复杂的 reflection(内省机制)API 成为可能。复杂的 reflection机制又进而使得程序可以变得更为“自知(self-aware)”——从而为如下诸多功能开启了方便之门:运行期类型信息、丢失方法的侦测、能够侦测新追加的方法的钩子技术,等等。从这个方面来看,Ruby 与 Lisp 和 Smalltalk 有些许亲缘关系。
Ruby 是解释型语言。 这是个复杂问题,值得多说几句。有人可以争论说,从性能方面来考量,语言采用解释型机制弊大于利。对于这种想法,我用下面的斟酌予以回应:1.首先最为显著的是,快速开发周期(rapid development cycle)颇有效益可得,Ruby 的解释型语言本质助长这种效益。2.太慢到底是多慢呢?说慢之前请先做一些性能测试。3. 尽管会有人因此而批评我,但我还是要这么说:处理器每年都在持续提速。4.如果您着实需要速度,您可以用 C 语言撰写需要速度的那部分代码。5.最后,从某种意义上说,有一种值得商榷的观点:鉴于没有哪种语言是从骨子里就被解释,因此并不能说不可能撰写出 Ruby 编译器。
Ruby 能够处理正则表达式。 多年以来,正则表达式一直被认为是属于 UNIX 领域的雕虫小技,涉及诸如 grep 和 sed 之类的阳春工具,或是在 vi 里面做一些讨巧的“查找-替换”操作。Perl 语言帮助人们改变了这种看法,而现在 Ruby 也对此有所帮助。越来越多的人认识到这种超高级的字符串和文本操纵技巧中所蕴含的无比威力。对此持怀疑态度者,应该去读一读 Jeffrey Friedl 的书 Mastering Regular Expressions 。非怀疑论者也应该读。
Ruby 是支持多种平台的语言。 Ruby 可以运行在 Linux 及其他 UNIX 变体、各种版本 Windows 平台、BeOS,甚至 MS-DOS 上。如果我没记错的话,还有 Amiga 版本的。
Ruby 借鉴了前辈语言。 这是好事儿吗?在文学领域之外,是的,这是好事儿。牛顿说,“若我看得比别人远,乃是因为我站在了巨人的肩上”。Ruby 确实是站在了巨人的肩上。Ruby 引借了来自Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell,以及其他语言的特性。我看到其中的原则是:1.不要重新发明轮子;2. 不要修补没有问题的部分;3. 特别重要的是,充分利用人们现有的知识。您掌握 UNIX里面的文件和管道(pipes)吗?没问题,您可以在 Ruby 中运用到那些知识。您花了两年时间研习 printf 的各种格式符号?别担心,您在 Ruby 里面还可以使用 printf。您了解 Perl 的 regex handling 技术?好的,那么您几乎也就立刻学会了 Ruby 的 regex handling 技术。
2010年01月04日 11点01分
1
Ruby 是面向对象语言。这意味着什么呢?的确,关于“什么是 OOP”,每十位程序员当中恐怕就有十二种看法。这个问题我留待您自己判断。而就特征而言,Ruby提供了机制,将数据和方法封装到对象里,实现了一个类到另一个类的继承机制,还提供对象多态机制。与某些语言(C++、Perl 5等等)不同的是,Ruby 从一开始的时候就是以面向对象为目标来设计的。
Ruby 是“纯正”的 OOP 语言。 我说重复了么?我可不这么认为。说“纯正”,这就意味着,所有的一切——包括字符串或整型之类的基本数据类型——都是以对象的形态来表达的。在 Ruby 中用不着 Java 里面提供的那种wrapper class(包裹类)(译注:wrapper class用来将基本类型包装成对象类型)。而且,甚至连常量都被当作对象来对待,因此方法可以由——比如数字常量——来唤起。
Ruby 是动态语言。 对于只熟悉诸如 C++、Java 等静态语言的人而言,这就是个新概念。所谓动态意味着,可以在运行期动态地追加或者重新定义方法和变量。这种动态机制免除了对 C 语言中条件编译(#ifdef)这类功能的需要,并且使构建复杂的 reflection(内省机制)API 成为可能。复杂的 reflection机制又进而使得程序可以变得更为“自知(self-aware)”——从而为如下诸多功能开启了方便之门:运行期类型信息、丢失方法的侦测、能够侦测新追加的方法的钩子技术,等等。从这个方面来看,Ruby 与 Lisp 和 Smalltalk 有些许亲缘关系。
Ruby 是解释型语言。 这是个复杂问题,值得多说几句。有人可以争论说,从性能方面来考量,语言采用解释型机制弊大于利。对于这种想法,我用下面的斟酌予以回应:1.首先最为显著的是,快速开发周期(rapid development cycle)颇有效益可得,Ruby 的解释型语言本质助长这种效益。2.太慢到底是多慢呢?说慢之前请先做一些性能测试。3. 尽管会有人因此而批评我,但我还是要这么说:处理器每年都在持续提速。4.如果您着实需要速度,您可以用 C 语言撰写需要速度的那部分代码。5.最后,从某种意义上说,有一种值得商榷的观点:鉴于没有哪种语言是从骨子里就被解释,因此并不能说不可能撰写出 Ruby 编译器。
Ruby 能够处理正则表达式。 多年以来,正则表达式一直被认为是属于 UNIX 领域的雕虫小技,涉及诸如 grep 和 sed 之类的阳春工具,或是在 vi 里面做一些讨巧的“查找-替换”操作。Perl 语言帮助人们改变了这种看法,而现在 Ruby 也对此有所帮助。越来越多的人认识到这种超高级的字符串和文本操纵技巧中所蕴含的无比威力。对此持怀疑态度者,应该去读一读 Jeffrey Friedl 的书 Mastering Regular Expressions 。非怀疑论者也应该读。
Ruby 是支持多种平台的语言。 Ruby 可以运行在 Linux 及其他 UNIX 变体、各种版本 Windows 平台、BeOS,甚至 MS-DOS 上。如果我没记错的话,还有 Amiga 版本的。
Ruby 借鉴了前辈语言。 这是好事儿吗?在文学领域之外,是的,这是好事儿。牛顿说,“若我看得比别人远,乃是因为我站在了巨人的肩上”。Ruby 确实是站在了巨人的肩上。Ruby 引借了来自Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell,以及其他语言的特性。我看到其中的原则是:1.不要重新发明轮子;2. 不要修补没有问题的部分;3. 特别重要的是,充分利用人们现有的知识。您掌握 UNIX里面的文件和管道(pipes)吗?没问题,您可以在 Ruby 中运用到那些知识。您花了两年时间研习 printf 的各种格式符号?别担心,您在 Ruby 里面还可以使用 printf。您了解 Perl 的 regex handling 技术?好的,那么您几乎也就立刻学会了 Ruby 的 regex handling 技术。