**
前言:
**
快节奏的生活容易让人忘记留意身边的风景,当你意识到这一点的时候,就应该学会把时间放慢,生活重要的还是过程,因此我打算把我曾经的所见所闻,道听途说记录于此,希望这是一件令我感到开心的事情
**
开始:
**
眼前的事物无论现在怎样都不是一蹴而就的,发展是个过程,所以我打算记录下我学习 语言 的过程:
语言 于我而言就是用来沟通交流的一种方式和方法,当你想要与某个对象产生互动的时候,用什么语言不是很重要,重要的是怎么做能让对方按照你的想法去做;所以,得有一些规则或者套路去做一些约束,毕竟 语言 作为 人类 和 机器 之间的中间件,于人类而言,过于繁琐难以记忆会引起人的反感,于机器而言太复杂不能顺利识别就会失去作为语言的主要功效。那么对于 语言 我们需要了解哪些东西呢?
首先,计算机语言如何分类?
- 机器语言 (二进制代码,是唯一能让机器懂并运行的语言,好像除了“传说中的微软某员工”就没谁能直接读懂二进制代码了吧?)
- 汇编语言 (面向机器的语言,人类需要对不同 处理器 研究相对应的语言语法和选择相对应的 汇编程序 才能与机器沟通)
- 高级程序设计语言 (面向人类的语言,把与机器沟通的重任交给编译工具去做)
基本上现在市面上流行的 Java,python,c++,,,等等都指的是高级程序设计语言,而它们都要经历 高级程序设计语言 转 汇编语言 再转 机器语言 的过程
先说一下各个语言的特点:
机器语言:执行指令迅速,因为机器只懂机器语言(机器语言就是二进制的0和1,为什么是二进制?这个问题就比较玄学,一句话,道生一,一生二,二生三,三生万物;那么对于二进制这种简单的信号而言,无疑用电是目前最快的,所以,,,你懂的)但是,光快是不够的,二进制代码是特别不符合人类理解习惯的,为了做一次 加法 就得背下来16位 0,1 数字连顺序还不能错,而且不同的计算机对应的代码还不一样,这可就要人命了,换台机器就得重新背一种指令,而且机器只能直接执行几种指令(如:算术运算、按位逻辑运算和数的大小比较运算等)稍微复杂一点的指令就得需要把这个复杂指令分解,最后分解成上述的那几种运算,这个过程要是没人出错那真是人才,所以后来就需要把这种语言给做得抽象一些,以便于人类可以记忆使用;由此我们可以理解为什么最初代的计算机需要输入一个个带孔的纸卡片,这些纸卡片就是一个个0,1代码
汇编语言:在机器语言的基础之上做了个“包装”,机器需要有个过程去把 汇编语言 给转换成二进制代码,而人类可以看着汇编语言大概了解到这句话在干什么,但是,由于计算机的处理器不是全世界都一模一样的,根据需要也是要有 指令集 的区别的,毕竟不能拿纯计算的机器去打游戏嘛,所以汇编语言也是严重依赖于机器的,不一样处理器的机器需要不一样的汇编语言去做一个 汇编 的过程以用来转换成机器可执行的二进制代码
高级程序设计语言:由于前两种语言比较严重依赖于机器,所以人们就想偷个懒,能不能再做一层“包装”,好让人把更多的时间和精力放在要实现的事情上,而不是纠结机器能不能懂得人类的操作,由此,高级程序设计语言诞生了;高级语言远离机器语言,与具体的计算机硬件关系不大,可移植性好,重用率高;由于把繁杂琐碎的事务交给了编译程序去做,所以自动化程度高,开发周期短,且程序员得到解脱,可以集中时间和精力去从事对于他们来说更为重要的创造性劳动,以提高程序的质量。
如果你是个好奇宝宝,特别想知道,这三种语言具体的转换过程,或者只是想见识一下,参考一下下面链接:
https://www.zhihu.com/questio...
https://blog.csdn.net/yingxun...
下面主要讨论高级程序设计语言的分类,因为前两个基本很少有人用到,除非是专门干那一行的,,,
- 按照 高级程序设计语言 转换成 机器语言 的转换方式可以分为:
编译型语言:编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。执行编译语言翻译出来的程序可以不需要 源代码
解释型语言:解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。
现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。执行 解释型语言翻译出来的程序需要 源代码
脚本语言是一种解释性的语言,脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。脚本语言一般都 有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本语言的分支,两者也有实质上的相同之处。脚本语言一般都是以文本形式存在,类似于一种命令。
举个例子:
解释性语言:Java、JavaScript、Perl、Python、Ruby、MATLAB 等。
编译性语言: C/C++、Pascal/Object Pascal(Delphi)
脚本语言:Python、JavaScript,ASP,PHP,Perl等
- 按照客观系统的描述可分为两类:
1.面向过程语言:面向过程语言是以过程或函数为基础的,这种语言对底层硬件,内存等操作比较方便,但是写代码和调试维护等会很麻烦。例如:c语言
2.面向对象语言:面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分。
面向对象语言的发展有两个方向:一种是纯面向对象语言,如Smalltalk、EIFFEL等;另一种是混合型面向对象语言,即在过程式语言及其它语言中加入类、继承等成分,如C++、Objective-C等
- 按照编程范型可分为:
1.命令式语言:命令式程序设计语言是基于动作的语言,以冯诺依曼计算机体系结构为背景。机器语言及汇编语言是最早的命令式语言。在这种语言中,计算机被看做是动作的序列,程序就是用语言提供的操作命令书写的一个操作序列。用命令式程序设计语言编写程序,就是描述解题过程中每一步的过程,程序的运行过程就是问题的求解过程,因此也称为过程式语言。Fortran、ALGOL、COBOL、C、Ada、Pascal等都是命令式程序设计语言。
2.函数式语言:函数式编程是种编程典范,它将电脑运算视为函数的计算。函数编程语言最重要的基础是 λ 演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里,函数的计算可随时调用。这种语言的语义基础是基于数学函数概念的值映射的λ算子可计算模型。这种语言非常适合于进行人工智能等工作的计算。典型的函数式语言如 Lisp、Haskell、ML、Scheme 、F#等。
3.逻辑式语言:这种语言的语义基础是基于一组已知规则的形式逻辑系统。这种语言主要用在专家系统的实现中。最著名的逻辑式语言是 Prolog。
4.面向对象语言:现代语言中的大多数都提供面向对象的支持,但有些语言是直接建立在面向对象基本模型上的,语言的语法形式的语义就是基本对象操作。主要的纯面向对象语言是 Smalltalk。
计算机科学是个概念很多的学科,我们难以做到面面俱到,但是该有的基础还是要有的,上述内容应该足以应付生活,所以点到为止;
学习的过程是有趣的:从”昨夜西风凋敝树,独上高楼,望尽天涯路“ 到 ”衣带渐宽终不悔,为伊消得人憔悴“ 再到 ”蓦然回首,那人却在灯火阑珊处“,想要 顿悟 就要多实践,多接触,当然,站在巨人的肩膀上才能看的更高,更远,所以还要多搜索,多积累,因此,这一篇内容就是在复述他人的积累,并且点到为止;想要更多的了解:参考图书:《编译原理》《计算机原理》《计算机史话》等等
从下一篇内容开始就要慢慢加大写代码的比重,进而加入一些更多的思考和个人见解
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。