tjg*_*een 15 c postgresql ocaml
我面临着构建要集成到大型现有C代码库中的新组件的任务.该组件本质上是一种编译器,并且将足够复杂以至于我想在OCaml中编写它(出于与这里给出的原因一致的原因).我知道OCaml-C交互是可能的(根据手册和本教程),但它看起来有些痛苦.
我想知道的是,这里的其他人是否尝试过大规模集成OCaml和C代码,他们发现了一些意想不到的问题,以及他们最终是否认为他们会更好只需在C中编写新代码
注意,我不是要开始讨论功能性与命令式编程的优点:让我们假设我们假设OCaml恰好是我想到的工作的正确工具,并且集成的潜在困难是唯一的问题.我也没有选择重写代码库的其余部分.
提供有关任务的更多细节:我需要实现的组件是某种查询优化器,它结合了我在加州大学戴维斯分校工作的一些研究思路,并将集成到PostgreSQL中,以便我们可以运行实验.(查询优化器本质上是一个编译器.)组件将从C代码调用,它将主要独立运行,但会对其他PostgreSQL组件进行一定数量的调用以检索系统目录信息之类的东西,并构建一个复杂的C数据结构(表示物理查询计划)作为输出.
对于这个有些开放式问题的道歉,但我希望社区可以为我节省一点麻烦:)
谢谢,
TJ
nlu*_*oni 11
好问题.您应该使用更好的工具来完成工作.
如果事实上你的意图是使用更好的工具(而且你确定lexx和yacc将会很痛苦)那么我有一些东西可以与你分享; 从c调用ocaml并不痛苦,反之亦然.大多数时候我一直在写ocaml呼叫C,但我已经写了一些其他的方式.它们主要是不返回结果的调试函数.虽然,回调和第四回调实际上是value关于在C侧打包和拆包ocaml 类型.你提到的那个教程涵盖了所有这些,而且非常好.
我反对Ron Savage评论说你必须是这门语言的专家.我记得从我工作的地方开始,在几个月内,不知道什么是"仿函数",能够调用C,并编写数千行C用于数字配方和抽象数据类型,并且有一些打嗝(不是使用解包类型,而是使用抽象数据类型的垃圾收集),但它一点也不差.项目中的大多数内部循环都是用C语言编写的 - 具有SSE,外部库(lapack),更严格的优化循环以及一些内联手动优化组件的优势.
我认为您可能需要具备设计大型项目和划分功能和命令部分的经验.我真的会评估你要编写多少ocaml,以及你希望传递给C的值是什么 - 我说这是因为我害怕建议某人传递递归数据结构ocaml到C,实际上,它会有很多解包元组,它们的内容,因而有很多混淆和错误的可能性.