每种编程语言都有自己的词汇,真的很烦人。例如,在Java中我们有
if ... {}
但是在Bash脚本中我们有
if ... then ... fi # using "fi" is so insane for me
如果所有编程语言共享相同的词汇表,那将是非常好的。然后语言设计者可以定义底层语义。我想知道是否有任何尝试建立这样的词汇?
答案 0 :(得分:5)
不,出于同样的原因,所有人类语言都没有相同的词汇:词汇和语义服务于特定的利基需求。希伯来语有超过20个词来描述收获(每种水果,谷物和蔬菜都是一个独特的词!);阿拉伯语有几十只骆驼,依此类推。
计算机语言非常相似。 bash
强调一些功能(例如短命令,立即执行os命令),而Java强调其他功能(例如清除对象层次结构)。这些强调是使用不同的语义和词汇来实现的。
有人可能会争辩说,可以有一个自动翻译器,它可以从一种语言中获取一个程序并将其翻译成另一种语言。虽然理论上可以(对于所有turing-complete languages),但由于一种语言中命令的含义与另一种语言中的含义之间的细微差别,它可能非常繁琐。例如,if
关键字的含义在上述语言之间可能略有不同,尤其是在出现错误和意外输入的情况下。
修改强> 评论之后:我选择了另一个例子,因为看起来因纽特人的语言并不完全有数百个词来形容雪,只有很多形容词。
答案 1 :(得分:2)
很高兴他们所有人(或大多数人)都使用拉丁字母,与人类语言不同。 ;)
答案 2 :(得分:2)
嗯,IBM有一个产品Visual Age Generator,它有一个共同语言,然后被“编译”到从UNIX下的C到大型机上的COBOL的所有内容。我认为它现在已经停止服务,可能还有其他一些尝试不会立即浮现在脑海中。
然而,具有不同语义的全部意义在于语言 不同,否则就没有理由选择Java而不是COBOL或Ruby over BCPL。
fi
是辉煌的主意。为每个构造使用不同的结束词可以大大简化解析器并允许更大的错误检查。换句话说,if
有fi
,case
有esac
。我不喜欢的唯一事情是do
使用done
而不是od
: - )
答案 3 :(得分:0)
即使在像if语句这样的简单情况下也不可行。 例如,某些语言可以使用“语句条件”条款,这些条款在bash中可能不可行。 然后考虑范式特定的语义(类,函数,谓词......)它比词汇更深入。
答案 4 :(得分:0)
有许多语言采用了'C'(C ++,C#,Java,Javascript,Verilog等)的约定。我不知道任何正式趋同的任何努力。
如果你看一下语言设计/标准化过程陷入困境的那种微小的东西,我认为整个行业的同质化工作的努力都不会太多。
似乎现代语言由富有思想的聪明人群组成,试图尽可能多地借用他们的遗产。并非所有语言都是这样创建的,但是......
答案 5 :(得分:0)
不,但你可以用任何语言创建一个'Hello World'应用程序。