如果编程语言也是用编程语言编写的,那么第一种编程语言是如何编写的? 您所在的位置:网站首页 第一款编程语言 如果编程语言也是用编程语言编写的,那么第一种编程语言是如何编写的?

如果编程语言也是用编程语言编写的,那么第一种编程语言是如何编写的?

2022-05-24 05:55| 来源: 网络整理| 查看: 265

        所有代码最终都成为“机器语言”。这是一系列指令,使用正在运行的硬件的处理器和系统的本机代码编写。在过去,在“编程语言”的概念之前,人们使用汇编程序进行编程,这使机器语言编码更易于理解和方便,但最终仍然是编写机器指令,它非常繁琐且劳动强度大。

    这是它的样子:

汇编指令

       而最初在(1940 年代和 1950 年代)大部分都是手动操作。早期的工程师实际上是翻转面板上的开关或将电缆插入开关电路。后来他们使用穿孔卡片,卡片上的孔代表开或关(1或0)的二进制状态。最初没有鼠标、键盘甚至屏幕(可能在早期的实现中可能是示波器类型的屏幕),可能会被打印或显示在手动读出或卡片设备上。

      随着时间的推移,他们想出了使用这些设备并进一步构建和设计其他输入设备、键盘、鼠标,和显示器、打印机等输出设备的想法等等,最终才拥有了我们今天所认为的“现代计算机”。

 让我们看一下大约在 1945 年左右用于破译代码的早期“计算机”,称为 Colossus Mark 2:

 Colossus Mark 2计算机

       很手动。没有真正的屏幕。只需使用电缆和旋钮、开关以及可能读取数据的纸带进行输入,甚至只是使用与最终计算对齐的一系列旋钮“打印”结果(与算盘不同)。

       这是带有 IBM 533 穿孔卡系统的 IBM 650 大型机(穿孔卡组在右侧 - 650 操作员控制台在左侧)。

    这是大约 1956 年:

1956年IBM 650 早期大型机

      这种也好不了多少,而且仍然非常手动,没有真正的屏幕或任何类似于我们今天所说的计算机的东西。

     但是在内部它有了很多进步,可以加载打孔卡程序,运行速度更快,更好的指令集等等……还可以添加一个 IBM 653 存储单元,该存储单元增加了磁存储器,60 个 10 位字的磁芯存储器,3个4位索引寄存器,浮点运算精度。指令集更高级,并且具有汇编语言后来具有的基本助记符功能。

     如果我们移动到大约 1968 年,我们会看到类似 HP 9100 的东西:

HP 9100

    哈哈,这开始看起来像一台电脑了。从技术上讲,出于营销原因,它被称为第一款科学计算器,但它基本上是第一款桌面“计算机”。它有一个纸带读数器、一个小屏幕和一个用于输入数据的键盘。这是当时许多首批可编程计算器或个人“台式”计算机之一。

    大约 1971 年,我们有 IBM 360 大型机和控制台:

IBM 360 大型机和控制台

     这开始看起来更像我们认为的计算机。有一个典型的输出监视器和一个典型的输入键盘。鼠标还没有被发明出来。

    到 1981 年,我们拥有 IBM 第一台运行 Intel处理器的官方个人台式电脑:

世界上第一台个人台式电脑

      每一代都建立在前一代的基础上。语言是作为一种编程计算机来做有意义的事情的方式而开发的。它们的起源来自于反复翻转开关以获得所需效果(编程)的艰巨任务。

      话虽如此,我们今天为编程软件所做的打字,或者我现在正在做的事情,只是过去的同一件事的一个极其先进和抽象的版本。我们认为它不那么费力,主要是因为:

     1)今天的输入设备非常流畅、轻便、快速、反应灵敏;

     2)根据我们选择的语言的给定指令,我们可以做更多的事情,检索更多的数据,产生大量的输出(相对于几十年前),这也是原因

     3)今天的计算机比 70 年代最好的计算机快数百万倍。在 1975 年,CPU 可能处理 0.5-1 MIPS(每秒百万条指令)。今天我们有可以做的台式机 300,000 MIPS (3000 亿条指令/秒)。这是 1975 年最好的计算机的 3-6 百万倍!与 1945-50 年的第一台计算机相比,它是 100 倍的数量级。

      是不是脑洞大开,嗯?

      无论如何,随着时间的推移,随着这些新设备的出现和指令集(CPU 可以执行的操作)变得更加先进,工程师创建了与这些指令相关的助记符。

      他们创建了系统,而不是原始操作码,您可以在其中使用更人性化的名称,例如“MOV”(移动寄存器值),而不必记住晦涩的二进制或十六进制值,例如:

      二进制操作码:00001010 00 01 00 00 11

      十六进制操作码:A0 00 01 00 00 03

      相反,你有这样的事情:

