如何创造一门编程语言?

编程语言,作为人与计算机沟通的桥梁,有着重要和深远的意义。有过计算机编程经验的人,多少学习或掌握过一到多种编程语言。计算机专业领域的编程语言成百上千种,主流的编程语言也有数十种之多。每种编程语言面向的领域和特性都不尽相同,不过归根结底是为了解决人与计算机之间沟通的效率问题,提高计算机的生产力。想必有不少人对那些主流编程语言的创造者十分倾佩,也相信有不少人会好奇一门编程语言是如何诞生的。那么如何创造一门编程语言呢?

总的来看,创造一门编程语言需要有以下几个过程:

1)设计语言的特性。

2)定义语言的单词、语法和语义。

3)实现编译器或者解释器将程序翻译为计算机底层表示。

4)生成计算机程序的二进制存储格式。

5)完善语言的运行时环境和标准库。

一、语言特性设计

所谓语言特性,就是编程语言为开发者提供了什么样的原子性功能特征。比如是否支持数学表达式计算、字符串处理,是否支持变量、函数和递归,是否支持分支、循环复合语句等。语言的变量类型是强类型、弱类型,还是动态类型,程序是过程式、函数式,还是面向对象的。是否支持模板、泛型和反射机制,是否支持多线程和并发特性,是否支持错误和异常处理机制等等。

语言特性设计是一门编程语言最关键的环节,直接决定了语言的基本特征和雏形。当然,这也是最难的一个环节,因为语言设计是面向具体问题领域的,是语言设计者从大量的编程实践中的获得的总结和升华。比如C语言设计者希望面向计算机底层,拥有对操作系统和硬件的直接操纵能力。而Python的设计者则希望尽可能地减少操作计算机资源的繁琐过程,以获得语言的简洁性、高度的灵活性和扩展性。SQL的设计者面向具体的数据查询和分析领域,希望帮助开发者获得快速检索和操纵数据的能力。而Go语言的设计者则希望在保留C语言优秀功能的基础上,扩展编程语言对高并发环境的支持,并拥有垃圾回收和快速编译的能力。

凡此种种,编程语言特性的设计都是面向具体的问题领域的,是语言设计者构建于开发者和计算机之间的中间层,是对开发过程中重复功能逻辑的原子性“封装”,最终的目的是为了提升具体问题领域内的软件开发效率。

二、单词、语法和语义

和人类使用的自然语言类似,编程语言也有自身的单词、语法和语义,专业上称为词法记号、语言文法和语义。

常见的词法记号可以分为数字、字符、字符串、标识符、关键字,以及用于连接表达式的运算符、分割语句或者程序段落的界符等符号。这些是编程语言程序的基本单位,通过它们的有序组合,构建出了一门编程语言形形色色的代码片段。

编程语言的文法是用来描述语言的语法规则的,具体来说是规定词法记号之间的排列组合的顺序与规则。它描述了编程语言程序的基本模式,不符合该模式的词法记号的排列被挡在了合法语言程序的大门之外。同时,它也是各种编程语言对于开发者最明显的差异化特征。一个有经验的开发者可以很容易地通过扫视一段代码,就能分辨出这是哪种编程语言编写的计算机程序。

编程语言的语义描述了一段符合语言语法的程序,对于计算机而言的真正含义,是开发者最终要传达给计算机的意愿和指令。语言的语义必须是准确的、无二义性的,编译器也正是通过语义的指导,将计算机程序翻译为计算机可识别的表达形式。

三、程序的翻译

计算机程序是用来供人阅读和修改的,计算机硬件并不能理解程序内的思想和含义。因此,必须有一个翻译转换的过程,将人所表达的意愿准确无误地传递给计算机,让计算机明确并执行人下发的指令。实现这种翻译工作的工具就是编译器或解释器。

对于编译器来说,它的输入是人类书写的计算机语言程序,输出则是计算机可识别的底层表示。首先,它需要识别出程序中的单词,即词法分析。然后,根据单词的组合模式识别出程序的语法结构,即语法分析。最后,根据不同的语法结构对应的语义,将程序按照每个语法模块的形式转换为计算机可识别的指令序列,即语义分析和目标代码生成。

