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

标签 c programming-languages stackless compiler-construction

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

最佳答案

我倾向于不同意。

我不认为语言的编译器或解释器是用 C 实现的——毕竟,你可以用 C 实现一个完全不同于其主机环境的虚拟机,这意味着你可以 摆脱 C/接近汇编语言的心态。

但是,更难说 C 语言本身对后来的语言设计没有任何影响。例如,使用大括号 { } 将语句分组到 block 中,空格和缩进大多不重要的概念,原生类型的名称 (int, char 等)和其他关键字,或定义变量的方式(即首先进行类型声明,然后是变量的名称,可选的初始化)。许多当今流行和广泛传播的语言(C++、Java、C#,我相信还有更多)与 C 共享这些概念。(这些可能不是 C 的全新概念,但 AFAIK C 提出了语言语法的特殊组合。)

关于c - 使用 C 来实现其他语言是否以任何方式限制了它们的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3513780/

相关文章:

c - 按顺序合并(交错)两个排序的数组(但合并后不排序)

python - Stackless Python 中的 Tasklets 本地存储

python - stack-less Python的微线程在游戏状态机实现上比Lua的协程有什么优势?

erlang - 哪些编程语言支持热代码交换和/或沙箱处理?

c - C 中指针算术的意外结果

c - 从线程传递数组

c - 使用递归反转单词

programming-languages - 为什么PL/我没有在科学计算中做到这一点?

c# - Java 比 C# 有什么优势吗?

c# - AutoResetEvent 重置方法