原文地址:https://github.com/rapid7/metasploit-framework/wiki/Why-Ruby%3F

译者:王一航 & Google 2018-05-14
校对:王一航 2018-05-14


以下写于大约 2005 年左右

在整个框架的开发过程中,Metasploit 员工不断被问到的一个反复出现的问题是为什么选择 Ruby 作为编程语言。为了不再单独为提问者回答这个问题,作者选择在本文中解释原因。

由于多种原因,Ruby 编程语言被选中而不是例如 Python,Perl 或者 C++。

Ruby 被选中的第一个(也是最主要的)原因是因为它是 Metasploit 员工喜欢写的一种语言。

花费时间分析其他语言并考虑过去的经验后,我们发现 Ruby 编程语言作为解释型语言它提供了一种简单而强大的方法。

Ruby 的面向对象的特性和内省机制 (译者注: 类似于 Java 的反射 ( Reflection ) 机制) 可以非常好的适应框架开发的需求。

框架对于代码重用自动化类构建的需求是是决策过程中的关键因素,并且,这也是 perl 为什么不是特别适合这个需求的原因之一。

除此之外,在提供相同级别的语言特性的条件下(例如: Perl 语言),Ruby 的语法简单的特性就显得更重要了。

Ruby 被选中的第二个原因是因为其独立于平台的线程支持。

尽管在该模型下框架的开发过程中遇到了一些限制,但 Metasploit 的工作人员已经观察到在 2.x 分支上有显着的性能和可用性改进的余地。

未来版本的Ruby(1.9系列)将使用针对操作系统的本地线程来支持现有的线程API,解释器将针对该操作系统编译,这将解决当前实现中存在的一些问题(例如允许使用阻塞操作)。

与此同时,现有的线程模型与传统的分支模型相比,已经要优越得多,特别是在缺乏原生 fork 实现的平台上(例如:Windows)。

另一个选择 Ruby 的原因是:

选择 Ruby 的另一个原因是因为 Windows 平台支持原生解释器。 虽然 Perl 有一个 Cygwin 版本和一个 ActiveState 版本,但都受到可用性问题的困扰。 Ruby 解释器可以在 Windows 上本地编译和执行大大提高了性能。 此外,解释器也非常小,可以在出现错误时轻松修改。

  • Python 编程语言也是一种语言候选。
    Metasploit 员工选择 Ruby 而不是 Python 的原因是由于几个不同的原因。 主要原因是对 Python 强制的某些语法上的烦恼感到普遍的厌恶,比如块缩进(译者注:block-indention)。虽然很多人会认为这种方法的好处,但 Metasploit 的一些工作人员认为这是一个不必要的限制。 Python 的其他问题在于:

    • 父类方法调用的限制
    • 解释器的向后兼容性。
  • C/C++ 编程语言也曾将被非常慎重地考虑
    但最终很明显,尝试以非解释型语言部署 便携式可用 框架并不合适。

此外:这种语言选择的开发时间线很可能会长得多。

尽管框架的 2.x 分支已经非常成功,但 Metasploit 的工作人员遇到了许多限制,并且对 perl 的面向对象编程模型感到烦恼,或者缺乏某些限制。 尽管 perl 解释器是许多发行版默认安装的一部分,但是这不是 Metasploit 工作人员认为选择 Perl 来走捷径的原因。

最后:这一切都归结为选择一种为框架贡献最大的人所享有的语言,而这个语言最终成为了 Ruby。

资源

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