似乎在过去20年中出现的大多数新的编程语言都是用C编写的。这是完全有意义的,因为C可以被看作是一种可移植的汇编语言。但我好奇的是,这是否以任何方式限制了语言的设计。促使我提出问题的是,如何在Python中直接使用C堆栈调用函数。显然,编程语言设计者可以用他们想要的任何语言做任何他们想做的事情,但在我看来,你选择用来编写新语言的语言会让你处于某种心态中,并给你提供了一些很难忽视的捷径。这些语言的其他特征是否来自于用该语言编写的语言(好的或坏的)?
发布于 2010-08-18 15:39:28
即使使用C实现,您在实现方面也是出人意料的自由。例如,chicken scheme使用C作为中间语言,但仍然设法在其垃圾收集器中使用堆栈作为托儿所生成。
也就是说,在某些情况下会有一些限制。举个例子: GHC haskell编译器有一个名为Evil Mangler的perl脚本,用来修改GCC输出的汇编代码,从而实现一些重要的优化。他们已经转向内部生成的程序集和LLVM,部分原因就是这个原因。也就是说,这并没有限制语言设计--只是编译器对可用优化的选择。
发布于 2010-08-18 15:40:21
我倾向于不同意。
我不认为一种语言的编译器或解释器是用C实现的--毕竟,你可以用C实现一个完全不同于它的宿主环境的虚拟机,这意味着你可以摆脱C/准汇编语言的思维模式。
然而,更难断言C语言本身对后来语言的设计没有任何影响。例如,使用大括号{ }
将语句分组到块中,空格和缩进几乎不重要的概念,本机类型的名称(int
,char
等)。和其他关键字,或如何定义变量的方式(即,先声明类型,然后是变量的名称,可选的初始化)。当今许多流行且广泛使用的语言(C++、Java、C#,我相信还有更多)都与C语言共享这些概念。(这些概念在C语言中可能并不是全新的,但AFAIK C提出了这种特定的语言语法组合。)
发布于 2010-08-18 15:36:31
不,简而言之。现实情况是,看看周围用C编写的语言,例如,Lua与C语言的距离是最远的,而不是成为Perl。它具有一流的功能,完全自动化的内存管理等。
新的语言受到其实现语言的影响是不寻常的,除非该语言包含严重的限制。虽然我绝对不赞成C,但它并不是一种有限的语言,只是与更现代的语言相比,它非常容易出错,编程速度也很慢。哦,除了在CRT里。例如,Lua不包含目录功能,因为它不是CRT的一部分,所以他们不能在标准C中实现它,这是C限制的一种方式。但就语言功能而言,它并不受限制。
如果你想提出一个论点,说用C实现的语言有XYZ限制或特征,你就必须证明用另一种方法做事情在C中是不可能的。
https://stackoverflow.com/questions/3513780
复制