计算机语言总结

为了方便执行各种各样不同的任务,描述不同的数据,先后诞生了成千上万种计算机语言。每种计算机语言都有自己的特点,分类方式有多种,按照不同的分类方式,语言的类型也不同。下面按照最常用的方式对语言分类进行大致介绍。其实这种分类方式并不完全准确,数据和代码并没有明显分界线,所以我就按照使用习惯对它们进行分类。

1、数据描述语言
数据描述语言分为基础数据描述语言以及文本标记语言,它们的界限也并不十分明确。

1.1、基础数据描述语言主要有:regex、css、xml、json、xaml
regex是正则表达式语法,几乎所有的通用编程语言都能使用正则表达式,但让人意外的是不同语言的regex语法不完全一样,有些有细微区别,需要仔细鉴别。另外正则表达式对于数字处理上较弱,另外语法教复杂,对于新手来说非常不友好。
css是样式标记语言的老大,主要存在于网页或视频中,网页文字或图像的样式、电影字幕通常都使用css进行描述,它的儿子们有qss(css的qt移植版)、less(语法比css先进,编译为css后通用)、sass(与less差不多)等等。
xml、json是使用最广泛的基础数据描述语言,可以描述几乎所有的数据类型,它俩语法结构上比较相似,但几乎不成对出现。xml年代较古老,所以基于它的语法变种更多;从语法上讲json更先进,能以更少的空间描述相同的数据量。它俩都有schema,用于保证格式准确。
xaml是xml的一个变种,主要用于描述.NET系列程序界面(WinForm除外的窗口程序)。描述界面的语言特乱,一个框架就是一种界面描述语言,比如.NET、安卓等,所以跨框架迁移是一件非常麻烦的事。

1.2、文本标记语言主要有:html、markdown、Jupyter
这类语言主要用于写文档用。比如一个直观的例子:用Word写的文档总比用TXT写的文档排版要好看吧?这类文本标记语言主要作用就是对文档排版布局进行整理,使文档更可读。
html是xml的一个变种,目前世界上几乎所有的网页前端都是基于html(一些奇葩语言比如chtml例外)。
markdown主要用于写作,写文章时主要需要插入主副标题、分割线、引用符号、列表符号等,markdown的特色语法对这些符号进行简化,以最简单的方式使用这些符号,使用这种语言可以使写文章速度更快。
Jupyter是一种交互式笔记本,诞生于python,主要用于描述输入输出,对于交互式编程语言来说,用Jupyter写的教程更加清晰直观。

2、程序设计语言
程序设计语言按照结构主要分为六大类,每种程序设计语言都能完成不同的功能,对于同一种类型的语言来说,它们相通。也就是说,在学会了C++之后,学java就非常容易了,因为它们都是面向对象语言,只是语法、库的使用方式、环境上有细微区别。

2.1、面向机器编程语言主要有:二进制机器码、assembly
二进制机器码算是最早的编程语言,也是计算机唯一可以运行的语言,除了它之外的所有语言都将会以这种方式运行,不管是native code还是解释型语言。
二进制语言因为特性,程序员很难读懂,所以诞生出一种与二进制机器码一一对应的语言,名叫assembly,也就是汇编语言。汇编语言用处十分广泛,在shellcode编程、hook技术、逆向破解等等领域起着不可或缺的作用。

2.2、面向过程编程语言主要有:c语言、basic、pascal、batch、bash、powershell、vbs
c语言自不必说,世界的核心,诞生自贝尔实验室,可以说,没有c语言,就没有操作系统,没有互联网,没有安卓苹果,也没有谷歌微软。
basic、pascal这两种语言是程序猿向高级编程的语法的大胆的尝试,与c语言类似,但因为语法比较偏,比较啰嗦,不够精简,所以在最后的竞争中没有竞争过c语言。并且后来的衍生语言绝大部分也都基于c语言。
batch、bash分别是windows系统、linux系统的命令行工具,但其中batch语法较为混乱,没有linux的bash强,于是在中后期引入了PowerShell、VBScript来增强系统脚本的空缺。

