通常情况下,人类的语言是一种对现实世界认知的描述并用于相互沟通。而编程语言套用了“语言”一词,可这真的是语言吗?
我们来看一个例子:在人类的语言中:“马车”先出现,“汽车”后出现。“拉”这个动词应该比马车出现得更早一些。100年前我们可以说:“马车拉马车”,现在我们能说:“马车拉汽车”,但这个表达如果要用计算机语言来实现,你会发现,计算机语言在表达能力上是如此的糟糕。因为“拉”这个动作在设计时,根本不会知道今后能用于拉汽车。
也许马车和汽车都从车这个类继承,再搞个“拉”的接口这些基于OO的想法也许能接近这个表达,但是这个表达仍是如此的无力,因为马车还能拉别的东西,这这个东西与马车的父类是两回事。
问题在哪呢?
从语法来看,动词“拉”是一个致命伤,这对操作系统或用户开发的系统来说“拉”是一个具体API或函数(也可能是一个抽象方法或接口),但它总是确定的(有参数,有类型)。但在人类的语言中,语言和实现是完全分离的。
能否有一种标准的通用语言呢?它不基于任何操作系统,但操作系统能识别它,就像HTML, 也可像某些动态语言,执行时才确定。
但同时,我们至少知道,大部分所谓的编程语言,并不是我们真正意义上的语言,而是一种基于具体系统API的表达。
其它:
1、“马车拉马车”或“马车拉汽车”我想表达的是A故障了,B来拉它。许不是很好的例子。
2、不能具体化,就无法编译,计算机也不知道如何执行。这也许是一个说法,我不想深入所谓强类型或弱类型语言的讨论中,我想表达的是:中立标准语言对程序员来说具有莫大的价值,因为它的学习成本最低。而动态语言具有更灵活的表达。