【发布时间】:2014-02-19 04:45:04
【问题描述】:
这听起来可能很幼稚,但是如果有足够的代码,是否有任何数据结构/算法无法用 C 构建?我理解图灵完备的论点。我也知道拥有一个优雅的解决方案是有益的,而且时间复杂度很重要(即在 Ruby / Java / C# / Haskell / Lisp 中实现时更具表现力或简洁)。我研究或使用的所有语言似乎都已创建或随后重构为基于 C 的编译器、解释器和/或虚拟机。一些复杂的数据结构是否只能通过解释器和/或虚拟机实现?如果该虚拟机或解释器是基于 C 的,那不就是底层 C 代码的另一种数据结构抽象吗?即 C 有一个简单的类型系统,但作为动态类型系统的基础。我很惊讶使用预处理器 (ioccc.org Immanuel Herrmann) 在 C 中学习元编程似乎是可能的。我还看到了一些有趣的 C 算法,它们模仿 Erlang 的并发模型,但不记得源代码了。
启发这个问题的是 StackOverflow 帖子 (Lesser Known Useful Data Structures) 和 Patrick Dussud 在 channel9 上的采访 (Garbage Collection - Past, Present and Future) - 解释了他们如何编写第一个 CLR 垃圾收集器(用 Lisp 针对 JVM 编写,从 Lisp 编译为 CLR 转换为 C++)。
所以,归根结底,在我打完卡片之后,我想知道这个问题是否可能更多地是关于 C 编程语言设计,而不是编程的便利性和时间复杂度。例如,我可以在 Prolog 中实现一个高度复杂的算法,该算法非常优雅且很难以其他方式表达,但我仍然受到汇编指令和另一端的计算机体系结构(开/关)的限制棍子,所以我会在这里整晚。
【问题讨论】:
-
我认为您的意思是“优雅”而不是“雄辩”。 :)
-
在 C 中可能没有什么是做不到的,但是在很多情况下 vanilla C 是一个糟糕的选择,要么是因为它太原始且编码成本太高,要么是因为它太危险且容易出错。
-
@ooga - 这是一个语音合成应用程序。
-
您说您理解“图灵完备”的含义,然后您问是否存在无法用 C 实现的算法。因此,我不相信您真的理解“图灵完备”的含义.我无法对这个问题做出正面或反面;你到底在问什么?
-
基本上,如果你不能在 C 中做到这一点(问题不是由于需要对机器进行汇编级访问),那么你不能用任何其他语言做到这一点。
标签: c algorithm data-structures