啥,我也可以创造一门新的编程语言?!

一、演化

     是的,因为混沌之初是没有任何编程语言的,所有已有的编程语言如Java\C#\PHP\C\C++,都是前人创造出来的,明白这一点,我们就可以得出标题,我们可以创造属于自己的编程语言,那我们如何实现呢?
      我们从编程语言的由来,慢慢梳理出怎么去创造。
      首先,我们可以知道,最初,由0,1来界定有无电流,再用与、或、非门来控制哪些电路能有电流通过,然后通过不同的电路实现实现不同的功能(如一条电路实现灯的开关,一条电路实现门的开关),从而实现用0,1=》控制有无电流=》某条电路是否有电来运行,当一个系统非常庞大,有很多很多的电路时,就出现了字节,用一串数字,每一位的数字都代表了某一条电路是否有电(这叫标志位),字节的长度,含义是由专门的协会根据使用场景和现实能力来定义的,比如:
      1.往往字节的第一位为符号位,是因为显示中有正负之分,同时也因为我们用二进制来控制的电路,所以也出现了一些‘bug’,如正0和负0都表示0,按整数来说只有负数、正数、0。
      2.基本类型所占字节数,即用来表示电流有无的位数,是固定的,如果出现一个很大/很小的数,现有的编程语言都无法直接表示出来,只能通过字符串等变通手段,这也是源于早期制定的规则,从而后面的编程语言都是在这些规则下制定的,所以越高级的语言往往这种弊端就越多(就如屎山也是一步步形成的)
所以早期计算机先辈们局限的选择和制定出必然有缺陷的规则,留下了一些弊端,从这也可以明白世界真的是一个巨大的草台班子,没有绝对完美的规则和完美的代码,没有崩,只是因为没有到规则的极限。

       到此,我们了解了字节和一些底层原理,然后怎么出现编程语言的呢?因为随着硬件的发展,可以做出的系统,也变得越来越大,这个时候是不可能再用简单的业务逻辑能实现的了,简单的业务逻辑可以通过指定人去固定的操作,当人足够多,配合足够默契时,可以完成(如三体写的三体世界通过人来做逻辑电路一样),但是这样不能满足时代的发展(超高运算、超复杂业务逻辑),加上只要一个机器有电,则它下层机器就可以根据传输的有无电流判断,来执行操作,根据这个原理,可以用机器控制机器,因而出现机器码来到了汇编语言,又因为汇编语言的记忆复杂,诞生了低级语言(如C),但低级语言是面向过程的控制逻辑,而世界是由一个个对象组成的,因而诞生了高级语言,用于更好的定义现实世界的事物(语言越往低处走,越接近机器,机器效率越高,越往高处走,越接近现实世界,机器执行效率越低,但越接近人类语言)。

为什么没有讲其中的语法、语义、词法等,因为他们只是在现实需求不断变大,制定规则的人让编程语言更加规范,便于人和机器更好理解业务逻辑的产物,不是必须的,如果你想创建一套你自己看的懂的语言,也可以完全按照你自己定义的语法、语义、词法去写,甚至,你可以不规定这些,直接用机器码去写。
     好,到了这里我们已经理清楚了编程语言的演变,现在开始说,怎么去创造一门新的语言。
       第一,想要创造一门新的语言(高级语言),必然是要借助其他语言的来创造的,这里用C举例,我如果要创造一门语言x,首先明白:一种语言最初用另一种语言编写,然后可以用自己编写自己的原因在于编程语言的编写和发展过程。(这个过程叫自举)
       第二,如何自举的?
   从C编写了X语言,我们就可以用X语言去写功能代码了,只是写好的功能代码要先经过编译成C这个目标代码,再由C编程成机器码,再由机器识别。
   创建一门新的编程语言并使其能够自举是一个相当复杂的过程,需要仔细考虑多个方面。下面是一些开发者可能会考虑的关键方面:

  选择合适的基础语言:最初,新语言的编译器可能会使用现有的成熟编程语言(如 C、C++、Python 等)编写。选择一个稳定、功能丰富且性能良好的基础语言是至关重要的。

