草庐IT

windows - 带有自定义链接的 OCaml 编译是否应该在 Windows 中工作(通过 MinGW)?

我想编译一个与C代码接口(interface)的OCaml程序,使用基于MinGW的GCC,并使用单独的编译(GCC生成.o,然后ocamlopt生成最终的可执行文件)。我不清楚(1)这是否适用于Windows,如果适用,(2)哪些命令行参数是必需的。我正在使用JonathanProtzenko的OCamlonWindowsinstaller安装OCaml4.02.1和Cygwinshell(注意它使用原生WindowsOCaml编译器,而不是基于Cygwin的编译器)。我使用Nuwen'sMinGW安装了gcc(但在使用StrawberryPerl的gcc时遇到了同样的问题)。这是我

windows - 存在哪些其他 OCaml 顶级程序? (远景)

我正在使用OCamlWinPlusv1.9RC4。它很糟糕。它经常崩溃,并且缺乏基本功能。可以为WindowsVista推荐哪些其他顶级OCaml程序? 最佳答案 您可以使用Windows版本的Emacs并使用OCaml的源存档提供的自定义文件(*.el)将Emacs变成一个强大的,如果是特殊的,顶级的。您可以在ocaml-3.11.1/emacs/README中找到说明。具体来说:OnceyouhavestartedcamlbyM-xrun-caml:M-C-xsendphrasetoinferiorcamlprocessC-cC

windows - 您可以将 OCaml 项目本地编译为 Windows 库吗?

我是OCaml的新手(但我过去使用过SML),我想知道两件事:1-OCaml程序是否可以编译为库?2-如果是这样,是否可以将它们编译为nativeWindowsdll。我想做的是使用LLVM在OCaml中创建一个编译器库,并在另一个Windows程序中使用它。PS:我知道我可以从C++和C使用LLVM,但我更喜欢OCaml,因为我这样做是为了好玩。 最佳答案 是的,参见ocamlopt-output-obj选项和章节18.7.5EmbeddingtheCamlcodeintheCcode手册。

c# - 仿函数和 "generics"有什么区别

我正在查看OCaml'sfunctors.在我看来,它与C++/C#/Java中所谓的通用对象非常相似。如果您暂时忽略Java的类型删除,并忽略C++模板的实现细节(我对语言特性感兴趣),仿函数与泛型完全相同。如果我理解正确的话,仿函数会根据您提供的类型为您提供一组新的函数,例如List.GetType()!=List.GetType()但是你可以粗略地重写OCaml的#moduleSet=functor(Elt:ORDERED_TYPE)->structtypeelement=Elt.ttypeset=elementlistletempty=[]letrecaddxs=matchsw

javascript - 如何使用算法 W 键入检查递归定义?

我正在实现AlgorithmW(Hindley-Milnertypesystem)在JavaScript中:实现上述规则的函数是typecheck,它有如下签名:typecheck::(Context,Expr)->Monotype定义如下:functiontypecheck(context,expression){switch(expression.type){case"Var":varname=expression.name;vartype=context[name];returninst(type);case"App":varfun=typecheck(context,expre

php - 使用 LLVM API 将全局字符串存储在可变变量中

我正在使用LLVM和OCaml为PHP的一个子集制作一个编译器。LLVM中的字符串处理教程有点缺乏——至少我找不到。这是我要编译的代码:这是我为上面的代码输入的AST:[(Typedast.StmtTypedast.Expr(Typedast.TUnit,(,Typedast.Binop((Typedast.EqNone),(,Typedast.Lvar((,"$a"),Typedast.TString)),(,(Typedast.String(,"asd"))),Typedast.TUnit))))](这里的只是表示没有显示pos(位置)。)这是我生成的LLVMIR:;ModuleI

c++ - 使用 ocamlbuild 构建 C++ 代码

我找到了许多关于如何使用ocamlbuild从C源代码构建.o文件的指南。但是,这些不适用于C++文件,ocamlbuild无法开箱即用。我已经尝试编写一个myocamlbuild.ml文件(请求后如下所示)提供从.cpp到.o的规则,并且ocamlc失败,提示它不知道如何处理.cpp文件(即使编译器通过命令行设置为g++标志)。openOcamlbuild_plugin;;letext_obj=!Options.ext_obj;;letx_o="%"-.-ext_obj;;rule"ocamlC++stubs:cpp->o"~prod:x_o~dep:"%.cpp"beginfune

c++ - .cma、.cmo、.cmx 文件之间的区别以及如何在编译中正确使用它们?

我是OCaml的新手,我对.cma、.cmo和.cmx文件感到困惑。有时我必须在编译命令中包含一个.cma文件,但有时我必须包含一个.cmo文件。为什么图书馆会有这样的差异?C++中库和包含路径是同一个概念吗?示例:ocamlc-oexecutablestr.cmaextstring.cmomycode.ml谢谢 最佳答案 您可能认为.cmo是库,但它不是。.cmo是字节码目标文件。这就像Java中的.class。.cma是字节码库。它是通过将一些.cmo归档到.cma中产生的.cmx由ocamlopt(native代码编译器)生成

c++ - OCaml 中的快速位数组

另一个综合基准:SieveofEratosthenesC++#include#includevoidfind_primes(intn,std::vector&out){std::vectoris_prime(n+1,true);intlast=sqrt(n);for(inti=2;iOCaml(使用JaneStreet'sCore和Res库)openCore.StdmoduleBits=Res.BitsmoduleVect=Res.Arrayletfind_primesn=letis_prime=Bits.make(n+1)trueinletlast=floatn|!sqrt|!Flo

c++ - 如何安全地在 C++/Ocaml 之间转换树数据结构?

我有一个用C++编写的遗留数据结构和一个OCaml中的新工具,该工具有望处理该遗留数据。所以我需要将数据从前者导入/翻译到后者。数据以树的形式存在,通常由访问者处理。作为一个简单的例子,考虑这个最小的DSL:#includeusingnamespacestd;classintnode;classaddnode;structvisitor{virtualvoidvisit(constintnode&n)=0;virtualvoidvisit(constaddnode&n)=0;};structnode{virtualvoidaccept(visitor&v)=0;};structintn