好久不来,都荒的长草了。写点关于Ruby的话。
最近看到又有一个新的Script语言Falcon面世了。众多评论中,偶见一条,说“Ruby臻于完美,就是性能不佳”。
首先澄清立场,我是做Ruby处理机(interpreter, processor)开发的,但我本人不太会写Ruby script。
Ruby最大的问题是什么?很多人都会拿speed说事。但其实放在整个系统中,大多数情况下,Ruby并不会成为系统的性能瓶颈,因为有“数据库操作”这个最慢的家伙垫底。
我接触过一些用Ruby做产品的公司,最大的抱怨不是在速度,而是在规模(scalability)上。比如用Ruby写的library所能支持的最大并发连接数。
另外,C Ruby1.9做过一些optimization,但在力度上还差很多。换句好听的,就是潜力很大。但最大的问题是,没人去做。C Ruby的开发是完全依赖社区的,这点不像Python,JRuby,各类的javascript engine。它们虽然也是open source的,但是背后都是有公司支持的,也就是实际上是商业开发。只不过最终通过open source的形式公布出来。
C Ruby的另一个问题是,内部的实现设计不太好 -- C实现和Ruby实现是混在一起的。Ruby1.9虽然也有VM了,但是VM并没有把Ruby和C从实现层面很好的分离开。
这么做的理由有二:
1,用C实现可以获得暂时的性能优势。一个method直接用C实现,当然要比把它编译成bytecode,然后再去执行bytecode要快。
2,和C的mix是Ruby的一大特色。写过Ruby extension 的都知道,你可以从Ruby调用C写的function,也可以从C调用Ruby写的method。
但是,这么设计的代价就是optimization比较难。如果VM很好的把C和Ruby实现分离,虽然最初会比较慢,类似早期的Java,但是只要对VM实行optimization, 基于VM的部分自然就会获得性能的提升。比如JIT对Java性能的提升就很明显。最近Google 的V8,下一代的Firefox的JaegeMonkey都在考虑导入JIT技术。而JIT技术对现在的C Ruby1.9就作用不大。因为Ruby执行的过程,基本都是调用C程序的过程。已经是binary code了,能用JIT的部分很少。换句话说,如果换个C的编译器,倒是对Ruby处理机的性能影响很大。比如C Ruby1.9引入的Fiber,用GCC4.4编译的性能就比GCC4.3编译的好很多。(GCC4.4对Stack size做了优化)
总结一下,从语言处理机的实现角度来说,Ruby并不完美,而是很不美。问题很多,有技术方面的,也有开发管理方面的。老实说,个人对Ruby的未来很是担心。现在没有什么东西是A语言能做B语言做不了的,一门语言的优势很容易被后来的语言所复制。
Ruby是,路漫漫,其修远。
分享到:
相关推荐
Ruby Ruby Ruby Ruby Ruby Ruby
ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...
总的来说,`ruby-install`是Ruby开发者的一个得力助手,它使切换和管理多种Ruby环境变得简单高效。对于那些需要在不同Ruby实现间切换的开发者来说,这是一个不可或缺的工具。通过熟练掌握`ruby-install`的使用,可以...
总结来说,`Ruby-rubybuild`是Ruby开发中非常实用的环境管理工具,通过`ruby-build`我们可以方便地编译和安装各种版本的Ruby,配合`rbenv`实现多版本的灵活切换,确保项目的稳定性和兼容性。无论你是初学者还是经验...
ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby
《Ruby完全自学手册》是一本完全...同时也希望能够与各位读者分享多年来积累的Ruby程序和网站开发的经验。 《Ruby完全自学手册》适合准备学习或了解Ruby语言和IRails框架的各类读者阅读,并可作为开发人员的参考手册。
总的来说,Ruby-TensorStream为Ruby开发者提供了一个强大的深度学习工具,它结合了TensorFlow的威力和Ruby的优雅,使得机器学习变得更加易用和可访问。无论是初学者还是有经验的开发者,都能在Ruby-TensorStream中...
ruby源代码 ruby源代码 ruby源代码 ruby源代码2
src-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2...
Ruby是一种简洁而功能强大的编程语言,由日本的松本行弘(Yukihiro "Matz" Matsumoto)在1993年开发,并于...此外,由于技术不断更新,保持对最新Ruby版本的关注,以及学习相关的最佳实践和安全知识也是至关重要的。
总结来说,通过下载的这三个文件,你可以在无外网环境下成功搭建Ruby 2.7.2环境,并安装RubyGems 3.1.5以及Redis 6.0.9。安装完成后,你可以进一步使用RubyGems安装所需的其他库,如Rails框架等,以满足实际项目的...
8. **YARV虚拟机更新**:Ruby的默认虚拟机YARV也得到了升级,增强了垃圾回收机制,进一步提升了性能。 在使用这个压缩包时,你需要首先将其解压,通常可以通过双击或者使用命令行工具如`unzip`来完成。解压后,你...
ruby源代码 ruby源代码 ruby源代码 ruby源代码4
总的来说,Ruby的线性回归涉及以下几个关键点: 1. **线性回归模型**:理解线性回归的基本原理,包括最小二乘法、系数计算和预测。 2. **Ruby API**:学习如何使用Ruby语言提供的库或框架(如Numo::NArray,...
### Ruby 教程《The Book of Ruby》知识...对于想要学习Ruby或进一步提升Ruby技能的开发者来说,这是一本不可多得的好书。通过本书的学习,不仅可以掌握Ruby编程的基本技能,还能深入了解其背后的编程思想和设计理念。
- **面向对象**:一切在Ruby中都是对象,即使是基本数据类型如数字或字符串也不例外。 - **动态性**:Ruby是一种动态类型的语言,变量不需要事先声明类型。 - **可扩展性**:Ruby语言允许用户定义新的语法结构,这...
尽管Ruby的市场份额可能不如其他语言如Java或Python那么大,但其在Web开发领域,尤其是敏捷开发和快速原型构建中仍然具有显著优势,对于追求高效开发和代码质量的团队来说,Ruby不失为一个优秀的选择。
对于Ruby来说,这一点尤其重要,因为它为Ruby提供了跨平台的能力,同时也简化了内存管理等问题。 书中还探讨了Ruby中的类和模块在内部是如何工作的。尽管从表面来看,类和模块在Ruby中有着明显的区别,但在语言的...
总的来说,从Java转向Ruby不仅涉及技术层面的学习,也包括思维方式的转变。Ruby提供了一个更为简洁和动态的编程模型,能够提升开发效率并激发创新。对于希望拓宽视野和提升编程技能的Java开发者来说,这是一个值得...
ruby interpreter 原理探討 At first glance, learning how to use Ruby can seem fairly simple. Developers around the world find Ruby’s syntax to be graceful and straightforward. You can express ...