小编ano*_*nol的帖子

为 OCaml 生成类图

我有一个庞大的 OCaml 代码库,并且希望从中获取一些类似 UML 的类/模块图,类似于某些Java 逆向工程工具所做的事情。

这些图不需要是正式的 UML 图,但至少能够看到每个模块签名中定义的函数/类型的名称对于帮助理解 OCaml 代码库非常有用。如果这可以与模块之间的关联相结合就更好了。

可以使用 来完成吗ocamldoc?我知道它能够生成模块之间的 DOT 依赖图,但我无法确定它是否可以生成有关模块中定义的每种类型/函数的信息。

ocaml class-diagram ocamldoc

5
推荐指数
1
解决办法
266
查看次数

如何在 OPAM 中列出当前软件包版本?

opam list -a根据输出,列出 OPAM 当前可用的所有软件包,但不显示当前未安装的软件包的版本号opam list --help

(...) 输出格式每行显示一个包,每行包含包的名称、已安装的版本或 -- 如果未安装包,(...)

如何列出所有软件包及其版本号?

ocaml opam

5
推荐指数
2
解决办法
2879
查看次数

如何阅读此OCaml类型签名?

我目前正在尝试一起使用OCaml和GTK(使用lablgtk绑定).但是,文档并不是最好的,虽然我可以弄清楚如何使用大多数功能,但我仍然坚持改变笔记本页面(切换到不同的选项卡).

我找到了我需要使用的功能,但我不知道如何使用它.文档似乎暗示它是在子模块中GtkPackProps.Notebook,但我不知道如何调用它.

此外,此功能的类型特征与我之前看到的不同.

 val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t
Run Code Online (Sandbox Code Playgroud)

我认为它返回一个GtkSignal.t,但我不知道如何将第一个参数传递给函数(括号中的整个部分).

有没有人有一些示例代码显示如何更改笔记本页面,或者可以给我一些如何做到这一点的提示?

gtk ocaml type-signature lablgtk

4
推荐指数
2
解决办法
444
查看次数

合并之间的 git rebase 导致完全不相关的文件中的冲突

我有一个大型 Git 存储库,几个月前在其中引入了一个错误,我想bisect通过首先在存储库的过去引入提交,然后重放合并(执行rebase新提交),如图所示在下图中。

我知道由于合并,Git 似乎没有像预期的那样工作,但我想更好地了解为什么会发生这种情况(以及是否有参数可以帮助它更好地工作)。

  • 修改的文件patch永远不会被任何提交再次修改master

  • 我尝试rebase使用和不使用--preserve-merges,并且都在离提交不远的某个合并中失败patch

  • 冲突中显示的差异没有意义,例如文件中有一些空格,另一个文件中有一些不相关的行......我可以尝试从中提取任何有用的信息,或者它只是垃圾,我不应该花任何时间尝试明白吗?

  • 是否有不同的参数/合并策略可以帮助推进合并?

注意:最后,我的组合git apply; git bisect确实有效,但我仍然对有关 Git 行为的替代解决方案或解释感兴趣。

我的 git-rebase 问题总结

git git-rebase

4
推荐指数
1
解决办法
1491
查看次数

关闭应用程序并通知渲染器进程

我有一个Electron应用程序需要在用户关闭时保存一些数据(例如,在用户点击"关闭"按钮之后).

数据在渲染器进程中可用,因此应在应用程序终止之前通知它.

浏览器窗口电子API提到了一个close方法,但似乎这是由主进程完成的,而不是渲染器(如果我没有记错的话).

我尝试使用WebContents.send主进程来通知渲染器进程,但似乎是因为消息是异步的,所以应用程序在渲染器进程有时间实际执行操作之前关闭.

electron

4
推荐指数
2
解决办法
2974
查看次数

可以安全地读取C中未初始化的自动易失性变量吗?

在C中,我可以访问自动volatile变量而不必先进行初始化,还是总是导致未定义的行为?

例如,在映射到volatile变量的一些硬件设备中,初始化变量无论如何都没有意义,甚至可能被禁止.

c volatile undefined-behavior

3
推荐指数
1
解决办法
462
查看次数

自定义操作系统上的当前 x86 权限级别

在保护模式下在 x86 上运行的自定义操作系统中,除了执行特权指令并查看它是否崩溃之外,有没有办法获得当前的特权级别?

例如,寄存器CR0包含PE位,指示我们是在实模式还是保护模式下运行,并且可以使用汇编代码轻松检索。

特权级别有什么等价的吗?

英特尔架构软件开发者手册提到,EFLAGS寄存器包含两个IOPL相关的I / O特权级别位。这与当前权限级别 (CPL) 相同吗?

x86 assembly privilege

3
推荐指数
1
解决办法
1126
查看次数

GCC中的枚举器属性

GCC的在线文档声称它支持枚举器属性:

GCC允许在枚举器上设置属性.

然后它给出了使用这些属性的代码示例:

 enum E {
   oldval __attribute__((deprecated)),
   newval
 };

 int
 fn (void)
 {
   return oldval;
 }
Run Code Online (Sandbox Code Playgroud)

但是当我在我的GCC(4.8.4)上尝试它时,我收到一个错误:

t.c:2:15: error: expected ‘,’ or ‘}’ before ‘__attribute__’
        oldval __attribute__((deprecated)),
               ^
Run Code Online (Sandbox Code Playgroud)

我需要在某个地方启用它们吗?或者使用不同的GCC?

请注意,Clang也声称支持这个C扩展,但是使用Clang它可以正常工作.

c enums gcc

3
推荐指数
1
解决办法
179
查看次数

从源中的 JSON 令牌获取位置信息

我正在使用yojsonOCaml 解析 JSON 文件,在验证输入文件时,我想向用户发出包含源代码信息的错误消息。

例如,如果我发现第 5492 行的给定值不在允许的范围内,我想告诉用户:“source.json:5492 行中的值无效”。

我怎样才能得到这些信息?

(如果 yojson 无法提供此类信息,则另一个具有此信息的 OCaml JSON 库可能会很有用。)

json ocaml

3
推荐指数
1
解决办法
143
查看次数

是否必须尽可能对三元运算符进行静态评估?

是否需要在可能的情况下对三元运算符进行静态评估,还是编译器可以将其推迟到以后使用,从而拒绝依赖于其静态评估的程序?

更准确地说,这是程序的歧义片段:

char b[sizeof(a) > 10 ? 10 : sizeof(a)] = {0};
Run Code Online (Sandbox Code Playgroud)

取决于a片段是否为可变长度,片段是否无效。如果a是VLA,则sizeof(a)不是静态确定的,因此无法进行初始化:

int main(int argc, char **argv) {
  int a[argc];
  char b[sizeof(a) > 10 ? 10 : sizeof(a)] = {0}; // invalid
  return 0;
}
Run Code Online (Sandbox Code Playgroud)
error: variable-sized object may not be initialized
Run Code Online (Sandbox Code Playgroud)

但是,如果a不是VLA,则可以静态评估所有内容:

int main() {
  int a[42];
  char b[sizeof(a) > 10 ? 10 : sizeof(a)] = {0}; // valid
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:符合标准的编译器所需的静态尽可能评估,因此必须接受第二个方案,或者允许他们“它推迟到动态评价”,并可能拒绝呢?

c language-lawyer

3
推荐指数
1
解决办法
89
查看次数