在目前的OCaml世界中,标准库似乎有许多竞争扩展,据我所知,Batteries和Jane Street Core是主要的扩展(我知道ExtLib已被归入电池?).每个人的利弊是什么?它们是等价的吗?他们可以共存吗?"混合搭配"是否有意义,或者我应该选择并专注于它?Core是否在Jane Street之外广泛使用?
如果它对Debian有所帮助,那么Windows支持对我来说不是一个因素.
谢谢!
当我ocaml或者在ghci办公室工作时,我经常会为了更好的单词,值绑定,函数,加载的模块等建立一个重要的"上下文".有没有办法保存所有这些并在以后重新加载它,所以我可以继续我离开的地方?或者更好的是,将整个批次转储为可以重新加载的文本文件,或者将其简单地修改为可以编译成可执行文件的代码(例如通过添加Main)?
在OCaml自定义顶层中,有没有办法以编程方式将提示设置#为其他内容?我希望能够更改它以响应用户的最后一个自定义函数(有点像bash你可以设置PS1).我甚至找不到#directive来改变它.谢谢!
tracepoint工具目前仅适用于远程目标.请参阅指定调试目标一节.此外,远程目标必须知道如何收集跟踪数据.此功能在远程存根中实现; 但是,在撰写本文时,与GDB一起分发的存根都不支持跟踪点.
强调我的.我在哪里可以获得这样的存根(对于在Debian x86或x64上使用GCC编译的C/C++代码)?或者我该怎么做?有关编写存根的文档仅提及实现与串行端口通信的功能.谢谢!
(为了论证而忽略字节序 - 这只是一个测试用例/概念证明 - 我也绝不会strcpy在实际代码中使用!)
考虑以下简单的C代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* variables of type message_t will be stored contiguously in memory */
typedef struct {
int message_id;
char message_text[80];
} message_t;
int main(int argc, char**argv) {
message_t* m = (message_t*)malloc(sizeof(message_t));
m->message_id = 1;
strcpy(m->message_text,"the rain in spain falls mainly on the plain");
/* write the memory to disk */
FILE* fp = fopen("data.dat", "wb");
fwrite((void*)m, sizeof(int) + strlen(m->message_text) + 1, 1, fp);
fclose(fp);
exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
它写的文件很容易从磁盘中读回: …
我想使用jq预处理来自第三方系统的大量JSON,但是我在编写查询时遇到困难,测试用例如下:
$ cat test.json
{
"a": "b",
"c": "d",
"e": {
"1": {
"f": "g",
"h": "i"
}
}
}
$ cat test.json|jq .e.1.f
jq: error: Invalid numeric literal at EOF at line 1, column 3 (while parsing '.1.') at <top-level>, line 1:
.e.1.f
Run Code Online (Sandbox Code Playgroud)
我在这里如何得到“ g”作为输出?或如何将1强制转换为“ 1”,以便正确处理?
我有一些代码可以反复接近一个解决方案,它实际上做的并不重要,但它通过改变mg(m猜测,从4.0开始因为我"知道"它应该在球场中)而对r'== rt有效. .
solve_m f ar st qt = solve_m' f ar st qt 4.0
where
solve_m' f ar st qt mg
| rd > precis = f' (mg - sf)
| rd < (-precis) = f' (mg + sf)
| otherwise = mg
where
f' = solve_m' f ar st qt
rt = st + qt
r' = f st ar mg
rd = rt - r'
sf = abs(rd)
Run Code Online (Sandbox Code Playgroud)
我想要做的是计算周期数,我知道正确的方法是使用State monad,但是最优雅的方法是将put/get放入这样的函数中?让f'成为阻止?或者只是添加一个计数器solve_m'并返回(counter,mg)?
谢谢!
编辑:这似乎基本上是我想要的,没有必要的Monads:
solve_m f ar st qt …Run Code Online (Sandbox Code Playgroud) 对于OCaml库,我需要在我的目标install和uninstall目标中Makefile做些什么才能使其与其他安装完美配合ocamlfind,与之无缝协作等等?基本上是一个"好公民".我现在对GODI不感兴趣.谢谢!
我正在编写一个OCaml库,它有一些初始化代码,在程序的生命周期中只需要运行一次(并存储一些将在程序的生命周期内持续存在的状态,但只能在库本身内使用) ),以及一些需要仅在使用库的程序退出时运行的清理代码.
如果它是相关的,我的库是两部分:一个低级C库的接口,以及一些更高级的东西,使它更容易编程.我可以在C中的某个地方做我需要的吗?理想情况下,我的用户不关心它是如何实现的,他们永远不会看到C位.
在Python中,我会通过运行代码来实现这一点,import但OCaml open实际上并没有运行任何东西,它只是模块化模块命名空间,然后是Python atexit,但我找不到Ocaml等价物.
我考虑过的一种方法是将我的库构建为"框架",但我认为保证这种过度设计的方法并不重要.谢谢!
更新:好的,我想.我正在使用C代码来处理退出时的清理,并且我已经对代码进行了一些处理,因此有一个指向C端全局状态的指针
它会出现在我的图书馆我现在有
let global_env = env_create ()
Run Code Online (Sandbox Code Playgroud)
当它open由主程序执行时,它确实可以运行......但是怎么样?