加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么Crystal比Ruby快?

发布时间:2020-12-16 19:47:00 所属栏目:百科 来源:网络整理
导读:我非常想知道什么使得Crystal比 Ruby更快,而代码是如此相似.简短的答案可能是编译,Ruby被解释,但我想了解更多关于语言规范. 解决方法 我想这是一个组合的事情: Ruby被解释,解释器可以改进.例如,其他解释型语言(如JS或Java)具有非常好的VM和JIT编译器. 在Cry
我非常想知道什么使得Crystal比 Ruby更快,而代码是如此相似.简短的答案可能是编译,Ruby被解释,但我想了解更多关于语言规范.

解决方法

我想这是一个组合的事情:

Ruby被解释,解释器可以改进.例如,其他解释型语言(如JS或Java)具有非常好的VM和JIT编译器.
>在Crystal的运行时完成的许多Ruby检查都是在编译时完成的.例如,Ruby中的一个简单的方法调用最终在方法查找中.即使使用缓存也不会击败本机函数调用.或者当Ruby决定根据参数的类型做不同的事情时,这些检查是在运行时完成的.在Crystal中,它们在编译时已知,因此这些检查消失.没有这些检查,编译器可以内联调用,并做一些非常疯狂的东西(感谢LLVM).或者,例如,查找实例varaibles是Ruby中的哈希查找(据我所知),而在Crystal中,它只是一个内存间接和加载.
>在Crystal中,我们尝试避免额外的内存分配.例如to_s(io)写入IO,而不是将对象转换为内存中的字符串.或者我们有在堆栈上分配的固定大小的数组的元组.或者你可以声明一个类型作为一个结构来避免堆分配.
> C的调用是直接完成的,没有包装器.那么你可以有一个包装器,但这将被LLVM内联.在Ruby中,它首先必须解决Ruby方法.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读