由于 Ruby 跟 C/C++ 的差异实在太大,很难将两者间的差异一项一项列出。其中的一个重要理由是:Ruby 和 C 语言的「不隐藏内部机制(No hidden mechanism)」原则完全处在两个极端上。Ruby 选择让人们的工作更轻松,但让执行期环境(runtime)负担加重。除非你要开始对你的 Ruby 程序代码做最佳化,你不需要关心编译器的脸色如何。
也就是说,你可以预期 Ruby 程序将会比等价的 C/C++ 程序慢的多。然而,你也会惊讶于只需要写这么少的程序代码,就可以迅速地完成你的 Ruby 程序。Ruby 能完全满足你的需求,又比C++简单的多。
Ruby 是动态型别(Dynamically typed),而不是静态型别(Statically typed)的程序语言。Ruby的执行期环境(runtime)会尽可能的处理所有工作。举例来说,你不需要事先知道你的 Ruby 程序将会被连结(link)到哪一个模块,或是哪一个方法(method)将会被呼叫。
幸运的是,Ruby 与 C 有着良好的共生关系。Ruby 支持所谓的「扩充模块」。这些由 C 语言写成的模块能够在 Ruby 程序中使用(而且看起来与一般 Ruby 模块无异)。因此,你可以将你的 Ruby 程序中影响效能最大的部份划分出去,用纯粹的 C 语言来完成这些部分。
最后,Ruby 本身理所当然的是用 C 语言写成。
与C语言的相似之处
与C语言相同,在Ruby中...
-
你可以用程序式的方式写程序(但是底层依然是对象导向的环境。)
-
大多数的运算子都是相同的。(包含复合运算子跟位运算子。)然而Ruby并没有++或是--运算符。
-
你可以使用__FILE__ 与 __LINE__。
-
你可以定义常数。虽然并没有特殊的 const 关键词,Ruby利用命名的惯例来强迫变数为常数:第一个字母为大写的变量便为常数。
-
字符串由双引号包住。
-
字符串是可变的。
-
就像man page一样,你可以利用ri指令在终端机窗口中阅读大多数的文件。
-
你也有一样的命令行调试器可以使用。
与C++的相同之处
与C++相同,在Ruby中...
-
大多数的运算符都是一样的(包含::),<<常常用来将元素串接在list之后。要注意的是:Ruby中你不需要使用->,永远只需要.。
-
public,private,与protected的功能在两者是类似的。
-
对象的继承一样只需要一个字符,只是从 : 变成 <。
-
可以将你的程序代码放进模块(module)之中,类似 C++ 中的 namespace 的作法。
-
例外(Exceptions)的运作方式类似。虽然为了保护无辜的人们,我们把关键词改了。
与C语言的不同之处
与C语言不同的是,在Ruby中...
-
物件是强类型。(变量名称则没有任何的类型定义。)
-
没有宏(macro)或是预处理器(preprocessor)、没有typedef、没有sizeof,也没有enum。
-
没有头文件(.h)、没有typedef、没有sizeof、也没有enum。
-
没有#define。用常数来代替他们便可。
-
在Ruby 1.8中,程序代码在执行期才被解译,而不是被编译成任何一种机械语言或是byte-code。
-
所有的变量都存放在堆栈(heap)中。因此,你不需要自行释放他们,垃圾回收机制(Garbage collector)会处理他们。
-
方法的参数是传引用,而非传值。
-
用 require 'foo' 而不是 #include <foo> 或是 #include "foo"。
-
你不能在程序代码中插入汇编语言。
-
每行的结尾不需要分号(例外:如果要在同一行内写多个语句,那就需要分号把它们分隔开)。
-
在 if 和 while 这类条件表达式中,你可以省略括号。
-
调用方法时,括号通常是选择性的。
-
你不会常常使用大括号。一般只需要使用 end 关键词来结束一个多行的区块(像是 while 循环。)
-
do关键词被称作「block」,Ruby中没有C语言的「do statement。」
-
「block」这个词在 Ruby 中有着不同的意义。它是指一段可以结合到一个方法调用的程序代码,使得该方法体在执行时可以呼叫这段程序代码。
-
你不需要事先声明变量,当你需要一个变量时直接使用一个新名字就可以了。
-
当测试真值的时候,除了 false 与 nil 之外的东西都视为真(包含 0,0.0,以及"0"。)
-
Ruby没有字符(char)型别,只有长度为一的字符串。
-
字符串并不需要一个空字节作为结束。
-
数组声明使用中括号而非大括号。
-
当你加入更多元素到数组中时,数组会自动变大。
-
如果你将两个数组相加,你会得到一个更大的新的数组,而不是指针运算的结果。
-
大多数的情况下,一切都是一个表达式。(也就是说,while之类的东西实际上会被当做一个右值。)
与C++的不同
与C++不同的是,在Ruby中...
-
你不能明确的定义引用(reference),Ruby中每个变量都会被自动解参照回原本的对象。
-
对象型别是强型别也是动态型别。Ruby执行期环境将会在执行期的方法呼叫成功时,自行辨识型别。
-
对象的建构子用 initialize 命名,而不是类别名称。
-
所有的方法都是虚拟(virtual)的。
-
类别变量(静态变量)的变量名称永远用 @@开头。
-
你不能直接存取成员变量――所有公开的成员变量(在Ruby中称作属性, attribute)都得通过方法访问。
-
用self取代this。
-
有些方法会以 ’?’ 或是 ’!’结尾,这些符号都真的存在于方法名称中。
-
本质上,Ruby没有多重继承。然而,Ruby可以使用”mixin”。(也就是说,你可以「继承」某个模块的所有方法)
-
呼叫方法时的括号通常都可以省略。
-
你可以在任何时候重新打开一个类别以加入新的方法。
-
你不需要 C++ 的 template 机制。(因为你可以将某个变量设值为任何一种对象,型别将在执行期自动辨识。)你也不需要转型。
-
迭代(Iteration)的运作方式有些许不同,Ruby中你会让你的对象mixinEnumerator模块并且直接呼叫 my_obj.each 方法,而不是使用一个独立的迭代器(Iterator)。
-
Ruby只有两种容器类别:Array跟Hash。
-
Ruby没有类型转换,你也会发现在Ruby中你不需要它们。
-
Ruby内建了多线程机制。但是在Ruby 1.8之中只有”green threads”(只在解释器中有效的线程),而不是原生的线程。
-
Ruby的标准函式库中就包含了单元测试(Unit test)函式库。
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-c-and-c-/
http://www.ruby-lang.org/zh_TW/documentation/ruby-from-other-languages/to-ruby-from-c-and-c-/
分享到:
相关推荐
C 和 C++ 被公认为...SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python。本文使用 Ruby 作为公开 C/C++ 功能的首选脚本接口。要理解本文,您必须具备 C/C++ 与 Ruby 方面的相应知识。
SWIG工具,C/C++到python、tcl的接口 SWIG(Simplified Wrapper and Interface Generator)是一种开源的接口生成工具,可以将C/C++语言与各种脚本语言集成,包括Python、Tcl、Perl、 Ruby等。SWIG的主要功能是生成...
PDFLib 7 是一款强大的库,专为编程语言如 C/C++、Java、Perl、PHP、Ruby 提供了创建和处理 PDF(Portable Document Format)文档的功能。这个中文参考手册是开发者的重要资源,它包含了详尽的文档和示例,帮助...
涵盖1062个头文件(h)、970个C源文件(c)、244个HTML文件(html)、142个源代码文件(S)、44个PNG图像文件(png)、36个文本文件(txt)、31个Python脚本(py)、19个Markdown文件(md)、8个Shell脚本(sh)、7...
DevKit 是windows平台下编译和使用本地C/C++扩展包的工具。它就是用来模拟Linux平台下的make, gcc, sh来进行编译。注:这个方法目前仅支持通过RubyInstaller安装的Ruby,如果不是建议你重新安装。安装方法:双击下载...
C/C++ 程序,除此之外,目前的主流程序语言,如 C/C++、C#、Java、PHP、Perl、Python、Ruby、Rebol、JavaScript、SQL、XML、UML 等,皆可在 Eclipse 上撰写,所以只要熟析 Eclipse 的 IDE 环境,将来若开发其它语言...
In a nutshell, SWIG is a compiler that takes C/C++ declarations and creates the wrappers needed to access those declarations from other languages including including Perl, Python, Tcl, Ruby, Guile, ...
SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本...
在使用ruby/rails的过程中,确实发现有时性能不尽人意,如生成一个拥有600项的item的3层树形结构目录要花去20ms,为提高性能在学习用c/c++写ruby模块的过程中,认识了swig,rubyInline等一系列帮助编写c/c++来提升...
根据提供的文件内容,可以看出该文档是关于如何在Linux环境下使用Eclipse开发C/C++程序的指南。在Linux下进行C/C++开发时,Eclipse是一个流行的集成开发环境(IDE),它支持多语言开发,包括C/C++。Eclipse通过一个...
3. **支持的语言:** 虽然这里特别提到了C和C++,但ctags实际上也支持许多其他编程语言,包括Java、Python、Ruby、PHP等。 4. **使用场景:** 当你需要在一个大型代码库中查找特定功能的实现,或者在阅读开源项目时...
开发者只需要提供C/C++的头文件和SWIG所需的接口描述文件,SWIG就可以完成从C/C++到其他语言的接口映射。 2. 多语言支持:SWIG支持多种编程语言作为目标语言,包括但不限于Perl、Python、Tcl、Ruby、Guile和Java。...
iodine-快速HTTP / Websocket Server,对新Web具有本...Iodine是许多facil.io C框架的Ruby包装器,利用C的速度来完成许多常见的Web应用程序任务。 此外,碘可以抽象出所有网络问题,因此您无需担心传输层,可以自由使用
SWIG的主要目标是简化接口的创建,使得C和C++库可以被Python、Perl、Ruby、Java、Tcl、JavaScript等脚本语言调用,甚至包括MATLAB和Octave这样的科学计算环境。通过使用SWIG,开发者可以充分利用现有C/C++库的性能...
LoadModule passenger_module /path/to/gem_home/lib/ruby/gems/2.x.y/gems/passenger-x.x.x/ext/apache2/mod_passenger.so PassengerRoot /path/to/gem_home/lib/ruby/gems/2.x.y/gems/passenger-x.x.x ...
Ruby DevKit包含了MinGW(Minimalist GNU for Windows)和MSYS(Minimal SYStem),这两个工具集提供了类似Unix的命令行环境,以及GCC编译器和其他必要的工具,如make等,这对于在Windows上编译C或C++的Ruby扩展至关...
其中包括C/C++、Java、Scala、PHP、Ruby、COBOL、XML、HTML等。Eclipse作为一个多平台的工具,可以在Windows、Unix、Mac等操作系统上运行。它开源、免费,被广泛地作为Java IDE使用。 Eclipse CDT项目为Eclipse提供...
SWIG不仅支持C/C++的基本语法,还覆盖了包括结构体、枚举、指针等在内的复杂特性,使得C/C++代码的功能可以完整地移植到脚本语言中。同时,SWIG采用非侵入式设计,即原始的C/C++代码无需修改即可被封装,这保证了...