Что % означает во внешнем объявлении OCaml?

Многие external объявления в стандартной библиотеке OCaml имеют % в начале имени функции, такого как определение int_of_float:

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

Что означает '%'?

13
задан Michael Ekstrand 16 December 2009 в 21:25
поделиться

2 ответа

В компиляторе скрывается множество % foo специальных примитивов. Я думаю, что лучший список доступен в bytecomp / translcore.ml в исходных кодах компилятора ocaml. Посмотрим, сколько я могу перечислить здесь:

  • Сравнения:% equal,% notequal,% lessthan,% больше,% lessequal,% greaterequal,% compare

У этих сравнений есть специализированные версии для int, float, string, nativeint , int32 и int64, и будет автоматически специализироваться, если типы известны во время компиляции.

  • Другие примитивы: % identity,% ignore,% field0,% field1,% setfield0,% makeblock,% makemutable, % raise,% incr,% decr,% seqand,% seqor,% boolnot
  • Int ops: % negint,% succint,% predint,% addint,% subint,% mulint,% divint,% modint, % andint,% orint,% xorint,% lslint,% lsrint,
12
ответ дан 1 December 2019 в 22:23
поделиться

external с% являются специальными внешними, которые будут обрабатываться компилятором специально. Например, с int_of_float ocamlc скомпилирует его в вызов некоторой функции C, но с ocamlopt он скомпилирует его в некоторый специальный код операции ассемблера, который преобразует double в целое число.

10
ответ дан 1 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: