Многие external
объявления в стандартной библиотеке OCaml имеют % в начале имени функции, такого как определение int_of_float
:
external int_of_float : float -> int = "%intoffloat"
Что означает '%'?
В компиляторе скрывается множество % foo
специальных примитивов. Я думаю, что лучший список доступен в bytecomp / translcore.ml
в исходных кодах компилятора ocaml. Посмотрим, сколько я могу перечислить здесь:
У этих сравнений есть специализированные версии для 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,
external с% являются специальными внешними, которые будут обрабатываться компилятором специально. Например, с int_of_float ocamlc скомпилирует его в вызов некоторой функции C, но с ocamlopt он скомпилирует его в некоторый специальный код операции ассемблера, который преобразует double в целое число.