- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我面临着构建一个新组件以集成到现有大型 C 代码库中的任务。该组件本质上是一种编译器,并且会非常复杂,以至于我想用 OCaml 编写它(出于与给定的那些 here 的原因)。我知道 OCaml-C 交互是可能的(根据 manual 和这个 tutorial ),但它看起来有些痛苦。
我想知道这里的其他人是否尝试过 OCaml 和 C 代码的大规模集成,他们发现了哪些意想不到的陷阱,以及他们是否最终得出结论认为他们会最好只用 C 编写新代码。
请注意,我不是试图就函数式编程与命令式编程的优点展开辩论:假设我们假设 OCaml 恰好是我心目中工作的正确工具,整合的潜在困难是唯一的问题。我也没有重写代码库其余部分的选项。
关于任务的更多细节:我需要实现的组件是某种查询优化器,它结合了我在加州大学戴维斯分校的团队正在研究的一些研究想法,并将集成到 PostgreSQL 中,以便我们可以运行实验。 (查询优化器本质上是一个编译器。)该组件将从 C 代码调用,大部分独立运行,但会对其他 PostgreSQL 组件进行一定次数的调用以检索系统目录信息等内容,并构建一个复杂的C 数据结构(表示物理查询计划)作为输出。
很抱歉这个有点开放的问题,但我希望社区可以帮我省点麻烦 :)
谢谢,
张杰
最佳答案
好问题。您应该使用更好的工具来完成这项工作。
如果实际上您的意图是使用更好的工具来完成工作(并且您确定 lexx 和 yacc 会很痛苦),那么我有一些东西要与您分享;从 c 调用 ocaml 一点也不痛苦,反之亦然。大部分时间我一直在编写调用 C 的 ocaml,但我也以其他方式编写了一些。它们主要是不返回结果的调试函数。虽然,调用 back 和 fourth 实际上是关于在 C 端打包和解包 ocaml value
类型。您提到的那个教程涵盖了所有这些,而且非常好。
我反对 Ron Savage 的说法,即您必须是该语言的专家。我记得从我工作的地方开始,在几个月内,不知道什么是“仿函数”,能够调用 C,并为数字配方和抽象数据类型编写一千行 C,并且有一些小问题(不是使用解包类型,而是使用抽象数据类型的垃圾收集),但它一点也不差。项目中的大部分内部循环都是用 C 编写的——利用 SSE、外部库 (lapack)、更紧密的优化循环和一些内联的手工优化汇编。
我认为您可能需要具备设计大型项目以及划分功能部分和命令部分的经验。我真的会评估你将要编写多少 ocaml,以及你想传递给 C 的什么样的值——我这么说是因为我害怕向某人推荐从中传递递归数据结构ocaml 到 C,实际上,它会解包元组及其内容,因此很可能出现混淆和错误。
关于c - 混合 OCaml 和 C : is it worth the pain?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454524/
我正在考虑向我的应用 (Android) 添加位置权限,以便将该位置传递给广告平台(目前是 Admob 和 Mobfox)。但如果不值得,我不想去做,因为从用户的角度来看,在我的应用程序中请求位置是没
我记得听说 mysql 中的连接过程被设计为与其他 RDBMS 相比非常快,因此使用 a library that provides connection pooling如果您启用连接池,(SQLAl
在 CUDA 中使用事件时,我通常会创建一个事件并立即将其记录在某个流中。同步后,我懒得保留那个 cudaEvent_t,在别处使用它 - 我只是销毁它。 除了避免事件创建和销毁的开销之外,“回收”事
之前没用过线程,但想我可能遇到了一个机会: 我编写了一个脚本,它可以读取大约 500 个 Excel 文件的数组,并使用 Parse::Excel 从工作簿中的特定工作表中提取值(平均每个工作簿有两张
我们都编写可重用的类和代码。 我们考虑了可配置性,以允许我们一次又一次地重用这个奇妙的新类。 我们告诉我们的老板,现在花这些额外的时间会在以后为我们节省时间和金钱。 但实际上,对于我们这些不编写第三方
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 个月前。 Impro
我继承了一些广泛且不必要地使用 ref 关键字的代码。最初的开发人员显然担心如果不使用 ref 对象会像原始类型一样被克隆,并且在编写 50k+ 行代码之前没有费心去研究这个问题。 这与其他不良编码实
我是 Java 的新手(尤其是 Swing),最近一直在制作一些相当简单的应用程序,边学边学。最新的有很多表单组件,例如 JLabels、JTextFields、JButtons 等。所有这些都使用可
一个简单的 Google 搜索 ' appbuilder ' 揭示了一大堆新服务,声称可以帮助您使用他们的东西构建您的应用程序,并提供可以在应用程序/安卓商店上架的东西。这里有一些: Tiggzi B
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
刚刚看了一个电动云的demo,很有意思,但是很贵。 亲:优秀的功能 - 从我的作品中提取秘诀,并通过可重复使用的步骤使它们更加标准化 - 并行构建以加快速度并更有效地使用我的构建农场 - 从任何步骤重
我们内部开发了大约七个不同的网站。它们是跟踪不同人力资源申请并帮助我们的一些员工通过日程安排完成工作的网站。今天,首席软件设计师告诉我开始使用 phpUnit 为我们现有的代码编写测试用例。我们的主网
我的服务器上有几个文件,我的用户下载到他们的应用程序中。文件总数约为 14.1 MB。如果我压缩文件,结果大约是 13.2 MB。 经过几次试运行,我注意到 ipad 需要很长时间才能解压缩文件,这让
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我目前正在考虑使用 Akka(Java API/库)来完成创建多个 Future 的任务。 s 并将它们放入 BlockingQueue .现在可能是由 Callables 处理的一些任务在调用线程中
我设置了一个系统,可以从 java servlet 愉快地运行 R,生成已处理的数据并挂接到进程的 stdin、stdout 和 stderr 流中,如第二个和 this question 所示。 。
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我正在考虑创建一个跨平台应用程序,但我希望它在 OS X 上看起来尽可能原生,PyObjC 是一个不错的选择吗?这有多容易?相比之下,QT 在外观原生方面有多好? 最佳答案 我不太确定我的回答是否符合
我是一名优秀的程序员,十分优秀!