imm*_*ion 20 performance interpreter programming-languages language-design
到目前为止,我已经为他们设计了大约5种实验语言和口译员,用于教育,作为一种爱好和乐趣.
我注意到的一件事:类似汇编的语言只有子程序和条件跳转作为结构,比if,while等高级语言要慢得多.我同时开发它们,两者都是解释语言.我用C++编写了解释器,我试图尽可能快地优化代码执行部分.
我的假设:在几乎所有情况下,解释语言的表现都随着它们的水平(高/低)而上升.
编辑:我没有提到这里编译的单词,甚至一次,它是解释与解释!
Sni*_*gus 12
最后,无论我们谈论的是装配还是下一件大事语言(TNBL),解析你的语言中的一行文本的时间大致相同.从字面意义上讲,这不是真的,但在Turing-esque,Big-O-Notation方式中也是如此.
如果需要(再次,"大致")相同的时间来确定这意味着什么:
mov $3, $4, $5
Run Code Online (Sandbox Code Playgroud)
如下:
print "foo"
Run Code Online (Sandbox Code Playgroud)
...然后让我们想象用我们的两种语言编写Hello World.汇编解释器将有一个更复杂的程序来解析.比方说,n行长,这是TNBL Hello Wolrld的n倍.所以你最基本的开销是n倍.
最重要的是,您拥有以简单语言执行的所有代码,这些语言模拟了寄存器,操作等的行为.这是很多工作.在TNBL中,解释代码的语义与您可以在宿主语言中执行的操作之间几乎存在一对一的映射.这意味着从语义到执行的开销大大减少.
我相信你会看到一些不喜欢这篇论文的Java程序员,但我要指出Java有一些优点:一个中间字节码试图让代码尽可能靠近硬件在执行它之前,数千人工作时间沉没于开发该语言的编译时和运行时优化.他们几乎不会使用业余爱好者的语言.=]
当然,现实情况比这稍微复杂一些。随着语言、解释器和编译器变得更加复杂,机器优化性能的新机会出现了。此外,任何给定程序的性能很大程度上取决于程序员编写的代码的质量。
此外,性能以不同的方式影响不同类型的程序。例如,业务线应用程序几乎总是将大部分速度用于从数据库查找数据并通过网络发送数据,而游戏程序员必须处理完全不同的性能概念,即显卡帧的性能概念费率。
因此,性能图并不像看起来那么简单。