perform:
平均而言,我可以合理地期望比文字信息发送的速度慢多少?我是否应该避免发送perform:
循环,类似于Perl/Python程序员为避免在循环中调用eval("...")
(Compiler evaluate:
在Smalltalk中)的警告?
我主要关注Squeak,但也对其他Smalltalks感兴趣.此外,perform:with:
变体的开销是否更大?谢谢
#perform:
不喜欢eval()
.这个问题eval()
(性能明智的,无论如何)是它编译你在运行时将其发送的代码,这是一个非常缓慢的操作.#perform:
另一方面,Smalltalk 相当于Ruby send()
或Objective-C performSelector:
(事实上,这两种语言都受到了Smalltalk的强烈启发).这些语言已经根据名称查找方法 - #perform:
只允许您在运行时指定名称而不是写入时间.它不必解析任何语法或编译任何类似的东西eval()
.
它会慢一点(至少一个额外的方法调用的成本),但它不是eval()
.此外,具有更多参数的变体不应该显示速度与简单的任何差异perform:whatever
.我不能特别谈论有关Squeak的那些经验,但这是它通常的工作方式.