似乎在过去20年中出现的大多数新编程语言都是用C语言编写的。这完全有道理,因为C语言可以看作是便携式汇编语言。但我感到好奇的是,这是否会以某种方式限制语言的设计。引发我的问题是想到Python直接使用C堆栈来调用函数。显然,编程语言设计师可以在任何语言中做任何想做的事情,但对我而言,选择用哪种语言编写新语言会让你进入某种思维模式,并给你某些难以忽视的快捷方式。这些语言是否还有其他特征源于用该语言编写(好或坏)?
似乎在过去20年中出现的大多数新编程语言都是用C语言编写的。这完全有道理,因为C语言可以看作是便携式汇编语言。但我感到好奇的是,这是否会以某种方式限制语言的设计。引发我的问题是想到Python直接使用C堆栈来调用函数。显然,编程语言设计师可以在任何语言中做任何想做的事情,但对我而言,选择用哪种语言编写新语言会让你进入某种思维模式,并给你某些难以忽视的快捷方式。这些语言是否还有其他特征源于用该语言编写(好或坏)?
我有不同的看法。
我认为,一个语言的编译器或解释器是否是用C实现并不是最重要的。毕竟,你可以使用C实现一个虚拟机,它与其主机环境完全不同,这意味着你可以摆脱C / 接近汇编语言的思维方式。
然而,更难以否认的是,C语言本身对后来的语言设计产生了影响。例如,使用花括号{ }
将语句分组成块、空白和缩进大多不重要的概念、本地类型的名称(int
、char
等)和其他关键字,或者变量定义的方式(即类型声明先于变量名称,可选初始化)。今天许多流行的、广泛使用的语言(如C++、Java、C#等)都与C共享这些概念。(这些概念可能在C之前并不是全新的,但据我所知,C提出了这种特定的语言语法组合。)
我能想到的一件事是,函数在语言中不一定是一等成员,这不能仅仅归咎于C语言(我不是在谈论传递函数指针,尽管可以说C语言提供了这个功能)。
如果用groovy(/scheme/lisp/haskell/lua/javascript/还有一些我不确定的语言)编写DSL,函数可以成为一等成员。使函数成为一等成员并允许使用匿名函数可以编写简洁且更易读的代码(就像LINQ所演示的那样)。
是的,最终所有这些都在C语言(或者如果你想达到那个级别,汇编语言)下运行,但是从提供语言用户更好地表达自己的能力方面来看,这些抽象化做得非常出色。