什么是Ruby-程序员宅基地

技术标签: 语言  python  perl  emacs  smalltalk  ruby  

什么是Ruby
By  凌云志 发表于 2006-4-13 22:49:00 

我在Javaeye里看到很多人称赞这个语言,我略微goolge了一下,了解了一下,得如下文章:

Ruby是一种解释型的方便快捷的面向对象脚本语言,它是日本的Yukihiro Matsumoto(人们都叫他Matz.)于1993年2月24日首次发布的。它从Perl, Eiffel那里吸收了很多特性, 使之很适合用来文本文件处理和进行系统管理任务,并且完全面向对象。它的语法简单明快,可扩展并且可以跨平台。Ruby是完全自由开放的,意思是我们不仅 可以免费得到,而且可以自由地使用、复制、修改和分发它。以下是Ruby之父Matz.给出的Ruby特性:

Ruby的语法简单,部分语法是从Eiffel和Ada那里得到灵感的。

Ruby拥有异常处理机制,就像Java或Python一样,使之处理异常和错误更简单。

Ruby的操作符其实是方法,你可以很容易地重新定义它们。

Ruby是一种完整的纯面向对象语言(OOL)。这就是说所有的数据在Ruby里面都是对象,不是像Python或Perl那样,而是像Smalltalk那样的纯面向对象(没有什么例外)。比如:在Ruby里面,数字1是类Fixnum的一个实例。

Ruby精心地设计了它的面向对象特性,使之完整并且开放允许改进。比如:Ruby有在运行时可以向类里,甚至能够向实例里添加方法的能力。所以,如果有需要,某个类的一个实例可以表现得和同一个类的其他实例不一样。

Ruby“故意地”使用单继承机制,但是它有模块(Modules)的概念(在Object-C里面叫Categories)。模块是方法的集合, 它是一个比多重继承更清晰的解决方案。多重继承很复杂,比起单继承来它用得不是很经常。(不要在这里提起C++,C++因为强类型机制使得它没有其他选 择。)

Ruby有真正的闭包机制,不仅仅是匿名函数,而且还实现了变量绑定。

Ruby在它的特性中加入了程序块(blocks)的概念(包含在"{......}"或者"do.....end"之间的代码),这些程序块可以传递给方法,或者转换成闭包。

Ruby拥有一个真正的“标记-清除”(mark and sweep)式的垃圾收集器,它对所
有Ruby对象起作用。你不需要为维护扩展库中的引用记数担心舛阅愕慕】蹈?
有好处。:-)

在Ruby中写C语言扩展比Perl或者Python中更容易,这部分是因为垃圾收集器的原因,部分是因为它好用的扩展API接口。Ruby中也有SWIG接口。

我们使用Ruby中的整数时可以不用考虑它的内部实现,Ruby中有小整数(Fixnum类的实例)和大整数(Bignum),但是我们不用担心现在正在使用的是那一个。如果一个数字足够小,它就是Fixnum,否则它就是Bignum了。这个转化是自动完成的。

Ruby不需要变量声明。它用一个简单的命名规则来表示各个变量的作用范围。例子:简单的 'var' = 局部变量,'@var' = 实例变量,'$var' = 全局变量。所有我们也没有必要用一个'self.'来表示实例成员了。

如果操作系统允许,Ruby可以动态的加载扩展库。

Ruby拥有独立于操作系统的线程机制。所以,在任何能运行Ruby的平台上你都可以拥有多线程,不管那个平台是否支持多线程,甚至在MS-DOS上面也行:-)

Ruby是高度可移植的,它大部分是在Linux上开发的,但是可以在很多类型的Unix, Dos, Windows95/98/Me/NT/2000/XP, MacOS, BeOS, OS/2等系统上运行。  

Ruby的创始人

Matz是一个专业的软件工程师,在日本有名的open source公司netlab.JP工作,而且他在日本也是一个高姿态的open source 布道者。他参与了几个开源软件项目,包括cmail,这是一个基于emacs的邮件用户代理,完全用emacs lisp 编写。Ruby也是他的第一个在日本以外的国家如此出名的作品。他的邮箱是:[email protected]

 

Ruby语言是一种动态语言,它与Python、Smalltalk和Perl这3种编程语言有些类似。Ruby语言起源于日本,它的研发者是日本 人松本行弘(Matsumoto Yukihiro)。松本行弘在1993年开始着手Ruby语言的研发工作,他开发Ruby语言的初衷是为了提高编程的效率。1995年12月Matz推 出了Ruby的第一个版本Ruby 0.95。

Ruby语言的主要特点如下。

1.纯的面向对象语言

在Ruby中,一切皆是对象。下面举一个例子来更直观地说明Ruby语言的这一特点。

在Java中,求一个数的绝对值的代码如下。

int c = Math.abs(-20);

而在Ruby语言中,一切皆是对象,也就是说“-20”这个数也是一个对象,因此,求一个数绝对值的Ruby代码形式如下。

c = -20.abs

这样的代码编写方式是不是更形象一些呢?

2.解释型脚本语言

