我用Ruby编写了各种脚本:
rails (symfony)
ruby (php, bash)
rb-appscript (applescript)
Run Code Online (Sandbox Code Playgroud)
是否有可能用Ruby替换低级语言?
我用Ruby编写并将其转换为java,c ++或c.
原因人们说当涉及到Ruby中更多性能关键任务时,你可以用C扩展它.但是,这个词意味着你编写你刚刚在Ruby代码中调用的C文件.我想,我可以改用Ruby并将其转换为C源代码,将其编译为机器代码.然后我可以用C语言"扩展"它,但是在Ruby代码中.
这就是这篇文章的内容.在Ruby中编写所有内容但获得C(或Java)的性能.
第二个优点是您不必学习其他语言.
就像HipHop for PHP一样.
这有实现吗?
小智 13
这样的编译器将是一项巨大的工作.即使它有效,它仍然必须
所有这些都会造成巨大的运行时间损失,因为C编译器既不能理解也不能优化这种抽象.Ruby和其他动态语言不仅因为它们被解释(或编译为字节码然后被解释)而变慢,而且因为它们是动态的.
在C++中,在大多数情况下可以内联方法调用,因为编译器知道确切的类型this.如果传递了子类型,则该方法仍然无法更改,除非它是虚拟的,在这种情况下使用仍然非常有效的查找表.
在Ruby中,类和方法可以随时以任何方式改变,因此每次都需要(相对昂贵的)查找.
像Ruby,Python或Perl这样的语言有许多功能很昂贵,大多数(如果不是所有)相关程序都非常依赖这些功能(当然,它们非常有用!),因此无法删除或内联它们.
简单地说:动态语言非常难以优化,只需执行解释器所做的操作,并将其编译为机器代码并不会削减它.正如V8所证明的那样,动态语言可以获得令人难以置信的速度,但你必须投入大量资金和办公室,其中充满了聪明的程序员.
"低水平"是非常主观的.许多人以不同的方式划清界限,所以为了这个论点,我只是假设你的意思是将Ruby编译成一个中间形式,然后可以将其转换为特定平台的机器代码.即,将ruby编译为C或LLVM IR,或者那种性质的东西.
简短的回答是肯定的,这是可能的.
更长的答案是这样的:
几种语言(最值得注意的是Objective-C)作为其他语言的薄层存在.出于所有实际目的,ObjC语法实际上只是围绕objc _*()libobjc运行时调用的松散包装器.
知道这一点,那么编译器会做什么?好吧,它基本上可以像任何C编译器一样工作,但也可以获取objc特定的东西,并生成适当的C函数调用以与objc运行时交互.
ruby编译器可以用类似的术语实现.
然而,还应该注意的是,仅将一种语言转换为较低级别的形式并不意味着语言会立即表现得更好,但这并不意味着它也会表现更差.你真的要问问自己为什么要这样做,如果这是一个很好的理由.