Sti*_*tix 8 c algorithm data-structures
这可能听起来很幼稚,但是在给定足够的代码的情况下,是否存在无法用C构造的任何数据结构/算法?我理解图灵完成的论点.我也知道拥有一个优雅的解决方案是有益的,时间复杂性很重要(即在Ruby/Java/C#/ Haskell/Lisp中实现时更具表现力或简洁性).我研究或使用的所有语言似乎都已创建或随后重构为基于C的编译器,解释器和/或虚拟机.一些复杂的数据结构是否只能通过解释器和/或虚拟机实现?如果该虚拟机或解释器是基于C的,那么这不仅仅是底层C代码的另一个数据结构抽象吗?即C具有简单类型系统,但作为动态类型系统的基础.我很惊讶地发现元编程似乎可以在C中使用预处理器(ioccc.org Immanuel Herrmann).我也看到了一些模仿Erlang并发模型的有趣的C算法,但不记得源代码.
启发这个问题的是StackOverflow帖子(鲜为人知的有用数据结构)和Patrick Dussud对channel9的采访(垃圾收集 - 过去,现在和将来) - 解释他们如何编写第一个CLR垃圾收集器(用Lisp编写,目标是JVM) ,从Lisp编译为C++用于CLR).
所以,在一天结束时,在我完成打卡之后,我想知道这个问题是否可能更多是关于C编程语言设计而不是编程的方便性和时间复杂性.例如,我可以在Prolog中实现一个非常优雅且非常难以理解的任何其他方式的高度复杂的算法,但我仍然受到组装指令和计算机体系结构(开/关)的限制.棒,所以我整晚都在这里.
Nik*_* B. 15
Shor在O((log n)^3)多项式时间内对整数进行分解的算法无法在C中实现,因为它可以运行的计算机尚未正式存在.也许有一天会有一个量子电路完整版的C,我将不得不修改我的答案.
开玩笑说,我认为没有人能给你一个满意的答案.我将尝试涵盖一些方面:
任何图灵完备的机器或语言都可以实现任何其他图灵完备语言,这意味着如果没有其他方法,它可以通过解释实现任何其他图灵完整语言的任何程序.所以你问的问题是不正确的; 问题不在于任务是否可以完成,而是你必须努力完成任务.
C特别是作为"高级汇编语言"起作用,因为它可以让你逃避更多近期语言所不具备的东西,从而可能允许更强大的检查更难以实现的解决方案语言.
这并不意味着C是所有这些目的的最佳语言.它迫使你在内存管理,边界检查和面向对象等许多方面更加注重细节(你可以在C中编写OO代码,但你必须从头开始实现它).您必须为可能构建到其他语言中的内容显式加载和调用库.C数据类型可以令人难以置信地复杂化(尽管typedef和宏可以隐藏大部分复杂性).等等.
任何特定任务的最佳工具是(a)你是或可以变得舒适的工具; (b)这非常适合手头的任务,(c)你有空.