首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Crystal比Ruby快?

为什么Crystal比Ruby快?
EN

Stack Overflow用户
提问于 2016-02-22 20:02:38
回答 1查看 1.1K关注 0票数 24

我非常想知道,在代码如此相似的情况下,到底是什么让Crystal比Ruby更快。简短的答案可能是它是编译的,Ruby是解释的,但我想了解更多关于语言规范的知识。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-22 22:56:08

我猜这是一系列事情的组合:

  • Ruby是解释型的,解释器还可以改进。例如,其他解释型语言,如JS或Java,有一个非常好的VM和即时编译器。
  • 许多在运行时完成的Ruby检查,在Crystal中都是在编译时完成的。例如,Ruby中一个简单的方法调用以方法查找结束。即使使用缓存,它也无法胜过本机函数调用。或者,当Ruby根据参数的类型决定做不同的事情时,这些检查在运行时完成。在Crystal中,它们在编译时是已知的,所以这些检查消失了。没有这些检查,编译器可以内联调用并做一些非常疯狂的事情(这要归功于LLVM)。或者,例如,在Ruby中查找实例变量是一种散列查找(据我所知),而在Crystal中这只是一个内存间接和加载。
  • 在Crystal中,我们尽量避免额外的内存分配。例如,to_s(io)写入IO,而不是将对象转换为内存中的字符串。或者我们有用于在堆栈上分配的固定大小数组的元组。或者您可以将类型声明为结构,以避免堆allocations.
  • Calls到C的操作是直接完成的,而不需要包装。嗯,你可以有一个包装器,但是它将被LLVM内联。在Ruby中,它总是必须首先解析Ruby方法。

可能还有更多的原因,但它们是相关的。

票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35553132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档