使用C实现其他语言是否以任何方式限制了他们的设计?

gui*_*ism 22 c compiler-construction programming-languages stackless

似乎在过去20年中出现的大多数新编程语言都是用C语言编写的.这完全有道理,因为C可以看作是一种可移植的汇编语言.但我很好奇的是,这是否以任何方式限制了语言的设计.是什么促使我的问题是考虑如何在Python中直接使用C堆栈来调用函数.显然,编程语言设计师可以用他们想要的任何语言做任何他们想做的事情,但在我看来,你选择编写新语言的语言会让你处于某种心态,并给你一些难以忽视的捷径.这些语言的其他特征是否来自于用该语言编写(好的还是坏的)?

sta*_*ica 8

我倾向于不同意.

我不认为语言的编译器或解释器是用C实现的 - 毕竟,你可以实现一个C语言的虚拟机,它完全不同于它的主机环境,这意味着你可以远离C/near-汇编语言心态.

但是,声称C语言本身对后来的语言设计没有任何影响更加困难.就拿大括号的使用{ }将语句成块,概念,即空格和缩进主要是不重要的,本地类型的名称(int,char,等)和其他关键字,或者变量是如何定义的方式(即类型声明第一,后跟变量名,可选初始化).今天许多流行的和广泛传播的语言(C++,Java,C#,我确信还有更多)与C共享这些概念.(这些可能不是C的全新,但AFAIK C提出了这个语言语法的特殊组合.)

  • @rmeador和@DeadMG都是正确的,恕我直言.ALGOL提供了一些主要的语言概念(在C或Pascal等语言中找到),C后来提供了一种流行的语法. (2认同)

Pup*_*ppy 5

不,简而言之.实际情况是,查看用C语言编写的语言.例如,Lua与C语言相差甚远,而不是成为Perl.它具有一流的功能,全自动内存管理等.

新语言受其实现语言的影响是不寻常的,除非所述语言包含严重的限制.虽然我绝对不赞成C,但它不是一种有限的语言,与更现代的语言相比,只是非常容易出错并且编程速度慢.哦,除了在CRT.例如,Lua不包含目录功能,因为它不是CRT的一部分,因此它们无法在标准C中可移植地实现它.这是C受限的一种方式.但就语言特征而言,它并不受限制.

如果你想构造一个论证,说用C语言实现的语言有XYZ限制或特征,你必须表明在C语言中做另一种方式是不可能的.

  • 你"不赞成c"?哇,这看起来很苛刻.虽然我"不喜欢"并且选择不使用Java,但我保留了对鲸鱼狩猎和穿着凉鞋的更令人发指的事情的不满. (6认同)

bdo*_*lan 5

即使使用C实现,您在实现方面的自由度也令人惊讶。例如,小鸡方案使用C作为中间体,但仍设法在其垃圾收集器中将堆栈用作育苗代。

也就是说,在某些情况下存在约束。例子:GHC haskell编译器具有一个称为Evil Mangler的perl脚本,用于更改GCC输出的汇编代码,以实现一些重要的优化。由于这个原因,他们已经部分转向内部生成的程序集和LLVM。也就是说,这并没有限制语言设计-只是编译器选择可用的优化。