2.3、面向对象编程语言主要有:smalltalk、c++、java、python、c#
这种类型的语言是最多的,现存于世的流行语言几乎都属于面向对象语言之列,其中又以c++、java、python、c#用的最广泛。smalltalk被认为是世界上第一个完全面向对象的语言,所有面向对象语言大多以它为蓝本进行改进。
不过现在这种分类也不完全正确了。主流的c++、java、python、c#都能进行函数式编程,其中c++还能进行模板元编程,而它恰恰是函数式语法。也就是说,c++的三种主流编程方式中有两种都是面向函数式编程。
面向对象编程的主要概念是,把程序中的万事万物全部抽象为对象,以接近于人类思考的角度来进行编程。从面向对象编程引申出其他编程范式,比如面向切片编程,从某些角度上看比面向对象更为先进。

2.4、面向函数式编程语言主要有:haskell、erlang
两大经典函数式编程语言,这类语言有个最显著的特点是,常量值不可修改,变量值只能修改一次。这就是接近数学家使用的语言,与面向对象编程语言思想完全不同,所以面向对象与面向函数式两派学者也各种争论不断。

2.5、DSL(领域特定语言)主要有:vba
这种语言并且用的比较广泛的还真不好举例,它们的特征是专注于某一个特定领域进行编程开发,但对其他领域无能为力。
vba是微软开发的一种基于Office的宏语言,专门用于对文档、表格或幻灯片进行操作。不过微软最近在考虑使用python来代替vba了,这门语言接近过时的边缘。

2.6、esolang(操蛋编程语言)主要有:BrainFuck、Writespace、草泥马语言(语言各种各样太多,就不全部举例了)
这个翻译可能不太准确,但实在是没有更好的翻译了。这种语言主要作用是为了证明某一个特定的定理,或者纯粹的用来搞笑。
BrainFuck这门语言仅仅用八条指令就实现了turling complete,成为了证明图灵完备的标准的第一语言。
Writespace是一种仅适用空格、制表符、回车实现的一门编程语言,所有可见字符全部为注释符。没有注释的源码在普通人看来就是,,一片空白。
草泥马语言是马勒戈壁滩第一门拥有自主知识产权的编程语言,语法生动丰富,内容健康活泼,是一门老少皆宜,人人适用的编程语言。简单地说,Writespace把空格替换为草,制表符替换为泥,回车替换为马,就是草泥马语言了。整篇代码都是这仨字,可以想象这画风是多么的不忍直视。

2.7、其他语言
我是真不知道该怎样分类了,它们各有特色但都不属于上面的任何一类,索性全部归结于“其他”类,比如prolog、lisp、sql、rust、go、Matlab、Mathematica
prolog:面向逻辑编程语言。目前我所知道的面向逻辑语言就这一个,单独开一个类不太好。这门语言非常先进,程序员只需要告诉计算机实现什么效果,而不需要告诉做什么,让计算机自己去推理。可以说它是天生带有“人工智能”光环的编程语言(非人工智能编程语言)。
lisp:面向语言编程语言,这种语言厉害之处在于,它能实现语法和语义解耦,使得任何语言的语法都可以是它的一个dsl,但语法比较操蛋,有一个黑lisp语法的笑话:一个黑客黑进了美国国防部,费尽千辛万苦终于偷到了一份导弹设计源码的最后一页,它是由lisp编写的,黑客看了一眼源码就吐血而亡,因为源码最后一页全是右括号“)”。虽然语法特别反人类,但同时它也非常先进,和函数式编程语言一样,学会它可能用不上,但它的思想能指导你写出更好的程序。
sql:结构化查询语言,分支众多,不同的数据库使用的都是不同的sql语言,使用sql语言能方便的增删改查数据库中的数据。
rust、go:混合语言。我不太确定叫这名字是否正确,这两者都有面向过程、面向对象、面向函数式的思想,但不完全属于它们中的任何一类,索性叫它们混合语言好了,这类语言是针对现有面向过程语言、面向对象语言以及面向函数式语言缺点发起挑战,尝试使用特定方式解决编程思想的固有缺点。它们并不完美,但它们是伟大的尝试。
matlab、mathematica、octave、r语言:第一个是科学家用的语言,第二个是数学家用的语言,这俩语言巨大无比,各种各样的功能都糅杂在里面,用得到的仅仅是很小很小的部分。这俩语言都收费,卖的还挺贵,所以有了octave这类语言,语法和matlab完全兼容,但完全免费。这类东西科学家接触的多,一般开发很少用到。r语言是一种类似的数据处理语言,相对于前几个更先进,并且完全免费。

发布者

fawdlstty

又一只萌萌哒程序猿~~

《计算机语言总结》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注