external - % 在 OCaml 外部声明中是什么意思?

标签 external ocaml ffi

许多 external OCaml 标准库中的声明在函数名的开头有一个 %,例如 int_of_float 的定义:

external int_of_float : float -> int = "%intoffloat"

“%”是什么意思?

最佳答案

有很多%foo隐藏在编译器中的特殊原语。我认为最好的列表可以在 bytecomp/translcore.ml 中找到, 在 ocaml 编译器源代码中。让我们看看我可以在这里列出多少:

  • 比较:%equal、%notequal、%lessthan、%greaterthan、%lessequal、%greaterequal、%compare

  • 这些比较具有针对 int、float、string、nativeint、int32 和 int64 的专门版本,并且如果这些类型在编译时已知,则会自动专门化。
  • 其他原语:%identity, %ignore, %field0, %field1, %setfield0, %makeblock, %makemutable, %raise, %incr, %decr, %seqand, %seqor, %boolnot
  • 内部操作:%negint, %succint, %predint, %addint, %subint, %mulint, %divint, %modint, %andint, %orint, %xorint, %lslint, %lsrint, %asrint
  • 整数比较器 (??):%eq, %noteq, %ltint, %leint, %gtint, %geint
  • float 操作:%intoffloat, %floatofint, %negfloat, %absfloat, %addfloat, %subfloat, %mulfloat, %divfloat
  • 浮点比较器:%eqfloat, %noteqfloat, %ltfloat, %lefloat, %gtfloat, %gefloat
  • 字符串操作:%string_length, %string_safe_get, %string_safe_set, %string_unsafe_get, %string_unsafe_set
  • 数组操作:%array_length, %array_safe_get, %array_safe_set, %array_unsafe_get, %array_unsafe_set
  • 对象操作:%obj_size, %obj_field, %obj_set_field, %obj_is_int
  • 懒人:%lazy_force
  • Nativeint,int32,int64 操作:%{nativeint,int32,int64}: _of_int, _to_int, _neg, _add, _sub, _mul, _div, _mod, _and, _or, _xor, _lsl, _lsr, _asr
  • 整数转换:%nativeint_{of,to}_int32, int64_{of,to}_int32, int64_{of,to}_nativeint
  • Bigarray 操作:%caml_ba_ref_{1,2,3}, %caml_ba_set_{1,2,3}, %caml_ba_unsafe_ref_{1,2,3}, %caml_ba_unsafe_set_{1,2,3}
  • 面向对象:%send, %sendself, %sendcache

  • 这就是我能找到的。

    关于external - % 在 OCaml 外部声明中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1916433/

    相关文章:

    ruby-on-rails - RAILS link_to外部站点,url是用户表的属性,比如: @users.网站

    multithreading - 当使用来自 `fork` 创建的多个 C 线程的回调函数时,Rust Mutex 不工作

    ruby - 库未加载 :/opt/local/lib/libffi. 5.dylib 但我正在使用 Homebrew 软件

    ruby-on-rails - ffi 上的 bundle 更新失败

    使用 OCaml 解析语法

    ocaml - 在 OCaml 中 sleep 不到一秒钟

    mysql - 在 "external"数据库上创建帐户

    c++ - Qt 执行外部程序

    flash - Flash Player 可以与哪些外部音频处理技术进行实时交互?

    ocaml - utop:错误:引用未定义的全局 `Grammar'