[转]计算机语言的种类总结

  1. 云栖社区>
  2. 博客>
  3. 正文

[转]计算机语言的种类总结

ghost丶桃子 2016-05-20 16:27:10 浏览1528
展开阅读全文

各种不同语言之间的区别,我整理了一篇文章,参考了这两篇:

计算机语言的种类总结

http://www.zxbc.cn/kfyy/0823621.html

动态语言、静态语言 比较

http://hi.baidu.com/kkwtre/blog/item/1402c410dec1cc03203f2e63.html

 

以下内容为前一篇:《计算机语言的种类总结》


计算机语言的种类总结内容导读: 今天来总结一下语言的种类,语言的种类从不同的角度会有不同的划分,比如机器语言、汇编语言、高级语言、低级语言(机器语言及汇编语言)、编译语言、解释型语言、脚本语言、动态语言、静态语言、函数式语言(比如f#及scala)、命令式语言、面向对象语言(比如c++...

今天来总结一下语言的种类,语言的种类从不同的角度会有不同的划分,比如机器语言、汇编语言、高级语言、低级语言(机器语言及汇编语言)、编译语言、解释型语言、脚本语言、动态语言、静态语言、函数式语言(比如f#及scala)、命令式语言、面向对象语言(比如c++及java)、过程式语言、混合型语言(介于编译型语言与解释型语言之间,比如java与c#)等等,语言的种类繁多,五花八门什么都有,真正的全部总结全面不是一件容易的事情,这里我只是起个抛砖引玉的作用,希望对大家有所帮助。

另外关于机器语言、汇编语言及高级语言的资料,我以前写过一篇文章,在这里就不说很详细了。

1.动态语言及静态语言

动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ecmascript(javascript)便是一个动态语言。除此之外如ruby、python等也都属于动态语言,而c、c++等语言则不属于动态语言。

所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断(注意是运行时的类型判断):

defsum(a,b):

returna+b

via:

可以简单的理解为直接被解释执行的语言称为动态语言。而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言。

当前静态语言有:java、c/c++、c#、delphi、vb等。

动态语言有:asp、php、cgi、lisp、perl、python,smalltalk、ruby等。

via:

2.函数式编程语言

f#是微软.net平台上一门新兴的函数式编程(fp,functionalprogramming)语言,作为微软唯一的fp语言,其位置的特殊性引起了很多人的关注,而微软也致力于将f#打造成为.net平台的顶峰语言,我们也期待着f#能够给函数式编程语言带来一次重大革命。

via:

scala是一种基于java的通用编程语言,旨在推广函数式编程,它编译成java字节码,在java虚拟机(jvm)上运行。虽然scala本质上是一个函数式编程语言,但它也体现了面向对象语言的所有必要元素,这一点使函数式编程特性对编程社区的吸引力更大。

f#是由微软主持开发的一个通用编程语言,它是.net通用运行时(clr)的一部分,它是以另一个正统的函数式编程语言ocaml为基础的,微软在.net平台中引入f#除了人们对函数编程的兴趣不断上升外,另一个重要的原因是函数编程非常适合高性能和并行计算。虽然它的语法清晰,但f#实际上混合了函数式编程语言,命令式语言和面向对象语言的语法特性,它的面向对象和命令式特性大部分都与.net平台兼容,f#的三重性质也很实用,它允许程序员使用任意结合这三个编程语言的特性使用。

via:

pyton及ruby也可以进行函数式编程

python函数式编程到底有什么用呢?我想实际的好处就是可以将更好的描述问题本身,而不是描述解决问题的操作步骤。

via:

3.命令式程序设计语言

命令式程序设计语言是基于动作的语言,以冯诺依曼计算机体系结构为背景。机器语言及汇编语言是最早的命令式语言。在这种语言中,计算机被看做是动作的序列,程序就是用语言提供的操作命令书写的一个操作序列。用命令式程序设计语言编写程序,就是描述解题过程中每一步的过程,程序的运行过程就是问题的求解过程,因此也称为过程式语言。fortran、algol、cobol、c、ada、pascal等都是命令式程序设计语言。

via:

4.面向对象语言

面向对象语言(object-orientedlanguage)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分。

面向对象语言借鉴了20世纪50年代的人工智能语言lisp,引入了动态绑定的概念和交互式开发环境的思想;始于20世纪60年代的离散事件模拟语言simula67,引入了类的要领和继承,成形于20世纪70年代的smalltalk。

面向对象语言的发展有两个方向:一种是纯面向对象语言,如smalltalk、eiffel等;另一种是混合型面向对象语言,即在过程式语言及其它语言中加入类、继承等成分,如c++、objective-c等。

面向对象语言刻画客观系统较为自然,便于软件扩充与复用。有四个主要特点:

⑴识认性,系统中的基本构件可识认为一组可识别的离散对象;

(2)类别性,系统具有相同数据结构与行为的所有对象可组成一类;

(3)多态性,对象具有惟一的静态类型和多个可能的动态类型;

(4)继承性,在基本层次关系的不同类中共享数据和操作。

其中,前三者为基础,继承是特色。四者(有时再加上动态绑定)结合使用,体现出面向对象语言的表达能力。

一般认为,较典型的面向对象语言有:

simula67,支持单继承和一定含义的多态和部分动态绑定;

smalltalk支持单继承、多态和动态绑定;

eiffel,支持多继承、多态和动态绑定;

c++,支持多继承、多态和部分动态绑定。

java,支持单继承、多态和部分动态绑定

五种语言涉及概念的含义虽基本相同,但所用术语有别。

基于类的面向对象语言是面向对象世界里的主流。它包括:

simula,第一个面向对象语言

smalltalk,第一个支持动态类型的语言

c++,它的大部分基于类的特性继承自simula.等等等等。

与基于类的语言相对应的是基于对象的面向对象语言。这里“基于对象”的概念和把visualbasic叫做基于对象的概念是不同的。这里的“基于对象”是指一个只以对象为中心,没有类的概念的语言,类似python之类的语言。

via:

5.过程式语言

过程式语言与面向对象语言,到底有什么区别?可能是初学者常碰到的问题。简单来说,过程式语言整个是构建在动词上的语言。比如,最常见的经典过程式语言-c语言,打印一条语句的语法是printf(),这个方法的名字本身就是一个动词,这个动词强调了一个动作的过程,所谓过程式就是这个意思。

同样的方法在面向对象的java中就是这样写:system.out.println();前面说过面向对象语言就是构建在名词基础上的系统,对象就是一个名词。大家都知道对象封装了操作和属性,所以system是一个对象,后面跟上分类在out目录下的方法println。这就是面向对象的写法。

via:

6.解释型语言

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。

翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。

via:

7.脚本语言

1).脚本语言(javascript,vbscript等)介于html和c,c++,java,c#等编程语言之间。

html通常用于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。

2).脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.