众所周知编译器的实现具有一定的复杂度,其根本原因来自于语言语法的结构灵活性和计算机底层表达形式的多样性,这也是创造一门编程语言最核心的环节。

四、二进制存储

编译器将语言程序翻译转换后,需要将转换后的结果存储起来,以便计算机在需要的时候将其加载、执行。这里不可避免的涉及到两个问题:

(1)转换后的结果是什么样的形式?

(2)转换后的结果保存在哪里?

第一个问题描述的是计算机程序被转换为怎样的形式,才是计算机可以识别的。由于计算机中实际运行程序的硬件模块是CPU,因此计算机程序只有被转换为CPU的二进制指令格式才能被正确识别、执行。比如常见的Intel体系的CISC指令格式、ARM体系的RISC执行格式等。

第二个问题描述的是计算机程序转化为二进制指令格式后,以什么样的方式保存在计算机的磁盘上。由于绝大多数的计算机程序是需要通过运行在计算机硬件之上的操作系统加载运行的,因此计算机程序的二进制表达形式必须以对应操作系统可识别的文件格式存储。比如常见的Windows操作系统的PE文件格式、Linux操作系统的ELF文件格式等。

五、运行时环境和标准库

理论上讲,一门编程语言如果能提供出完备的操纵操作系统和硬件的原子性功能就已经成功了。但是不提供强大的运行时环境支持和标准库,是很难让一门编程语言真正的好用和流行的。没有人希望简单地打印一行字符串,还需要使用编程语言提供的基本特性实现调用操作系统提供的打印接口的逻辑。Java语言之所以久兴不衰,正是因为它不仅提供了完善的运行时环境和开发库支持,甚至提供了更强大的开发框架和工具支持。

因此可见,除了完备的语言特性,为开发者提供更方便好用的库和框架支持,消除软件构建过程中复杂和重复的逻辑,才是一门优秀编程语言的长盛之道。

六、自己动手,立即开始!

《自己动手构造编译系统——编译、汇编与链接》一书详细阐述了一门编程语言从无到有的过程,从语言的功能特性设计,到词法、文法、语义分析;从编译器、汇编器的设计实现,到目标文件的链接生成可执行文件;甚至编译优化器的实现、二进制指令、可执行文件格式以及语言运行时和标准库的概念,都在书中做了认真细致地剖析。相信对本书的阅读,将是一次不错的获得知识的体验!

时间: 2024-11-01 17:58:16

如何创造一门编程语言?的相关文章

初学者该如何选择一门编程语言?

用心分享,共同成长 没有什么比你每天进步一点点更实在了 本文已经收录至我的github,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 点关注,不迷路!!! 为什么会出这样一篇文章? ?本来想写点最近学习的东西,但是最近好多粉丝再问我一个问题. image-20200105164345384 于是我决定把我这个过来人的一些建议给到你们,希望大家少一些不必要的迷茫,多花点时间去学习该学习的东西,去做一些重要的事情. 刚开始学习

如何学好一门编程语言或技术?

相信大家都知道,在看一本书的时候,通过该书的目录和索引能够很快的了解本书内容和找到我们需要的页数,因为一本专业的书本往往记录的知识都非常全面,举个例子假如我们初学Hadoop,所以呢就购买了一本<Hadoop编程指南>,打算系统的学习一下这个东东来提高一下自己的逼格和工资水平,那么问题来了,如何才能学好一门语言或技术? 以前也有很多朋友或群友,问散仙如何学好一门编程语言或XXX技术,当然首先我得从非技术的角度来回答你: 1,最重要的就是坚持下来,不要半途而废 2,空杯心态,戒骄戒躁,多向比你强

12种方式让程序员快速掌握一门编程语言

[IT168 评论]你决定学习一门新的编程语言了吗?怎么开始呢?本文列举了12项关于快速掌握一门编程语言的方法,如果你有其他更好的建议,欢迎分享! 1.比较与之类似的编程语言 这点对于程序员而言,应该很容易吧!你可以通过观看该语言的教程或读取示例代码,来尝试猜测该语言的特点,并将其记录下来,比如: ·该语言与哪些编程语言相似,相似点是什么? ·该语言的不同之处在哪,哪些特点超乎了你的想象. ·该语言主要用来干什么呢? 如果条件允许,你可以寻找身边同在学习该门编程语言的朋友,互相交流,或许会有更清