MOV 指令助记表

       这是英特尔 8086 处理器的 MOV 指令助记表,它将数据从源位置移动到目标位置。

       因此,随着时间的推移,晶体管技术不断发展,指令集变得更加复杂,创建了输入设备以允许更轻松地编程,以及创建输出设备以轻松查看程序结果,这些助记符用于各种 CPU 操作码和加载寄存器或创建了具有值的内存位置。

      我们还创建了编译器和链接器,允许您使用如上图所示的助记符编写这些程序。这就是汇编程序所做的。它会翻译您输入的内容,这是一个助记码,例如 MOV(根据 CPU 指令集还有许多其他代码),并将其转换为具有二进制源和目标操作数值的适当操作码。这就是为什么我们称汇编程序为“机器”代码的原因,b/c 助记符代码与其等效的二进制指令操作码和操作数之间存在或多或少的一对一映射。

     所有高级语言都只是汇编程序的抽象(即它们是复杂的汇编程序,抽象出您无需编写汇编程序)。您可以以更易读的格式编写代码,编译器最终会将其转换为适当的汇编指令(机器代码)。控制硬件的操作系统,如 Windows 或 Linux,也只是抽象,允许我们以有意义的方式使用设备。而且它们也非常建立在像汇编和 C 这样的低级语言之上。

     它们都建立在上一代的概念之上。这通常被称为“抽象”或引导的一种形式. 最终,创建第一种语言的方式与映射到 CPU 指令操作码的助记码有关。最早的语言就是这样诞生的。其他一切都建立在这些之上,并将这些细节抽象掉。

   具有完整指令集的计算机或 CPU是一种语言。仅二进制语言。

   因此,在上述所有解释和图片之后,简而言之:

计算机或 CPU是一种编程语言。它只知道二进制。二进制实际上只是具有 2 个离散状态的小电信号,用于打开和关闭CPU 中数十亿个晶体管的逻辑门。我们使用 1 和 0 来表示这两种逻辑状态,但它们只是很小的电信号,可以在给定微小电流的情况下打开或关闭门。

选读:这就是为什么我们称晶体管为半导体;硅以足够的电流进行充电。晶体管本质上是使用称为光刻的技术在硅晶片上进行化学蚀刻. 蚀刻创造了今天的数十亿个逻辑门这将构成CPU的指令。最新的 Skylake i7 英特尔在一个硅芯片上拥有大约 50 亿个晶体管150米米2150米米2. 它们是使用FinFET(场效应晶体管)在 14nm 级别创建的. 每个晶体管只有 140 亿分之一米宽。到 2020 年,IBM 和三星将推出 4-5nm 范围的模型商用。单个原子的宽度约为 0.1-.5nm ;) 门是使用布尔代数设计的它定义了逻辑规则和逻辑真值表.

在某些时候,必须为每个 CPU 平台创建一个汇编程序。这本来是一种用纯机器代码创建的简单语言。它的主要工作是创建一种方法来输入编码为助记符的值(即 MOV、ADD、SUB……)并将它们转换为二进制操作码。

使用非常原始和基本功能的汇编程序,您可以创建更好的汇编程序。

有了更好的汇编程序,程序员就可以创建更高级别的抽象(我上面提到的),这些抽象是今天我们的 HLL(高级语言),例如 C、LISP、C++、Perl 等……

最终使用其中许多工具,我们制作了更复杂的语言,例如 .Net、C#、Java(这些语言有一个运行时可以即时编译为机器语言——称为 JIT 即时编译)。

     最后几句话。这一切都是一个又一个抽象的抽象,直到多年后,我们今天达到这样一个程度,即我们很少需要依赖于设备的这种低级接口。除了那些在计算机科学历史和领域受过良好教育的人之外,很多人不会意识到我们是如何走到今天这一步的。如果这个问题来自一个正在思考起源并继续前进的年轻开发人员,我一点也不会感到惊讶,不是吗?



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有