Tag: ocaml

是否可以从OCaml调用C函数,而不包含类型?

我正试图在OCaml中编写一个(极其微小,简单 – 我不知道我在做什么,让我们真实!)编译器。 我真的想避免在项目中检查任何 ISO-C代码(尽管很好地了解C;这里的目标是专门学习和使用OCaml。)根据这一点,我需要为编译编写一个“运行时” OCaml中的语言,与主项目分开编译,然后将其与编译器本身的输出相关联。 不幸的是,它看起来像任何外部函数 – 甚至那些不接触任何OCaml数据结构/ OCaml堆的函数 – 都应该使用OCaml的C宏构建: CAMLprim value scheme_entry(value unit) { int i; i = 42; return Val_int(i); } 如果我自己发出assembly说明,这可能不是一个选择。 (至少,直到我学到更多东西!) 是否有任何方法(包括hacky – 这是一个个人学习项目)来调用OCaml中的以下非常简单的函数? _scheme_entry: movl $42 %eax ret 作为参考,我正在通过Ghuloum的IACC: http ://ell.io/tt$ocameel

__memcpy_sse2_unaligned – 这是什么意思?

在处理我的编译器时,我遇到了这个错误: Program received signal SIGSEGV, Segmentation fault. __memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S:33 我如何获得此处出现问题的详细信息? 我从回溯中知道它是一个记忆线导致它,但我如何看待内存是如何对齐的? 我怎么知道它应该如何对齐? 该项目是一个带有LLVM后端的编译器,使用Zend / PHP运行时和OCaml垃圾收集器,因此有很多问题可能出错。 我怀疑这条线是问题的一部分: zend_string *str = (zend_string *)caml_alloc(ZEND_MM_ALIGNED_SIZE(_STR_HEADER_SIZE + len + 1), 0); 其中caml_alloc是Zend源代码中的pemalloc 。 在执行10,000个字符串连接时会发生段错误。 这是valgrind的输出: ==7501== Invalid read of size 8 ==7501== at 0x4C2F790: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7501== by 0x4D7E58: subsetphp_concat_function (bindings.c:160) ==7501== by 0x4D7F52: foo (llvm_test.s:21) ==7501== […]

有免费的OCaml到C翻译吗?

所以我有很好的OCaml代码(50000行)。 我想把它移植到C.那么有没有免费的OCaml到C翻译器?

用stdin识别箭头键

是否可以采用跨平台方式处理C或OCaml程序中的退格键和箭头键? 实际上,OCaml解决方案将受到赞赏,但许多标准的unix函数直接包装到相应的API调用中,因此移植C解决方案应该没有问题。 我要实现的是捕获箭头键以覆盖它在shell中的行为(通过重新定位最后一行或类似这样的操作)。 我认为这件事落在实际程序之前并且它不是由代码本身处理的,所以我不知道它是否可能。 该程序在Linux,OS X和Windows(在cygwin上)编译,所以我想在所有平台上进行编译。