设计语言的语法和语义:开发者需要仔细设计新语言的语法和语义规范,确保它易于理解、使用和学习。这包括定义关键字、操作符、数据类型、语句结构等。

编写编译器和工具链:开发者需要编写新语言的编译器和相关工具,包括词法分析器、语法分析器、语义分析器、代码生成器等。这些工具负责将源代码翻译成目标代码或者解释执行。

   选择合适的编译器技术:根据语言的特点和目标平台,开发者可能选择不同的编译器技术,如解释执行、静态编译、即时编译等。

实现语言的核心库和运行时环境:除了编译器和工具链,还需要实现新语言的核心库和运行时环境,包括标准库、内置函数、垃圾回收器等。

测试和调试:开发者需要对编译器和工具进行充分的测试和调试,确保其功能正确、稳定性好、性能优秀。

    逐步改进和优化:一旦初始版本完成,开发者需要不断收集用户反馈,改进语言的设计和实现,并进行性能优化和功能增强。

在考虑如何实现自举时,开发者通常会使用以下策略:

使用部分自举:在开始阶段,可以使用其他更成熟的语言来编写初始版本的编译器和工具链。然后,逐步改进和重写这些工具,直到它们能够使用新语言编写自己。

引入交叉编译器:开发者可以先实现一个能够将新语言编译成目标语言的交叉编译器,然后使用交叉编译器来编译新语言的编译器和工具链。

利用现有工具和库:在开发自举过程中,可以利用现有的工具和库来简化开发过程,如使用 Lex 和 Yacc 来生成词法分析器和语法分析器。

总的来说,实现自举是一个复杂而挑战性的任务,需要开发者具备深厚的编程语言和编译器知识,并且需要耐心和持续的努力。

  

二、具体实现

    哈哈,上面的看着很头大吧?实际代码理解就很简单了,我们这里使用Java来实现:

再上一点点概念:

自举”(bootstrapping),它是一种通过使用已有的工具来构建新的工具的方法。在编程语言的背景下,自举是指使用交叉编译器(一个编译器,它能够将源代码编译成另一种不同于本身的目标语言的编译器)来构建一个新语言的编译器。

详细一点说就是:

  1. 初始阶段:使用 C 编写 X 语言的编译器

    • 在初始阶段,X 语言的编译器是使用 C 语言编写的。这个编译器负责将 X 语言的源代码转换为等价的 C 语言代码。
  2. 过渡阶段:使用 X 语言编写 X 语言的编译器

    • 通过使用初始阶段生成的 C 语言代码,开发者可以使用 X 语言本身来编写 X 语言的编译器。这意味着开发者不再依赖于 C 语言,而是使用 X 语言的语法和功能来构建编译器。
    • 这个过渡阶段将逐步消除对 C 语言的依赖,使 X 语言的编译器完全由 X 语言本身构建。
  3. 最终阶段:直接编译为底层的机器码

    • 一旦 X 语言的编译器完全由 X 语言本身构建,并且达到了稳定和成熟的状态,开发者可以直接将 X 语言的源代码编译为底层的机器码,而不再需要中间步骤转换为 C 语言。
    • 这意味着 X 语言的编译器将直接将 X 语言的源代码转换为目标平台的机器码,而不需要借助其他语言。

总的来说,这个过程是一种渐进的自举过程,它逐步消除了对其他语言的依赖,使 X 语言能够自举并且直接生成底层的机器码。这种方法可以使 X 语言更加独立和灵活,提高其性能和效率。

      代码演示(利用Java的接口、实现来具象化):

// 定义编译器接口
interface LanguageCompiler {
    void compile(String sourceCode);
}

// 实现编译器接口的 C 编译器类
class CCompiler implements LanguageCompiler {
    @Override
    public void compile(String sourceCode) {
        // 将源代码编译为 C 语言代码的实现
        System.out.println("Compiling source code to C code...");
    }
}