Ruby 语言是解释型脚本语言,它既有脚本语言强大的字符串处理能力和正则表达式,又不失解释型语言的动态性。一方面,在最初设计Ruby语言时,Ruby的研发 者松本行弘考虑到文字处理方面的需要,他借鉴了Perl语言在文字处理方面的成功经验。另一方面,松本行弘将Ruby语言设定为一种解释型语言,Ruby 的动态性使得由Ruby语言编写的程序不需要事先编译即可直接运行,这为程序的调试带来了方便。同时,这一特点可以实现开发过程中的快速反馈。

3.其他特点

(1)动态载入。可以在运行时候重定义自己,类也可以在运行时继承或取消继承。

(2)自动内存管理机制。

(3)多精度整数。

(4)迭代器和闭包。

(5)开源项目。有大量活跃的社区支持Ruby语言

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ice_fire2008/article/details/2432370

智能推荐

前端开发之vue-grid-layout的使用和实例-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏34次。vue-grid-layout的使用、实例、遇到的问题和解决方案_vue-grid-layout

Power Apps-上传附件控件_powerapps点击按钮上传附件-程序员宅基地

文章浏览阅读218次。然后连接一个数据源,就会在下面自动产生一个添加附件的组件。把这个控件复制粘贴到页面里,就可以单独使用来上传了。插入一个“编辑”窗体。_powerapps点击按钮上传附件

C++ 面向对象(Object-Oriented)的特征 & 构造函数& 析构函数_"object(cnofd[\"ofdrender\"])十条"-程序员宅基地

文章浏览阅读264次。(1) Abstraction (抽象)(2) Polymorphism (多态)(3) Inheritance (继承)(4) Encapsulation (封装)_"object(cnofd[\"ofdrender\"])十条"

修改node_modules源码,并保存,使用patch-package打补丁,git提交代码后,所有人可以用到修改后的_修改 node_modules-程序员宅基地

文章浏览阅读133次。删除node_modules,重新npm install看是否成功。在 package.json 文件中的 scripts 中加入。修改你的第三方库的bug等。然后目录会多出一个目录文件。_修改 node_modules

【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure-程序员宅基地

文章浏览阅读883次。【代码】【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure

整理5个优秀的微信小程序开源项目_微信小程序开源模板-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏97次。整理5个优秀的微信小程序开源项目。收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。_微信小程序开源模板

随便推点

Centos7最简搭建NFS服务器_centos7 搭建nfs server-程序员宅基地

文章浏览阅读128次。Centos7最简搭建NFS服务器_centos7 搭建nfs server

Springboot整合Mybatis-Plus使用总结(mybatis 坑补充)_mybaitis-plus ruledataobjectattributemapper' and '-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。前言mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。..._mybaitis-plus ruledataobjectattributemapper' and 'com.picc.rule.management.d

EECE 1080C / Programming for ECESummer 2022 Laboratory 4: Global Functions Practice_eece1080c-程序员宅基地

文章浏览阅读325次。EECE 1080C / Programming for ECESummer 2022Laboratory 4: Global Functions PracticePlagiarism will not be tolerated:Topics covered:function creation and call statements (emphasis on global functions)Objective:To practice program development b_eece1080c

洛谷p4777 【模板】扩展中国剩余定理-程序员宅基地

文章浏览阅读53次。被同机房早就1年前就学过的东西我现在才学,wtcl。设要求的数为\(x\)。设当前处理到第\(k\)个同余式,设\(M = LCM ^ {k - 1} _ {i - 1}\) ,前\(k - 1\)个的通解就是\(x + i * M\)。那么其实第\(k\)个来说,其实就是求一个\(y\)使得\(x + y * M ≡ a_k(mod b_k)\)转化一下就是\(y * M ...

android 退出应用没有走ondestory方法,[Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?...-程序员宅基地

文章浏览阅读1.3k次。首先,问题是如何出现的?晚上复查代码,发现一个activity没有调用自己的ondestroy方法我表示非常的费解,于是我检查了下代码。发现再finish代码之后接了如下代码finish();System.exit(0);//这就是罪魁祸首为什么这样写会出现问题System.exit(0);////看一下函数的原型public static void exit (int code)//Added ..._android 手动杀死app,activity不执行ondestroy

SylixOS快问快答_select函数 导致堆栈溢出 sylixos-程序员宅基地

文章浏览阅读894次。Q: SylixOS 版权是什么形式, 是否分为<开发版税>和<运行时版税>.A: SylixOS 是开源并免费的操作系统, 支持 BSD/GPL 协议(GPL 版本暂未确定). 没有任何的运行时版税. 您可以用她来做任何 您喜欢做的项目. 也可以修改 SylixOS 的源代码, 不需要支付任何费用. 当然笔者希望您可以将使用 SylixOS 开发的项目 (不需要开源)或对 SylixOS 源码的修改及时告知笔者.需要指出: SylixOS 本身仅是笔者用来提升自己水平而开发的_select函数 导致堆栈溢出 sylixos

推荐文章

热门文章

相关标签