【CSDN编译整理】近日,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;
  4. }

根据目标架构,编译器利用代码对此进行大量的优化。比如,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的速度,另外就是思考如何用更简单的方法编写出更快的程序。

如何创建比C语言更快的编程语言?相关推荐

  1. r语言读取excel数据_R语言 | 更快的表格文件读取方法!

    友情提示:蓝色下划线字体为引文,请保持警惕! 使用R语言读取 Affymetrix Human Exon 1.0 ST Array 芯片平台探针注释文件: https://www.affymetrix ...

  2. Java语言和C语言相比,为什么C语言的运算速度会更快,是因为vjm的性能不行么?

    C语言编译出来的是机器码,程序执行过程是机器直接执行其机器码. Java语言程序执行过程是,Java虚拟机(jvm)翻译Java字节码,然后将其转换成机器码告知机器运行. 同时Java语言是自动管理内 ...

  3. php serialize和json_encode哪个更快_学习PHP的10个技巧

    在开始学习PHP之前,花一些时间计划学习语言的方法可能是明智的. 学习过PHP的专业开发人员已经花费了大量时间来学习他们的技术.要模拟它们,您将需要确保有动力去做,并且理想地能够快速有效地学习PHP. ...

  4. Python到底是什么样的语言? Python和Java比谁更快? TensorFlow的主体是用Python写的吗?

    Python到底是什么样的语言? Python和Java比谁更快? TensorFlow的主体是用Python写的吗? Python到底是什么样的语言? 解析: 这里是一些关键点:Python是解释型 ...

  5. C语言技巧:有if时使用likely和unlikely让代码运行更快

    在单片机/嵌入式编程中,对速度要求比较高,likely和unlikely就是一个比较好的技巧,适用于有if-else分支,且知道哪个发生概率大的情况​. 参考文章:C语言技巧:有if时使用likely ...

  6. rms c语言 函数,C中任何更快的RMS值计算?

    我正在用C编写一个小型8位微控制器的软件.部分代码是读取电流互感器(ZCT)的ADC值,然后计算RMS值.流过ZCT的电流是正弦曲线但可能会失真.我的代码如下: float adc_value,ins ...

  7. python创建一个json_如何为Python选择一个更快的JSON库

    使用JSON越多, 你就越有可能遇到JSON编码或解码瓶颈.Python的内置库也不错, 但是还有多个更快的JSON库可用: 如何选择使用哪一个呢? 事实是,没有一个正确的答案,没有一个最快的JSON ...

  8. TensorRT 3:更快的TensorFlow推理和Volta支持

    TensorRT 3:更快的TensorFlow推理和Volta支持 TensorRT 3: Faster TensorFlow Inference and Volta Support 英伟达Tens ...

  9. 一个让Python代码运行更快的最佳方式!

    作者 | Serdar Yegulalp 译者 | 姜松浩,责编 | 屠敏 转载自 CSDN(ID:CSDNnews) Python因其强大.灵活且易于使用等特性,而赢得了声誉.这些优点使其在各种各样 ...

最新文章

  1. 数据结构:二分查找 java
  2. mysql udate 充值_分享下一个mysql的充值记录系统
  3. Linux内核功能及架构
  4. 很多程序员聪明,但我一看就知道他不会成功: 周鸿祎
  5. 【软件-软件设计师】操作系统知识架构图
  6. vue加载时闪现模板语法-处理方法
  7. ES6箭头函数(节选自《ECMAScript 6 入门》)
  8. windows下python3用pip安装kivy和kivy示例
  9. cornerstone the working copy is locked due to a previous文件lock解决办法
  10. IteratorX 正式开源:超好用的 jdbc reader
  11. NDB的备份和恢复---测试start backup和ndb_restore
  12. eclipse查看代码git历史_Eclipse使用教程 : 利用Eclipse中git的插件来查看项目状态 - Break易站...
  13. 【Elasticsearch】Elasticsearch启动索引恢复流程
  14. CANoe-第2个仿真工程-XVehicle—2Panel设计(原理,思路)
  15. 计算机远程桌面连接软件,windows7远程桌面连接软件 提取自最新windows7,可运行于XP...
  16. 薛兆丰·北大经济学课
  17. 列表块元素 ul和ol
  18. JAVA12_10总结
  19. 工欲善其事必先利其器,IDEA必装插件!
  20. C++模板学习--kankan

热门文章

  1. Windows Workflow Foundation(WWF)介绍
  2. 面向对象软件开发代码结构(1)
  3. 当爬虫工程师遇到 CTF丨2021 年 B 站 1024 安全攻防题解
  4. 【POJ - 1696】Space Ant (凸包,最小极角,排序)
  5. 2.3)深度学习笔记:超参数调试、Batch正则化和程序框架
  6. docker修改镜像的存储位置_云原生存储详解:容器存储与 K8s 存储卷(内含赠书福利)...
  7. linux+last命令菜鸟,Linux基本命令。。。菜鸟保留
  8. mysql 导出数据库中的某张数据表_mysql 导出数据库中的某张数据表
  9. RelativeDateFormat时间计算工具类
  10. javase 的一些基础常用类