// X 语言编译器类,使用 C 编译器来编译自己的源代码
class XCompiler implements LanguageCompiler {
    private LanguageCompiler cCompiler;

    // 使用构造函数注入 C 编译器对象
    public XCompiler(LanguageCompiler cCompiler) {
        this.cCompiler = cCompiler;
    }

    @Override
    public void compile(String sourceCode) {
        // 使用 C 编译器编译 X 语言源代码
        cCompiler.compile(sourceCode);
        // X 编译器的其他编译逻辑
        System.out.println("Compiling source code to X code...");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建 C 编译器对象
        LanguageCompiler cCompiler = new CCompiler();
        // 使用 C 编译器来编译 X 语言的编译器
        LanguageCompiler xCompiler = new XCompiler(cCompiler);
        // 编译 X 语言的编译器源代码
        xCompiler.compile("X language source code");
    }
}

CCompiler 类实现了 LanguageCompiler 接口,用于编译某种编程语言的源代码为 C 语言代码。然后,XCompiler 类也实现了 LanguageCompiler 接口,它在编译 X 语言源代码时,利用了 CCompiler 对象来编译中间代码,然后执行自己的编译逻辑。

这里模范的是前期需要转成C来实现X语言写的功能逻辑。

   下面写:

为了模拟这个过程,我们将确保在 X 语言编译器的实现中不再使用 C 编译器,而是直接使用 X 语言本身来完成编译器的功能。这样,X 语言编译器就可以完全独立于 C 语言。

   Java 代码示例:

// 定义编译器接口
interface LanguageCompiler {
    void compile(String sourceCode);
}

// X 语言编译器类,直接使用 X 语言来实现编译器功能
class XCompiler implements LanguageCompiler {
    @Override
    public void compile(String sourceCode) {
        // X 语言编译器的编译逻辑,不再依赖于 C 编译器
        System.out.println("Compiling source code to X code...");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建 X 语言编译器对象
        LanguageCompiler xCompiler = new XCompiler();
        // 编译 X 语言的源代码
        xCompiler.compile("X language source code");
    }
}

在这个示例中,XCompiler 类实现了 LanguageCompiler 接口,并且直接使用 X 语言本身来完成编译器的功能,而不再依赖于 C 编译器或者其他外部工具。这样,X 语言编译器就完全独立于 C 语言,实现了自举的过渡阶段。

