`
zxggmail
  • 浏览: 29268 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

从 C/C++ 到 Ruby

阅读更多

由于 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中你不需要使用->,永远只需要.
  • publicprivate,与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 之外的东西都视为真(包含 00.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只有两种容器类别:ArrayHash
  • 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-/

分享到:
评论

相关推荐

    SWIG 公开 C/C++ 代码,包括 Ruby、Perl、Tcl、C# 和 Python

    C 和 C++ 被公认为...SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python。本文使用 Ruby 作为公开 C/C++ 功能的首选脚本接口。要理解本文,您必须具备 C/C++ 与 Ruby 方面的相应知识。

    swig工具,C/C++到python, tcl 的接口

    SWIG工具,C/C++到python、tcl的接口 SWIG(Simplified Wrapper and Interface Generator)是一种开源的接口生成工具,可以将C/C++语言与各种脚本语言集成,包括Python、Tcl、Perl、 Ruby等。SWIG的主要功能是生成...

    PDFLib 7 中文参考手册 for C/C++/Java/Perl/PHP/Ruby

    PDFLib 7 是一款强大的库,专为编程语言如 C/C++、Java、Perl、PHP、Ruby 提供了创建和处理 PDF(Portable Document Format)文档的功能。这个中文参考手册是开发者的重要资源,它包含了详尽的文档和示例,帮助...

    基于gcov工具的C/C++代码覆盖率分析与设计源码

    涵盖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...

    C/C++扩展包编译工具DevKit

    DevKit 是windows平台下编译和使用本地C/C++扩展包的工具。它就是用来模拟Linux平台下的make, gcc, sh来进行编译。注:这个方法目前仅支持通过RubyInstaller安装的Ruby,如果不是建议你重新安装。安装方法:双击下载...

    如何在Linux使用Eclipse + CDT开发C C++程序

    C/C++ 程序,除此之外,目前的主流程序语言,如 C/C++、C#、Java、PHP、Perl、Python、Ruby、Rebol、JavaScript、SQL、XML、UML 等,皆可在 Eclipse 上撰写,所以只要熟析 Eclipse 的 IDE 环境,将来若开发其它语言...

    SWIG 2.0.11 C/C++接入各种不同语言的接口程序

    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是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本...

    Ruby中使用SWIG编写ruby扩展模块实例

    在使用ruby/rails的过程中,确实发现有时性能不尽人意,如生成一个拥有600项的item的3层树形结构目录要花去20ms,为提高性能在学习用c/c++写ruby模块的过程中,认识了swig,rubyInline等一系列帮助编写c/c++来提升...

    Linux使用Eclipse开发C.pdf

    根据提供的文件内容,可以看出该文档是关于如何在Linux环境下使用Eclipse开发C/C++程序的指南。在Linux下进行C/C++开发时,Eclipse是一个流行的集成开发环境(IDE),它支持多语言开发,包括C/C++。Eclipse通过一个...

    ctags-5.8.tar.zip_C/C++__C/C++_

    3. **支持的语言:** 虽然这里特别提到了C和C++,但ctags实际上也支持许多其他编程语言,包括Java、Python、Ruby、PHP等。 4. **使用场景:** 当你需要在一个大型代码库中查找特定功能的实现,或者在阅读开源项目时...

    SWIG Specification

    开发者只需要提供C/C++的头文件和SWIG所需的接口描述文件,SWIG就可以完成从C/C++到其他语言的接口映射。 2. 多语言支持:SWIG支持多种编程语言作为目标语言,包括但不限于Perl、Python、Tcl、Ruby、Guile和Java。...

    iodine-具有Pub / Sub支持的Ruby的HTTP / WebSockets服务器-C/C++开发

    iodine-快速HTTP / Websocket Server,对新Web具有本...Iodine是许多facil.io C框架的Ruby包装器,利用C的速度来完成许多常见的Web应用程序任务。 此外,碘可以抽象出所有网络问题,因此您无需担心传输层,可以自由使用

    SWIG是一种软件开发工具,可将用C和C++编写的程序与各种高级编程语言连接起来_C++_下载.zip

    SWIG的主要目标是简化接口的创建,使得C和C++库可以被Python、Perl、Ruby、Java、Tcl、JavaScript等脚本语言调用,甚至包括MATLAB和Octave这样的科学计算环境。通过使用SWIG,开发者可以充分利用现有C/C++库的性能...

    Red Hat Enterprise Linux 环境passenger多ruby版本共存部署

    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 for win32

    Ruby DevKit包含了MinGW(Minimalist GNU for Windows)和MSYS(Minimal SYStem),这两个工具集提供了类似Unix的命令行环境,以及GCC编译器和其他必要的工具,如make等,这对于在Windows上编译C或C++的Ruby扩展至关...

    eclipse cdt 解析C++ AST

    其中包括C/C++、Java、Scala、PHP、Ruby、COBOL、XML、HTML等。Eclipse作为一个多平台的工具,可以在Windows、Unix、Mac等操作系统上运行。它开源、免费,被广泛地作为Java IDE使用。 Eclipse CDT项目为Eclipse提供...

    swig使用手册

    SWIG不仅支持C/C++的基本语法,还覆盖了包括结构体、枚举、指针等在内的复杂特性,使得C/C++代码的功能可以完整地移植到脚本语言中。同时,SWIG采用非侵入式设计,即原始的C/C++代码无需修改即可被封装,这保证了...

Global site tag (gtag.js) - Google Analytics