C中无法实现哪些数据结构和算法?

What data structures and algorithms are not implementable in C?

这可能是天真的声音,但有任何数据结构/算法的结构,不能在给定的C代码,够了吗?在《人类理解的说法(图灵完备的。也知道在它的有益的两个有一个优雅的解决方案的复杂性,小时(即冰更重要expressive或succinct当implemented在Java红宝石/ / / / C # Lisp语言Haskell)。所有的语言在VC或使用的全researched似乎已经创造了或随后重构为基于C编译器,译员,和/或虚拟机器。是一些复杂的数据结构和interpreter只读implementable和/或虚拟的机器吗?如果你的虚拟机或C型interpreter冰淇淋,那不是只是另一个数据结构的C abstraction标码?即C有一个简单但罐头的AA型系统的基础的动态类型系统。我surprised学习编程似乎可能在使用C预处理器("以马内利ioccc.org Herrmann)。我们也看到在一些intriguing C算法的并发模型,mimic大学一条,但不召回的源码。

什么是这个问题的方式是stackoverflow后(小已知的有用的数据结构)和帕特里克dussud在线访谈channel9(垃圾收集-过去,目前和未来的)写的《如何诠释他们第一CLR垃圾收集器(写在目标JVM的LISP LISP,由从两个C + +的CLR)。

所以,在这一天结束后,我在完成冲卡,我想知道这个问题是我们更多的关于C编程语言的编程设计,便利和时间复杂性。例如,在可以实施的一个高度复杂的算法,这是在Prolog的优雅和很长很难理解expressed的任何其他方式,但是我还是公司的装配指令和计算机体系结构(开/关)比其他的棒,所以我在这里所有的夜晚。


Shor在O((log n)^3)多项式时间中对整数进行因式分解的算法不能用c实现,因为它所能运行的计算机还没有正式存在。也许有一天会有一个完整的量子电路版本的C,我将不得不修改我的答案。

开玩笑吧,我想没人能给你一个满意的答案。我将尝试涵盖以下几个方面:

  • 普通的、标准的C可能无法利用处理器的整个特性集。例如,您不能显式使用最近Intel处理器的TSX功能。当然,您可以使用操作系统原语、内联汇编、语言扩展或第三方库来规避这一点。
  • C本身并不擅长并行/异步/并发/分布式编程。Haskell(也许很快会出现数据并行的Haskell?)就是一些语言的例子,这些语言可能会使这一领域的许多任务变得无限简单。,erlang等等,它们提供非常快速和轻量级的线程/进程和异步I/O。使用C中的绿色线程和严重异步I/O可能不太愉快,尽管我确信可以做到。
  • 最后,在用户级方面,当然,您可以使用任何其他语言来模拟每个图灵完整语言,正如您正确指出的那样。


任何图灵完备的机器或语言都可以实现任何其他图灵完备的语言,这意味着如果没有其他方式,它可以通过解释来实现任何其他图灵完备语言中的程序。所以你要问的问题是形式不正确的;问题不在于任务是否可以完成,而是你必须付出多大的努力才能完成。

特别是,它几乎是一种"高级汇编语言",因为它可以让您摆脱许多新语言所不能做到的事情,从而使解决方案在更严格的检查语言中更难实现。

这并不意味着C语言是所有这些目的的最佳语言。它迫使您在许多方面更加关注细节,从内存管理到边界检查到对象方向(您可以用C编写OO代码,但必须从头开始实现)。对于可能内置到其他语言中的内容,必须显式地加载和调用库。C数据类型可以非常复杂(尽管typedef和宏可以隐藏其中的大部分复杂性)。等等。

对于任何给定的任务,最好的工具是:(a)你是或可以变得舒适的工具;(b)这很适合手头的任务;(c)你可以使用的工具。


看看图灵完整性:图灵完整性

基本上,任何图灵完备的语言都可以执行所有图灵可计算函数。C是一种图灵完备的语言,因此理论上,您可以在C中实现任何已知的可解算法(尽管它可能效率非常低)。