编程语言简介

木木!

2019-01-12 15:14:54

Tech. & Eng.

OIer从入门开始,使用的只有C++语言,最多听说过Pascal,可能以为编程只存在于OI了。殊不知,这是坐井观天的行为,井外还有一整个大千世界。了解、学习一下其余编程语言,对于提升OIer的个人素养无疑是极有好处的。

注:可能带有个人观点或列举不全,欢迎补充和纠正

编程语言的分类

此处依据语言范式分类。语言范式,即语言的计算模型,是区别各语言的一个重要的特征。另外还有领域专用语言-通用语言等的区分,留给OIer课后了解。

命令式

包括C++、C、Pascal、Java等

命令式程序明显的有“命令”的特征,即其程序由一行行指令构成,电脑按次序执行这一行行指令。

命令式可进一步细分为面向对象和面向过程,可以自行了解。

函数式

包括Haskell等

函数式语言最明显的特征是其没有副作用(即没有赋值语句与变量),这导致了其程序有高度的可并行性。函数式语言的工作原理为“映射”,通过函数将输入数据映射成输出数据。

函数式语言的工作方式较反人类,这导致了其较难推广和在工程上大规模使用。

纯函数式语言似乎只有Haskell,其余均为多范式语言,这体现了函数式语言的小众。

声明式

包括SQL、Prolog等

该语言最显著的特征是高度专业性。语言通过描述解的特征来给出解,类似于描述蛋糕的外观,产生制作蛋糕的程序。这导致该语言只能在一个特定的领域工作,例如SQL在数据库领域,Prolog在逻辑推理领域。

SQL已在工业中广泛运用。

多范式

包括F#、Scala、Lisp系等。

该语言支持多种编程范式,可以说是结合了多种范式的优点。大多数语言是综合了命令式和函数式,有助于程序员一边用着命令式一边尝试其函数式特性。C++在面向对象的传播中起到了类似作用。

此处“跨范式”不包括面向对象-面向过程的区分,因此C++不算在内。

学术界编程语言

学术语言

这类语言的学术价值较高,经常在学术界作研究项目存在。

学术界语言

即“学术界的工程语言”的简称,在学术界被广泛应用,用于数据处理和计算等。

教学编程语言

用于教学的语言,大多是OIer所熟悉的

工程界编程语言

在工程界被使用的语言。

Web

Web,即网页编程。包括洛谷、百度等。一些语言仅列举名称。

图1:

Java生态环境

能运行在Java虚拟机上的语言。由于Sun公司的宣传,Java在工程界的地位现在还几乎无人能撼。

微软生态环境(.NET)

微软家的语言,大多基于.NET环境、

苹果生态环境

在苹果操作系统(Os)开发中使用的环境。

硬件编程语言

用作底层编程,在单片机或者操作系统编程中使用。

其他

其他比较有名的编程语言

搞怪语言

即不为实际使用而创造的语言,有些十分有名。仅列举一部分。

对于OIer

如果是要搞好竞赛,仅仅掌握C++就好了。但是,正如前言所说,学习几门新语言,对于开拓视野,提升个人素养,改善代码风格,最终成为大佬,泡到妹子,是有极大助益的。

Common Lisp

作为Lisp家的方言,Common Lisp语法简洁,并且带有浓厚的函数式味道,对于OIer个人素养的提升有巨大作用。

有人说编程语言的发展就是从抽象层次低的语言发展成抽象层次高的语言,那么,我认为Lisp系语言就是未来的编程语言。Lisp系语言抽象层次极高,这体现在其极高的开发效率、简洁的语法和极少的代码量上面。有人做过统计,完成同一个任务,Lisp语言的代码量约是C语言的1/7。

对于Lisp语言的优点,可以看这篇文章。

学习了基础Common Lisp之后,建议阅读SICP(《计算机程序的构造和解释》),然后就能放下了(或者刷点L99)。【不像人家Haskell,初学者都不知道什么时候放下

环境:推荐Emacs+Slime+SBCL。Emacs建议设置主题,其余插件都不是必需品。环境配置有些麻烦,预计需要一天时间。

参考书目:

练习题:

写在最后

我们可以看到,国外的谷歌、微软、苹果三大IT公司均有其设计、开发和维护的编程语言,如Google就设计了GO语言(并将其开源)。然而,国内的BAT却迟迟没有新语言发布的消息。实际上,几乎没有国产编程语言被大规模的用于工程、学术界(易语言除外)。这究竟是为什么呢?这是个值得深思的问题。