[探讨]如何创建比C语言更快的编程语言?

翻译 2012年03月30日 10:22:09

近日,beza1e1上发表了一篇博客《Faster than C》,在Hacker NewsReddit Programming上引发了开发者们的激烈讨论。现将此文编译,我们一起来探讨下。

单从编程语言特性来判断,虽然Fortran语言也以快而著称,但开发者们还是将C语言称之为领导者。开发者创建新一门语言通常以C语言为参照对象,将语言编译时间与C语言进行对比,会因比C语言慢多少而引以自傲。然而,很少有语言能够击败C。

那么,什么样的语言才能比C更快呢?

更好的别名机制(Better Aliasing Information)

别名实际上是指两个引用指向同一个内存位置。例如,典型的内存复制(not memcpy from stdlib.h!)

  1. void* memcopy(void* dst, const void* src, size_t count) {  
  2.    while (count--) *dst++ = *src++;  
  3.    return dst;  

根据目标架构,编译器利用代码对此进行大量的优化。比如,X86利用SSE指定MOVDQU,它可以复制16字节,而非4字节(sizeof(void*))。然而,因为Aliasing(别名),dst中以src+1为例,在这种情况下,结果在dst出现的第一句一定是*src,由于C语义的原因,编译器不允许使用MOVDQU。

在C99中新增了限制性关键字,我们在这里使用的编码src和dst与其他地方引用的不同。在某些情况下这种机制比较受用,能够起到帮助,但在我们的例子中却不受用。

Fortran语义称函数参数从未有过别名(alias ),Fortran中单独有数组类型,而在C中,数组实质上是指针。这就是为什么Fortran经常比C更快的原因以及为什么依然要在Fortran中编译数值库的原因,当然它还涉及到指针算法的成本问题。

因此,想要创建一门比C更快的语言应该提供更容易被编译器处理的别名机制。

在编译阶段完成运算(Push Computation to Compile-Time)

在编译时应当减少运行时间,当然,在C编译器像1+2这样的案例,加法运算在编译阶段就完成了。编程语言利用完美的元编程语言能够使程序员可以做一些特定优化的应用。一个简单的实例,比如fib(20)可以写成6765。一个真实的例子,Eigen C++ library for linear algebra通过使用C++模板来避免复制和一些计算指令 。Lisp是宏观系统技术之父。比如,一个学生使用Scheme的编码奇闻。基本上,程序员可以在编译过程中修改抽象的语法树,用这样的元编程特性来权衡是很复杂的。程序员往往会低估了如何编译正确宏的困难性如同他们会低估如何编译正确的并发程序一样。

一门语言的设计者应该好好思考下元编程。在编译的时候多思考要像C++ 模板那样能够提供多种益处的性能。

运行优化(Runtime Optimization)

在运行时,有动态信息显示不适用于静态编译器,C语言可以复制任何一个特定的示例,一般情况下,它是不可行的。该技巧只解决了问题的一小部分。

运行时优化whole-world变得相当的容易。尽管这可能是静态的,C语义(编译单元)和强制性的预处理器使其编译起来更难,尽管Python通过inlining across file borders(PyPy)击败了C

当然也有使用JIT,但在嵌入式系统语言是不适宜的。虽然Java,C#或者是其他语言击败了C,但它们不会威胁到C的用户群。

结束语:

想要创建一门比C要快的新的语言,更好的别名机制是我唯一确定能提高语言速度的方法,因为在C中无法实现Fortran的速度,另外就是思考如何用更简单的方法编写出更快的程序。

Python爬虫自动获取CSDN博客收藏文章

CSDN的Python创意编程活动开始第一天就看到了,但是认为自己是菜鸟,就向当“吃瓜群众”,后来看到有好多人的代码是关于爬虫的,当初我就是由于对爬虫 感兴趣才自学的Python。现在也打算参加一下这...

如何创建比C语言更快的编程语言?

【CSDN编译整理】近日,beza1e1上发表了一篇博客《Faster than C》,在Hacker News和Reddit Programming上引发了开发者们的激烈讨论。现将此文编译,我们...

c语言编程基础------0.4.4 ubuntu 12.04 LTS 如何使用更快的更新源

装好ubuntu系统后的第一见事就是替换自带的更新源,原因是系统自带的源有些在中国访问不了,可以访问的速度又特别慢。幸好国内的一些公司和大学提供了速度不错的更新源。下面介绍如何使用更快的更新源 ...

疯狂极客前传:用最快的速度设计一种新的编程语言

最近打算写一些列有趣、而且有一定难度的文章。这个系列的名字就叫《疯狂极客》,这一系列的文章大多数与计算机有密切的关系。包括制作编译器、制作OS、Android控制电路板、机器人的制作(通过Androi...

胡谈编程语言:从C语言到Julia

胡谈C、C++、Java、Python、C#、Haskell、Julia、Go等主流非主流编程语言,以及这些年在语言与编程上的一些思考。...
  • lanonjj
  • lanonjj
  • 2016年03月19日 13:51
  • 2249

[翻译]GO编程语言,或者:为什么除了它,其他类C语言都是垃圾(1)

原文在这里:http://www.syntax-k.de/projekte/go-review。作者是 Jörg Walter,是个德国人。 根据 Rob Pike 在推上的说法,文章有一些错误...

最早接触到的计算机编程语言——c语言

最早接触到的计算机编程语言——c语言 在经过入学后计算机导论的熏陶后,在大一的下半学期我终于接触到了一门语言,这也是我们最早接触的计算机编程语言——c语言。 在初学的时候,感觉这门课程十分晦涩,但...

编程语言排行榜-C语言依然很流行!

2009-01-08 17:34 Long term trends长期趋势 参见:http://www.tiobe.com/index.php/content/paperinfo/tpci/ind...

13年10月编程语言排行榜:C语言第一、Java第二

发布:2013-10-12 16:31:08作者:TechWeb TIOBE社区发布了13年10月的编程语言排行榜。前五名无太大的变化,C语言岿然不动,Java第二;上月排在第三位的C+...

C语言--编程语言的基础

经过了多年的发展,各种新兴的编程语言都在不断产生,但是,作为基础的C语言一直没有被人们遗忘。 C语言是由C语言之父–Dennis M Ritchie(丹尼斯·里奇)创造出来的。虽然从1972年到现在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[探讨]如何创建比C语言更快的编程语言?
举报原因:
原因补充:

(最多只允许输入30个字)