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

 z漫步云端j 发布于 2023-01-30 21:49

这可能听起来很幼稚,但是在给定足够的代码的情况下,是否存在无法用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中实现一个非常优雅且非常难以理解的任何其他方式的高度复杂的算法,但我仍然受到组装指令和计算机体系结构(开/关)的限制.棒,所以我整晚都在这里.

2 个回答
  • 任何图灵完备的机器或语言都可以实现任何其他图灵完备语言,这意味着如果没有其他方法,它可以通过解释实现任何其他图灵完整语言的任何程序.所以你问的问题是不正确的; 问题不在于任务是否可以完成,而是你必须努力完成任务.

    C特别是作为"高级汇编语言"起作用,因为它可以让你逃避更多近期语言所不具备的东西,从而可能允许更强大的检查更难以实现的解决方案语言.

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

    任何特定任务的最佳工具是(a)你是或可以变得舒适的工具; (b)这非常适合手头的任务,(c)你有空.

    2023-01-30 21:55 回答
  • Shor在O((log n)^3)多项式时间内对整数进行分解的算法无法在C中实现,因为它可以运行的计算机尚未正式存在.也许有一天会有一个量子电路完整版的C,我将不得不修改我的答案.

    开玩笑说,我认为没有人能给你一个满意的答案.我将尝试涵盖一些方面:

    Vanilla,标准C可能无法使用处理器的整个功能集.例如,您无法明确使用最新Intel处理器的TSX功能.您当然可以使用操作系统原语,内联汇编,语言扩展或第三方库来规避这一点.

    C本身并不擅长并行/异步/并发/分布式编程.在这个领域可能会使很多任务变得无比容易的语言的一些例子是Haskell(可能很快就是Data Parallel Haskell?),Erlang等,它们提供了非常快速和轻量级的线程/进程和异步I/O. 在C中使用绿色线程和大量异步I/O可能不太令人愉快,尽管我确信它可以完成.

    最后,在用户级别的方面,当然你可以模仿每个图灵完整语言与其他任何语言,如你所指出的那样正确.

    2023-01-30 21:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有