1. 文档
编程语言 - 强弱/动静态类型
C语言 - 介绍_william_n的博客-CSDN博客
C语言这么厉害,它自身又是用什么语言写的?_码农翻身-CSDN博客
编程语言的发展史 - KAMNA - 博客园
机器语言与汇编语言_Sucker For Pain-CSDN博客_机器语言和汇编语言
汇编语言和机器语言是一一对应的吗?
计算机和编程语言的发展历史
计算机组成原理-王道考研系列
汇编语言从0开始 到C语言 - 网易云课堂
04 | 编程语言的进化-极客时间
2. 整理输出 编程语言层出不穷, 如果想弄清楚这到底是怎样的一回儿事儿, 就必须要将其发展的历史理清楚. 这里要插入一段话,--- 因为为了避免你总想学很多的编程语言
Alan Perlis(ACM第一任主席,图灵奖得主,1922-1990)曾经说过:“如果一门语言不能影响你对编程的想法,那它就不值得去学”。另一种观点是,有时候你不得不学一点C++(更可能是javascript和Flash Flex之类)的皮毛,因为你需要接触现有的工具,用来完成特定的任务。但此时你不是在学习如何编程,你是在学习如何完成任务。
2.1 简述
计算机语言的发展经历了面向机器的机器语言 和 汇编语言, 面向问题的高级语言.
其中高级语言的发展真正促进了软件的发展, 它经历了从科学计算和工程计算的FORTRAN, 结构化程序设计PARSCAL 到 面向对象的C++和适应网络环境的Java.
2.2 软件分类
软件按照其功能分类可以分为 系统软件 和 应用软件
系统软件
一组保证计算机高效, 正确运行的基础软件, 通常作为系统资源提供给用户使用.
主要有操作系统(OS), 数据库管理系统(DBMS), 语言处理程序, 分布式软件系统, 网络软件系统,标准库程序, 服务型程序等.
应用软件
指用户为解决某个应用领域中的各类问题而编制的程序。
如各类科学计算类程序, 工程设计类程序, 数据统计与处理程序等. -- 绝大数程序员都是做这类的的软件
2.3 编程语言发展的三个阶段
第一代语言: 机器语言
又称为二进制语言, 需要编程人员[好像那时候还不叫程序员]记忆每一条指令的二进制编码, 机器语言是计算机唯一可以直接识别和执行的语言. --- 现在也是,未来还是
第二代语言: 汇编语言
汇编语言用英文单词或缩写代替二进制的指令代码, 更容易人们记忆和理解, 汇编语言的程序必须经历过一个称为汇编程序的系统软件的翻译, 将其转换为计算机的机器语言后, 才能在计算机的硬件系统上执行.
第三代语言: 高级语言
高级语言(如, C, C++, Java等) 更多地是为了方便程序设计人员写存储解决问题的处理方案和解题过程的程序. 通常高级语言需要经过编译成汇编语言程序, 然后经过汇编操作得到机器语言程序, 或者直接由高级语言程序翻译成机器语言程序.
Note
C语言之前还有A,B语言,更多细节请自行搜索
另外查看
04 | 编程语言的进化-极客时间
2.4 分类
机器语言 汇编语言 高级语言 , 介绍见上面
额外补充:
04 | 编程语言的进化-极客时间
从语言的执行器的行为看,出现了这样三种分类的语言。编译的目标文件为可执行程序。典型代表是 Fortran、C/C++、Go 等。
生成跨平台的虚拟机字节码,有独立的执行器(虚拟机)执行字节码 。典型代表为 Java、Erlang 等。
直接解释执行。典型代表是 JavaScript。当然现在纯解释执行的语言已经不多。大多数语言也只是看起来直接执行,内部还是会有基于字节码的虚拟机以提升性能。
2.5 编译器
机器语言是计算机唯一可以直接识别和执行的语言, 所以如汇编语言和高级语言都是需要一个直接或者间接转换为机器语言的过程, 这个过程由一个工具负责, 就是编译器[针对编译型语言而言], 解释性语言则另外一种执行方式. 见下方:
翻译程序, 汇编程序, 编译程序, 解释程序的区别和联系?
翻译程序是指把高级语言源程序翻译成机器语言程序(目标代码)的软件.
翻译程序有两种, 一种是编译程序, 它将高级语言源程序一次全部翻译为目标程序, 每次执行程序时, 只要执行目标程序, 因此, 只要源程序不变, 就无须重新编译, 请注意同一种高级语言在不同体系结构下, 编成的目标程序是不一样的, 目标程序与体系结构相关, 但仍不是计算机硬件能够执行的程序.
另外一种是解释程序, 它将源程序的一条语句翻译成对应的机器目标代码, 并立即执行, 然后翻译下一条源程序语句并执行, 直至所有源程序语句全部被翻译完并执行完. 所以解释程序的执行过程是翻译一句执行一句, 并且不会生成目标程序.
由于解释程序要边翻译边执行, 故而执行速度相比于编译程序较慢.
为增加对该过程的理解, 附C语言编译连接过程:
源程序(.c)-----c编译器--->汇编源程序----汇编程序---->目标程序----链接程序--->可执行程序[即传说中的二进制可执行文件]
汇编程序也是一种语言翻译程序, 它把汇编语言源程序翻译为机器语言程序. 汇编语言是一种面向机器的低级语言, 是机器语言的符号表示, 与机器语言一一对应.
编译程序与汇编程序的区别: 如果源语言是诸如C, C++, Java等"高级语言", 而目标语言是诸如汇编语言或机器语言之类的"低级语言", 这样的一个翻译过程称为编译程序. 如果源语言是汇编语言, 而目标语言是机器语言, 这样的一个翻译程序称为汇编程序.
2.6 编译器演进
我们知道在最开始的时候, 是没有所谓编译器的, 先从机器语言说起,看看怎么办。
首先, 我们知道, 机器语言可以直接被CPU执行,不需要编译器。可是机器语言不便于记忆, 所以出现了汇编语言[机器语言的助记符]
汇编语言也需要编译成机器语言才能执行,没办法只能用机器语言来写这第一个编译器了(以后就不用了)
汇编语言的问题解决了,就往前迈进了一大步,这时候就可以用汇编语言去写C语言的编译器,我们说这是C编译器的老祖宗。
有了这个老祖宗,就可以编译任意的C语言程序了,那是不是可以用C语言本身写一个编译器?只要用老祖宗编译一下就可以了。
OK, 这么一层层上来,终于得到了一个用C语言写的编译器, 真是够麻烦的。
到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。 // 暂未想明白?怕是要到<<编译原理>>中解惑, 关键点在于: 编译器也要经过编译成二进制,才能发挥编译作用。【已经想明白了, C编译器的老祖宗的可执行代码是二进制, C语言写的编译器的可执行代码也是二进制,其中关键点就是程序分为两部分:src 源代码,与dest 目标程序, 前者是高级语言编写的源代码,后者经过上一个编译器编译后的新的编译程序, 然后重复这个过程,理论是可无止境地创造编程语言,在任何一层,当然除了机器语言~】
当然,如果在C语言之前,已经出现了别的高级语言,例如 Pascal,那就可以用Pascal来写一个C语言的编译器。
第一个Pascal的编译器据说是使用Fortran写的。而做为第一个高级语言的Fortran [刚刚搜索了下,似乎还有一些人在使用],它的编译器应该是汇编语言写的。
可能有人问:我用汇编写一段Hello World都很麻烦,居然有人可以用它写复杂的编译器?这可能吗?
当然可能,在开发第一代Unix的时候,连C语言都没有, Ken Thompson 和 Dennis Ritchie 可是用汇编一行行把Unix敲出来的。
WPS第一版是求伯君用汇编写出来的, Turbo Pascal 的编译器也是Anders 用汇编写出来的,大神们的能力不是普通人能想象得到的。
对于编译器来说,还可以采用“滚雪球”的方式来开发:
还是以C语言为例,第一个版本可以先选择C语言的一个子集,例如只支持基本的数据类型,流程控制语句,函数调用......[应该说是新的高级语言最基础的模块,能够支持未来该语言的所有高级特性,如如果不能支持,可能就要在最初版的子集使用汇编再追加] 我们把这个子集称为C0。
然后用汇编语言写个编译器,只搞定这个语言的子集C0,这样写起来就容易不少。
C0这个语言可以工作了,然后我们扩展这个子集,例如添加struct,指针...... ,把新的语言称为C1。
那C1这个语言的编译器由谁来写?自然是C0。
等到C1可以工作了,再次扩展语言特性,用C1写编译器,得到C2。
然后是C3, C4...... 最后得到完整的C语言。
这个过程被称为bootstraping , 中文叫做自举。
插入
常见语言的易用性, 性能, 以及流行度见下表,
圆圈大小代表流行度
问题:
Go语言能否替代php做互联网网站开发?
在整体易用性、流行度方面Go和PHP还完全不是一个层次。
PHP如日中天,但有缓慢衰减之势。而Go还只是新兴的小众语言
![](https://img-blog.csdnimg.cn/20200415131845802.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpbGxpYW1fbg==,size_16,color_FFFFFF,t_70)
补充
下面对比各种语言之间的区别,可以认真阅读
![](https://img-blog.csdnimg.cn/20211008154007514.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA56m_57Sg55m96KGr55qE5bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
2.7 编程语言发展趋势
不好说,但是未来应该会出现或者说已经出现了更加高级的语言, 更高层次的封装抽象, 以模块为单位, 更加简单. 但是底层的东西还是始终不能丢弃. 因为这是根基, 根基的重要性不言而喻. // 个人认为
2023118 周六 2.8 各语言优缺点对比(学习成本) ![](https://img-blog.csdnimg.cn/99bfcc6ffc4b42aaad10c521922693e1.png) 后续补充 ... |