Соглашения о вызовах
Собственное соглашение о вызовах Julia
Собственное соглашение о вызовах предназначено для быстрых неуниверсальных вызовов. Как правило, оно использует специализированную сигнатуру.
*Фантомные экземпляры LLVM (типы нулевой длины) опускаются. *Скаляры и векторы LLVM передаются по значению. *Агрегаты LLVM (массивы и структуры) передаются по ссылке.
Небольшое возвращаемое значение возвращается как возвращаемые значение LLVM. Большие возвращаемые значения возвращаются по соглашению «возврат структуры» (sret
), где вызывающая сторона предоставляет указатель на слот возврата.
Аргумент или возвращаемые значения, которые являются однородным кортежем, иногда представляются как вектор LLVM вместо массива LLVM.
Соглашение JL Call
Соглашение JL Call предназначено для встроенных модулей и общей диспетчеризации. Рукописные функции, использующие это соглашение, объявляются с помощью макроса JL_CALLABLE
. В соглашении используется ровно три параметра:
*F
— представление в Julia применяемой функции *args
— указатель на массив указателей на кучи *nargs
— длина массива.
Возвращаемое значение — указатель на кучу.