是否存在一种误解,即没有比C更快的高级语言实现?

Mai*_*tor 2 c compiler-construction performance scheme programming-languages

虽然很难按语言对语言进行排名,但实际上,在今天,您可以使用C语言获得最快的程序.我一直认为没有高级语言可以像它一样快.至少有一段时间了.除了我刚刚了解了针对Scheme斯大林编译器.我们知道,Scheme是一种没有类型注释的高级函数语言.然而,该编译器声称生成的程序比它们在C中的直接等效项 1.5到100倍.

我不知道它存在的事实让我担心我的信念.首先,这怎么可能是真的?其次,这不可能是一个例外.还有其他高级或低级语言的编译器生成比C代码更快的代码,我也不知道吗?

xan*_*tos 8

你应该阅读评论......

很好,但是C版本很慢的一部分原因是你使用的是abs而不是fabs.abs将int作为参数(这应该是编译器警告!) - 传递除0之外的double总是返回一个大数字.C版基本上是迭代的,直到误差低于双倍的分辨率.

的printf("%d,%d \n"个,ABS(0.0001)<0.001,晶圆厂(0.0001)<0.001); 输出0,1

和响应

优点!切换到晶圆厂使得gcc-inline的速度几乎与斯大林的速度相当.

以及文章的引用:

虽然原则上斯大林产生中间c代码,但它完全是外星人和低级别的.

因此,斯大林并不比C快,因为它编译为C,斯大林在编写比你难以理解的C代码方面更好:-)

来自维基页面:

Stalin(STAtic语言实现)是由Jeffrey Mark Siskind编写的一个积极的优化批量整个程序Scheme编译器.它使用高级流分析和类型推断以及各种其他优化技术来生成非常快速的代码(使用C作为中间语言),特别是对于数字代码.[引证需要]在许多测试中,它的性能优于手工 - 写作C,有时相当大的余量.[引证需要] Stalin用于生成优化的可执行文件.

所以让我们看看...这是一个编译器,它可能试图推断使用的类型(这个名字很清楚)并且它的性能优于手写的 C语言.

通常,域特定问题可能比C更快,因为它们可以使用C中不存在的技巧.例如,具有原始对象向量的语言可以更容易地使用CPU的向量指令.

  • @Viclib我将在文章中添加另一个引用:"虽然原则上斯大林产生中间c代码,但它完全是外星人和低级别的." 所以关键不是斯大林比C快,而是斯大林编写的C代码比你更好:-) (3认同)