为什么Crystal比Ruby更快?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (42)

我非常想知道什么使得Crystal比Ruby更快,而代码非常相似。简短的答案可能是它被编译,而Ruby被解释,但我想更多地了解语言规范。

提问于
用户回答回答于

我想这是一个结合的原因:

  • Ruby被解释,解释器可以被改进。例如,像JS或Java这样的其他解释语言具有非常好的VM和JIT编译器。
  • 很多Ruby在运行时检查,在Crystal中是在编译时完成的。例如,Ruby中的一个简单的方法调用最终会在方法查找中进行。即使使用缓存,它也不会击败本地函数调用。或者当Ruby决定根据参数的类型做不同的事情时,这些检查是在运行时完成的。在Crystal中,它们在编译时已知,所以这些检查消失。
  • 在Crystal中我们尽量避免额外的内存分配。例如to_s(io)写入IO而不是将对象转换为内存中的字符串。或者我们拥有在堆栈中分配的固定大小数组的元组。或者你可以将一个类型声明为一个结构来避免堆分配。
  • 调用C直接完成,没有包装。那么,你可以有一个包装,但将由LLVM内联。在Ruby中,它必须首先解析Ruby方法。

扫码关注云+社区