当前位置: 首页 > 工具软件 > Ruby-Guard > 使用案例 >

Ruby Hack Guide

邹海荣
2023-12-01

既然要自己写Ruby的编译解释器,当然要看RHG啦。YARV也是很重要的东西。凡事慢慢来。分析完了YARV以后会贴出YARV的字节码结构。看看到底怎么样。其实我的意见是直接把YARV拿过来用……这个东西应该是很不错的,效率也不会很低了可以满足要求。

 

RHG的文档正在由这个哥们翻译:http://dreamhead.blogbus.com/logs/3971837.html。不过因为主要想看的是评估器的方面。所以可能有点问题……

 

 

Ruby有些地方需要简化一下。我是在想if本身如果是一个Proc会比较完美。直接写一个Proc会立即执行。直接写一个if应该结果也是一样。这样就可以简化Ruby的语法模式的了,会更好编译一些。

 

我对Ruby的感觉就是跟Haskell差不多。什么差不多呢?那种常量类型的感觉。我觉得,在Ruby里面,“字面”占用的比例是非常大的。比如:

 

123

1.1

"abc"

/a*$/m

 

这种普通的常量。我觉得,其实def也是一个函数。返回nil的方法。它的实际作用是把一个Method类型的常量添加进了某个类,也就是说,你写的语句,实际上应该是某个方法参数。应该所有的东西都用这种方式处理。这样会比较一致性。

 

同样,对于刚才说的if,它返回的是Proc的常量,class返回Class常量,而module返回Module常量。

 

self则是指向当前所在的上下文。对于Proc常量来说,Proc里面的self指向了Proc声明时刻的上下文,而不是Proc执行时刻的上下文,这是Proc和Method最大的区别。注意到,Method中self的行为不一样:在def的内部,self指向的是实际的接收器,即类型Object。而在class内部,self指向的是class本身,即类型Class。因此可以认为。def,module和class语句的根本作用在于声明了一个新的上下文:module和class的上下文为正在定义的Object,而def的上下文是执行是的receiver。

 

这样的理解之后,所有的Ruby结构就都变成了字面常量:方法是常量,类是常量,而模块也是一样。那么变量是什么?变量是这些常量的Handle。

 

但是,这些常量,说是常量,不如说是”实体“,因为我觉得我们无意于去限定它们“不可改变”,事实上有时候我们是需要改变他们的,这样的话,我觉得我们需要的其实是一个带引用计数的东西,并且,在同一个过程中,如果观察到一个实体没有改变,就不要更新它。这一点可以用在编译上面。

 

现在Ruby语言唯一的不“动态”的地方就是它的实体声明语句是无法自定义的:你不能写个东西代替module,但是我觉得这恰好是用来提高效率的方式:对于我以前设计的语言,太过灵活了,所以效率也就不会太高了。

 

对Ruby的观察还在继续,我们要想办法总结出一套对于Ruby一致性的东西来。越是一致性,越是好处理。

 类似资料:

相关阅读

相关文章

相关问答