3).与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。

注:脚本语言一般都有相应的脚本引擎来解释执行。他们一般需要解释器才能运行。python、javascript,asp,php,perl,nuva都是脚本语言。c/c++编译、链接后,可形成独立执行的exe文件。

4).脚本语言是一种解释性的语言,例如python、vbscript,javascript,installshieldscript,actionscript等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在.

脚本语言不需要编译,可以直接用,由解释器来负责解释。

5).脚本语言一般都是以文本形式存在,类似于一种命令.

举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件.

你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言.

via:

8.编译型语言

编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

这里提一下编译型语言和解释型语言的区别:解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。

via:

9.以另一个角度将程序语言分为5类

1)、webpagescriptlanguages

就是网页代码,比如html、javascript、css、asp、php、xml都应该属于此类(照蔡的意思,html不应该属于anguages的,可能他觉得太简单了吧,不过我觉得html也应该算的,大家爱听谁的就听谁的好了,这个不重要)

2)、interpretedlanguages(解释型语言)

包括perl、python、rebol、ruby等,也常被称作script语言,通常被用于和底下的操作系统沟通。照蔡的意思,每个人至少应该学会一套这类的语言。这类语言的缺点是效率差、源代码外露——所以不适合用来开发软件产品,一般用于网页服务器。

3)、hybridlaguages(混合型语言)

代表是java和c#。介于解释型和编译型之间。蔡认为c#是.net最重要的语言,值得期待其后续发展;至于java,蔡叫看他的《sleeplessinjava》——我倒!

4)、compilinglanguages(编译型语言)

c/c++,java都是编译型语言。蔡说c++很复杂,要成为高手没三五年是不行的(就凭这句话,我决定向java投降),虽然如此,但真正要成为高手的都应该懂c/c++。

关于delphi,蔡说如果想要跨linux和windows平台的语言,则delphi似乎是最好的选择。

5)、assemblylanguages(汇编语言)

汇编语言是最接近于硬件的语言,不过现在几乎没多少人用了。

程序语言学习顺序建议

如果完全没有程序经验,可照这个顺序:javascript——解释型语言——混合型语言——编译型语言——汇编(如果需要的话)

用业界流行一句话做结尾“真正的程序员用c++,聪明的程序员用delphi”,那么,什么样的程序员用java呢?

转载请注明出处:http://www.cnblogs.com/haochuang/ 8年IT工作经验,5年测试技术与管理,2年产品与项目管理,曾参与过云计算\云存储\车联网产品研发工作; 业余自媒体人,有技术类垂直微信公众号;如有招聘或求职方面需求,请Mail to uetest@qq.com ;或通过 QQ:363573922 微博:@念槐聚 联系;

网友评论

登录后评论
0/500
评论
ghost丶桃子
+ 关注