编译器70
Ⅰ 交叉编译器的发展历史
20世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。分析问题(parsing problem,用于上下文无关文法识别的有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。它已是编译原理中的一个标准部分。
有限状态自动机(Finite Automation)和正则表达式(Regular Expression)同上下文无关文法紧密相关,它们与Chomsky的3型文法相对应。对它们的研究与Chomsky的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。
人们接着又深化了生成有效目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其称为优化技术(Optimization Technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(Code Improvement Technique)。
当分析问题变得好懂起来时,人们就在开发程序上花费了很大的功夫来研究这一部分的编译器自动构造。这些程序最初被称为编译器的编译器(Compiler-compiler),但更确切地应称为分析程序生成器(Parser Generator),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最着名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年为Unix系统编写的。类似的,有限状态自动机的研究也发展了一种称为扫描程序生成器(Scanner Generator)的工具,Lex(与Yacc同时,由Mike Lesk为Unix系统开发)是这其中的佼佼者。
在20世纪70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。
编译器设计最近的发展包括:首先,编译器包括了更加复杂算法的应用程序它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言的发展结合在一起。其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。其次,编译器已越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,它包括了编辑器、连接程序、调试程序以及项目管理程序。这样的IDE标准并没有多少,但是对标准的窗口环境进行开发已成为方向。另一方面,尽管在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近20年中都没有多大的改变,它正迅速地成为计算机科学课程中的中心环节。
在20世纪90年代,作为GNU项目或其它开放源代码项目标一部分,许多免费编译器和编译器开发工具被开发出来。这些工具可用来编译所有的计算机程序语言。它们中的一些项目被认为是高质量的,而且对现代编译理论感兴趣的人可以很容易的得到它们的免费源代码。
大约在1999年,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。
Ⅱ python速度编译神器学生来看
Python速度编译神器快来体验吧
Python速度编译神器
Python的运行速度快吗?虽说不同场景不同定论, 但整体而言
, 它没有C、Java快。这也导致Python凭借可读性、简单易
上手、良好的生态系统横行AI领域时,一提到速度,就成为众
多开发者头疼的问题。
为了解决这一难题,麻省理工学院的计算机科学家出手了,他
们共同研发了一种名为Codon的Python编译器, 可以将
Python代码转化为本地机器代码, 而不会对运行时的性能产生
影响。
当前, Codon已经在Git Hub上开源:https:
//github.com/exaloop/codon, 斩获6300个Star。
1、Codon与C/C++性能相当
"在单线程上, 比Python的典型速度提高了10-100倍或更多,
"Codon repo写道, "Codon的性能通常与C/C++的性能相当
(有时甚至更好)。"
codon
与Python不同的是, Codon支持本地多线程, 这可以使速度
提高许多倍。
Codon最初是作为一个在Python中创建高性能特定领域语言
(DSL, domain-specific language) 的框架而开发的。DSL
是专注于特定目的的语言, 而不是像Python或C这样的通用
编程语言。
据官方Git Hub repo透露, Codon源于Seq项目, 后者是一个
用于生物信息学和遗传学的DSL, 现如今它已经成长为一个与
Python 3基本兼容的语言编译器。
近期, 外媒The Register通过该工具的研究团队内部最新分享
了一个关于Codon的论文。
这篇论文指出, "与其他面向性能的Python实现(如PyPy或
Numba) 不同, Codon是作为一个独立的系统从头开始构建的
, 它可以提前编译为静态可执行文件, 并且不与现有的Python
运行时(如CPython或RPython) 绑定执行。因此, Codon
可以实现更好的性能,并克服运行时的特定问题,如全局解释
器锁"。
2、测试
那么Codon是否真的如说的那样快?在Codon论坛上, 一位
开发者进行了测试:
CPython 3.11
PyPy 7.3.9
Codon compiled
Codon with python interpreter
最终发现, 一个简单的Codon编译的斐波那契脚本比CPython
版本快70多倍。
据Codon官方文档显示, 虽然Codon的语法和语义与Python
的几乎相同,但还是有一些值得一提的区别,如数据类型方面
整数。Codon的int是一个64位有符号的整数, 而Python
的(在版本3之后) 可以是任意大的。然而Codon通过Int[N]
支持更大的整数,其中N是位宽。
字符串。Codon目前使用ASCII字符串, 与Python的
unicode字符串不同。
字典。Codon的字典类型不保留插入顺序, 与Python 3.6的
不同。
此外, Codon和Python在类型检查、数值运算、模块等维度
还有些许的不同, 更详细的内容可参考:https:
//docs.exaloop.io/codon/general/differences据悉, Codon
已经被商业化地应用在金融和生物信息学、深度学习等领域。
Ⅲ 编译技术的发展历程
1954年至1957年间,IBM的John Backus带领一个小组开发FORTRAN语言及其编译器,使得上面的担忧不必要了。
但由于当时处理中所涉及到的大多数程序设计语言的翻译并不为人所掌握,所以这个项目的成功也伴随着巨大的辛劳。
几乎与此同时,人们也在开发着第一个编译器,Noam Chomsky开始自然语言结构的研究。使得编译器结构异常简单,甚至还带有了一些自动化。
Chomsky的研究导致了根据语言文法(grammar,结构规则)的难易程度以及识别它们所需的算法来为语言分类。文法有4个层次:0型、1型、2型和3型文法,且其中的每一个都是其前者的专门化。2型(或上下文无关文法context-free grammar)是程序设计语言中最有用的,代表着程序设计语言结构的标准方式。
人们接着又深化了生成有效的目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其误称为优化技术(optimization technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(code improvement technique)。
在70年代后期和80年代早期,大量的项目都关注于编译器其他部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。