如何学习一门编程语言?给编程初学者的几个建议

如何学习一门编程语言?给PHP初学者的几个建议: 编程和任何新的技术一样,很难知道从何处开始.这里有些步骤适合初学编程语言的人:从“拖拽”编程开始.Python作为入门的语言.JavaScript是非常有用的语言之一.试试Ruby和Ruby on Rails.熟悉HTML. 在美国,计算机科学是一个蓬勃发展的行业,并且它的薪资待遇是极好的.对于顶尖的.有才华的工程师需求从没间断过,这就是为什么学习代码看起来是一个有吸引力的选择. 但是和任何新的技术一样,很难知道从何处开始.这里有一些你应该在早期

国人创造中文编程语言的优势

原址: https://zhuanlan.zhihu.com/p/31162122 源自: 吴烜:为什么国内创造不出很棒的编程语言? 在上面的回答中, 阐述了国人创造英文编程语言以及推广的难度. 归纳如下: 母语为中文的编程语言设计者在创造英文编程语言时, 相对母语为英文的语言设计者, 在语法设计上没有明显优势 现有英文编程语言在硬功能上已经覆盖了主要的应用领域, 这也是很多人说创造新(中文)语言没有必要的一个原因 在性能和语言特性上进行竞争不是不可能, 但即使首创了很有吸引力的特性, 也很可能

如何学好一门编程语言?

其实现在市面上的编程语言多如牛毛,常见的有CPP.Java.C.Python.PHP.R.Matlab.GO等一系列的编程语言,当然还有我们工作中天天要用到的Linux操作系统,那么,问题来了,面对这么多的编程语言,我们先学哪个呢?从何处入手?如何学?报班学还是自学? 在我看来,无论是学哪个,报班学还是自学,首先要清楚明白一点,数量级要达到,如果达不到数量级,学什么都是白学的.为什么人家是个牛人,自己却还是个小白?差距就在于数量级的冠军级训练. 何为冠军级的数量级训练?就是正常人学习一门课程是1

若问今年最火的一门编程语言是什么?答案一定是Python。

这把火已经烧到了程序员的圈子外,从小学生到职场老司机,都开始学习这一门新的语言,门槛低.零基础.操作骚...再也没有什么能阻挡Python晋升网红. 有人用Python从各大视频网站下视频,有人成功用Python跳一跳跳到4999,有人用Python撩妹子,还有人设计了一套代码自动抢红包... 俗话说外行看热闹,内行看门道,我们已经知道了python的火热情况,但是学一门编程语言是需要花大量精力的,所以我们最关心的还是 我有必要去学吗? 这门编程语言适合我吗? 我应该怎么学? 对于看到这篇文章的

怎样才算会一门编程语言(如果你已经会了一门语言, 并且想一直会这门语言, 请在工作持续使用。如果没有机会使用, 自己给自己创造机会)

今天, 同事问我会不会Python, 我犹豫了一下:不会. 实际上我曾经学习过这个语言,当时还用它写了些小工具, 可现在我对这个语言的印象只剩下它那特殊的缩进格式了. 由此思考怎样才算会一门语言?我想每个程序员都接触过多门语言 , 那么究竟怎样才算会这门语言了呢? 会一门语言, 当需要它时, 应该能很快用该语言解决某个问题, 这个是最基本的. 如果深入一点, 真正会一门语言, 我觉得需要满足以下几点: a. 有超过一年的实践经验 b. 理解语言背后的机制, 最好阅读过该语言标准库的部分源码 c.

从无到有用Python创造一门属于自己的编程语言1

前言 如果你会编译原理,对其中的词法分析算法,语法分析算法足够了解,那么用什么语言来做这样的一件事情都是可以的,之所以使用Python只是因为本人会的编程语言中, Python的使用时间最长,也最得心应手.所谓性能什么的不在本文的考虑范围内, 本文主要重点是语法分析的表达式的解析,语法解析使用的是普拉特分析法,一种自顶向下的语法解析方法. 文章目录如下: 四则运算的问题 词法分析 语法分析与解释执行 参考链接 这有什么用 后记 源代码 四则运算的问题 怎么解决让代码算出以下解决结果?(假设问题代