到此自举完成,也就完成了完全自己的编程语言,脱离C之后的代码,具体的语义、词法涉及的更细节,点赞、收藏过1000,手撕一份自己的编程语言源码出来!

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
语言一门以中文作为程序代码编程语言,其以“易”著称,创始人为吴涛。易语言早期版本的名字为E语言。其最早的版本的发布可追溯至2000年9月11日。创造语言的初衷是进行用中文来编写程序的实践,方便中国人以中国人的思维编写程序,并不用再去学习西方思维。易语言的诞生极大的降低了编程的门槛和学习的难度。从2000年以来,易语言已经发展到一定的规模,功能上、用户数量上都十分可观。诞生背景 中国计算机应用的发展在经过操作系统汉化显示环境,中文输入法的两次较大跨越后,正经历一个重要的历史时期:中文化编程已成为当务之急。   英文编程软件只能使用英文输入程序代码,并且需要用户掌握大 易语言认证与推广照片 易语言认证与推广照片(17张) 量专业英文术语。   而且国人的述事习惯与外国人的语法习惯还有很大区别,如外国人表示"按从小到大顺序排",而中国人的表达方式为:"按从大到小方式顺序排"或简称"按降序排"。外国人的语法大多数是与中国人不同的,再加上英文有多种语态,有时间动词,有不同的复数形式,这在中国人学习外语上都不能很好的适应。更何况英文编程中大多数用大写缩写的方法表示一个概念、定义和变量,因此如果不了解的人是无从知道,而中文几个字即可简单表示了。中文具有比较明确的归类表达方式,如公交车、小汽车、自行车、吉普车均是行走的车辆,都与车有关,而英语每个事物都有一个不同的名词,不容易记忆,如BUS公交车,CAR小汽车,BIKE自行车,JEEP吉普车。因此这种方式如果套用到编程上,那么每个变量均用不同的代表,那样要记忆的词汇量就非常巨大了,有个对比,中国人只要掌握3000个字就能读名著,而外国人必须掌握30000个以上单词才能看明白报纸。因此小的记忆量可以适合在编程中只考虑方法,而不必过多地考虑语法、变量的名称等。而且由于中文是方块字,包含的信息量也大,能够见文知义。 通过以上,东西方文化的差异造成对编程学习上的很大区别,中文文化背景决定了中国人还是学自己的编程语言好。 [1] 市场推广 2004年易语言获得《科技查报告》,《科技项目鉴定测试报告》 培训推广图册 培训推广图册(20张) ,《科技项目技术经济评议书》的认可。“易语言汉语编程环境”成功通过国家鉴定,易语言获2004年《大连市科学技术进步奖》二等奖。 2004年易语言正式走上讲台“吉林市计算机专业骨干教师培训班”,2004年7月11日至17日,在吉林市教育局的大力支持下,应吉林市教育学院职教部的邀请,易语言公司培训教师史世恒老师前往吉林,做为期七天的“吉林市计算机专业骨干教师培训班”教学活动。这是易语言与中等专业教育学校的首次合作,同时也为易语言走进教育事业迈向了可喜的一步! 2004 年7月28日-31日易语言参加软交会,大连大有吴涛易语言软件开发有限公司参加中国国际软件和信息服务交易会,展台位置在大连星海会展中心东22号门旁边,届时易语言将携简体中文版、繁体中文版、英文版、日文版向全世界展示! 2005年3月出版发行《易语言编程系统》由易语言公司组织、易语言教材编委会编写。本书按易语言4.0编写。 2005年4月21日中国教育学会中小学信息技术教育专业委员会和各专家领导参与的易语言在中小学项目的推介与申报项目会议在北京招开。 2005年8月3日,“易语言汉语编程环境”国家火炬计划证书已颁发,国家科学技术部火炬高技术产业开发中心颁发“易语言汉语编程环境”国家火炬计划证书。5月由该公司申报的“易语言汉语编程环境”项目已被立项。 2005年8月22日至2005年8月26日全国中小学计算机教育研究中心北京部主持易语言全国首次高级培训会,大连大有吴涛软件开发有限公司承办的易语言全国首次培训会在大连举行。 2005年12月26日,易语言在中小学实验与推广项目教师培训在美丽的 易语言在宁夏和云南 易语言在宁夏和云南(17张) 株洲隆重开题。 2005年易语言在中小学实验与推广项目已全面启动, 由中国教育学会中小学信息技术教育专业委员会(北京,普教系统)组织,易语言公司提供技术支持的"易语言在中小学实验与推广项目"已全面启动。 2006年1月10日-15日在浙江省首次举行中小学骨干教师开题培训。绍兴市中小学信息技术教育中心、绍兴县教师发展中心、绍兴柯桥中学承办了本次培训工作。 2006年由宁夏教育厅教研室和山东教育出版社编写的《初中信息技术·第3册下》已出版发行,全文讲解了易语言的程序设计方法。本教材已在宁夏的所有初中学校中使用。 2006年9月1日易语言公司参加南京软博会。公司随大连展团为期四天,参加在南京市举办的第2届中国(南京)国际软件产品博览会。 2006年10月26日-31日云南省易语言开题培训会召开。全国中小学计算机教育研究中心“易语言在中小学实验与推广项目”在云南省首次举行中小学以及职业高中骨干教师培训。 2006年12月14日,“易语言”项目培训工作在宁夏大学教育科学学院网络实验机房顺利举行。 2007年3月28日-4月1日1“易语言在中小学实验与推广项目”在大连市开题培训,全国中小学计算机教育研究中心“易语言在中小学实验与推广项目”于,在大连教育学院举行首次初中骨干教师培训。 十大自主创产品奖 十大自主创产品奖 2007年6月21日,中国软件自主创论坛暨中国软件自主创排行榜颁奖典礼在大连举行。“易语言汉语编程环境”获2007中国”十大自主创软件产品奖。大连大有吴涛易语言软件开发有限公司的“易语言汉语编程环境”以软件自主开了一款全中文、全可视、跨平台的编程语言,在易语言及其编译器的设计与实现、可视化汉语编程的构建、提供多种语言版本等方面具有创,在技术上居于国内领先地位,达到了当前同类产品的国际先进水平的原因被评为中国 “十大自主创软件产品奖”。 2008年6月易语言第一部系统的视频学习教程《易语言百集教程》由世恒老师完成并发布。 2010年12月3日易语言运行时环境通过计算机病毒防治产品检验中心的安全检验,检验依据为:GA243-2000《计算机病毒防治产品评级准则》,检测结果:均未发现病毒。 [2] 语言组成编辑 支持库 易语言支持库类似于普通的程序的DLL文件。 这个支持库是易语言专用的,别的程序调用不了的,扩展名有fnr、fne、npk三种。 fnr、fne都是制作好的DLL文件,例如系统核心支持库、应用接口支持库。该类支持库一般由用户使用C++或Delphi制作,具体可以看易语言支持库开发手册。 npk属于易语言COM包装支持库,该支持库是引用COM包装库生成的,例如WebBrowser、Windows媒体播放器。该扩展名格式支持库可用记事本、写字板打开。该支持库可以由用户制作,制作方法:在易语言上点击工具--“类型库或OCX组件→支持库”命令。 模块
PERL语言编程Perl 是一种能完成任务的语言。 当然,如果你的工作就是写程序,那么从理论上来讲,你可以使用任何“完整”的计算机语言来完成任务。但是从我们的经验来看,计算机语言的区别很大程度上不在它能干什么,而是在它做事情的时候是否简单。从一个极端来说,那些所谓的第四代语言做某些事情的时候相当容易,但是做其它一些事情的时候几乎不可能。从另外一个极端来看,那些所谓的工业级的语言在做任何事情的时候都几乎一样困难。 Perl 是不同的语言。从一开始,Perl 就设计成可以把简单工作简单化,同时又不失去处理困难问题能力的语言。 那什么是“简单工作”呢?当然就是那些你每天都要干的。你需要一种可以很容易操作数字,文本,文件和目录,计算机和网络,特别是程序的语言。这种语言应该很容易运行外部的程序并且扫描这些程序的输出获取感兴趣的东西。而且它还应该很容易能把这些你感兴趣的东西交给其它程序做特殊的处理。当然,这种语言还应该很容易在任何现代的操作系统上可以移植地编译和运行。 Perl 做到了上述所有需求,甚至更多。 Perl 最初是当做一种 Unix 的胶水语言设计的,但是她早就移植到大多数其它操作系统里了。因为 Perl 几乎可以在任何地方运行,所以 Perl 可以说是当今最具有移植性的编程环境。要想写可移植的 C/C++ 程序,你得在程序里加上一大堆 #ifdef 标签来区分不同的系统。要想写可移植的 Java 程序,你必须理解每种Java 实现的特质。要想写可移植的 shell,你可能要记住每条命令在每种操作系统上的语法,走运的时候你可能可以找到一些公共的东西。而要想写可移植的 Visual Basic 程序,那么你只需要对“移植”有个更灵活的定义就可以了。 我们很高兴的是 Perl 避免了所有这些问题,同时还保留了这些语言中的许多优点,同时还有一些自己的特色。Perl 的特色来自许多方面:它的特性集的工具,Perl 社区的创造性,以及开源运动的大环境。不过,许多这些特性都是混合的东西;Perl 的身世复杂,它总是把事物看成是优点的不同方面,而不是弱点。Perl 是“背黑锅我来”的语言。如果你觉得自己陷入一团乱麻之中,非常渴望自由,那么请使用 Perl。 Perl 是跨文化的。Perl 的爆炸性增长很大程度上是因为那些前 Unix 系统程序员的渴望,他们希望从他们的“老家”带着尽可能多的东西。对于他们而言,Perl 是可移植的 Unix 文化蒸馏器,是"此路不通"的沙漠中的绿洲。从另外一个角度来看,Perl 还可以从另外一个方向运转:在 Windows 上工作的 web 设计者通常会非常开心地发现他们的 Perl 程序可以不加修改地在 Unix 服务器上跑。 尽管 Perl 在系统程序员和 web 设计师中间非常流行,但这只是因为是他们最早发现 Perl 的,Perl 可以用于更广泛的用途。从 Perl 最早的文本处理语言开始,它已经发展成为一种非常复杂的,通用的编程语言,以及完整的开发环境,包括调试器,调节器,交叉引用,编译器,库,语法提示编辑器,以及所有其它“真正”的编程语言所具有的所有挂勾,只要你需要。当然这些东西都是让我们可能处理难的问题的东西,而且很多其它语言也可以做到这一点。Perl 之所以成为 Perl 是因为它从来不会因为保持简单事情简单化而丢失其他方面的特性。 因为 Perl 既强大又好用,所以它被广泛地用于日常生活的方方面面,从宇航工程到分子生物学,从数学到语言学,从图形处理到文档处理,从数据库操作到网络管理。很多人用 Perl 进行快速处理那些很难分析或转换的大批量数据,不管你是处理 DNA 序列,网页,还是猪肚皮的未来都无所谓。实际上,在 Perl 社区有一个笑话就是,下次股市大崩盘就很有可能是呢个家伙写的脚本里头有臭虫造成的。(不过,乐观点来看就是,任何还在失业的股票分析师仍然有可以利用的技巧。) Perl 的成功有许多原因。Perl 早在开源软件的名字出现之前就已经是一个成功的开源项目了。Perl 是自由的,并将永远自由下去。你可以在任何合适的场合使用 Perl,只需要遵守一个非常自由的版权就可以了。如果你在从事商业活动并且还想使用 Perl,那么用就是了。你可以把 Perl 嵌入到你写的商业软件中而不需要支付任何费用也没有任何限制。如果你碰上一个 Perl 社区解决不了的问题,那你也还有最后的一招:源程序本身。 Perl 社区不会在“升级”的伪装下租给你它们的商业秘密。而且 P
《教孩子学编程 Python语言版》是一本针对儿童和初学者编写的编程教材。该书以Python作为编程语言,旨在通过简单易懂的方式教授编程的基础知识和技能。 首先,这本书的编写风格非常适合儿童和初学者。它使用简明的语言,配以清晰的示例和练习,帮助读者更好地理解编程的概念。对于没有编程经验的孩子来说,这种易于理解的教材十分重要。 其次,该书以Python作为编程语言,这是一门非常受欢迎的编程语言。Python以其简单易学、可读性强以及丰富的库而著称。对初学者来说,使用Python编程可以更容易地理解和实践编程概念。这本教材使用Python作为教学语言,为孩子们提供了一个轻松愉快的入门体验。 此外,《教孩子学编程 Python语言版》注重实践,通过大量的练习和项目帮助读者巩固所学知识。这样的实践方式有助于孩子们将理论知识转化为实际能力,培养他们的解决问题和创造力。 最后,这本书的内容涵盖了编程的基础知识和技能,包括变量、条件语句、循环、函数等。这些基础知识是编程的核心概念,掌握它们对于接下来学习其他编程语言或进一步探索编程领域非常重要。 总的来说,《教孩子学编程 Python语言版》是一本非常适合儿童和初学者的编程教材。它通过简单易懂的语言、使用流行的编程语言Python以及注重实践的方法,帮助孩子们理解编程概念,培养解决问题和创造力的能力,为他们未来探索编程世界打下基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值