大多数程序语言的基础几乎相同。
他们提供:
- 标量数据类型:通常为布尔值,整数,浮点数和字符
- 复合数据类型:数组(字符串是特殊情况)和结构
- 基本代码构造:标量上的算术,数组/结构访问,赋值
- 简单的控制结构:if-then,if-then-else,while,for循环
- 代码块包:函数,带参数的过程
- 范围:标识符具有特定含义的区域
如果您了解这一点,那么您将掌握地球上90%的语言。使这些语言稍微难于理解的原因是人们用来说相同的基本事物的奇数语法令人难以置信。有些人使用涉及奇数标点的简洁表示法(APL是极端的)。有些使用很多关键字(COBOL是一个很好的代表)。没关系。重要的是,该语言本身是否足够完整,可以执行复杂的任务,而又不会导致头发脱落。(尝试在Window DOS shell脚本中对一些严重的字符串黑客进行编码:它具有Turing功能,但在所有方面确实很糟糕)。
更多有趣的程序语言提供
- 嵌套或词法范围,名称空间
- 指针允许一个实体通过动态存储分配引用另一个实体
- 相关代码的打包:包,带有方法的对象,特征
- 更复杂的控制:递归,延续,闭包
- 专门的运算符:字符串和数组运算,数学函数
虽然从技术上讲,语言不是语言的财产,但这些语言所居住的生态系统的财产却是可以轻松访问或随语言一起作为开发工具的一部分提供的库。拥有广泛的库功能可以简化/加快编写应用程序的过程,这仅仅是因为不必重新发明库的功能。尽管人们普遍认为Java和C#本身就是好的语言,但使它们真正有用的是它们附带的巨大库以及易于获得的扩展库。
难以理解的语言是非过程语言:
- 纯函数式语言,没有赋值或副作用
- 逻辑语言,例如Prolog,在其中进行符号计算和统一
- 模式匹配语言,您可以在其中指定与问题匹配的形状,并且动作通常由匹配触发
- 约束语言,可让您指定关系并自动求解方程式
- 硬件描述语言,其中所有内容并行执行
- 特定领域的语言,例如SQL,彩色Petri网等。
语言有两种主要的表示样式:
- 基于文本,其中标识符名称实体和信息流被隐式编码在使用标识符命名实体的公式中(Java,APL等)
- 图形化,其中实体被绘制为节点,实体之间的关系被绘制为这些节点之间的显式弧(UML,Simulink,LabView)
图形语言通常允许文本子语言作为节点和弧上的注释。奥德(Odder)图形语言递归地允许在节点和弧上显示图形(带有文本:)。真正奇怪的图形语言允许注释图指向要注释的图。
这些语言中的大多数都基于极少数的计算模型:
- Lambda演算(Lisp和所有功能语言的基础)
- 发布系统(或字符串/树/图形重写技术)
- 图灵机(状态修改和新存储单元的选择)
鉴于大多数行业都将重点放在过程语言和复杂的控制结构上,如果您很好地学习了该类别中一种更有趣的语言,尤其是如果它包含某种类型的面向对象的语言,您将得到很好的服务。
我强烈建议您学习Scheme,尤其是从一本非常出色的书:
《计算机程序的结构和解释》中。这描述了所有这些基本概念。如果您了解这些知识,那么其他语言似乎将非常简单,除了愚蠢的语法。