Clause
← Уся документація

Англійський оригінал змінився після перекладу, тож частина тексту може бути застарілою. Читати англійською

Перекладено з англійського оригіналу · 1e3a39c8-dirty · 2026-10-26

Вбудовані функції

Функції, які runtime реалізує мовою C++: BIF модуля erlang і функції інших модулів, чиї відповідники в OTP є BIF, NIF або потребують runtime. Реєструються за модулем, функцією та арністю; доступні безпосередньо, через динамічні виклики та як fun. Вихідний код міститься в runtime/src/builtins/; спостережувані відмінності від OTP описано у відмінностях.

Які вбудовані функції існують

Як до них доходять виклики

ДжерелоШлях
abs(X), X + Y, display, halt, errorВбудований у код фрагмент або окрема служба
Вбудовані функції каталогу без вбудованої служби (A -- B, ...)Вхід як у функцію: CLAUSE_builtin_frame_v1, аргументи в регістрах
Прямі вбудовані функції (ніколи не перехоплюють керування, не чекають і не діють на інший процес)CLAUSE_builtin_call_v1 повертає результат
Швидкі вбудовані функції (length, binary_to_list, list_to_binary, iolist_to_binary)Обмежений швидкий шлях (256 комірок, 4096 байтів результату); інакше вхід у фрейм
A ++ BКороткий правильний A копіюється вбудованим кодом; інакше вхід як у функцію
fun abs/1, fun erlang:'+'/2Зовнішній fun erlang:F/A, прив’язаний до вбудованої функції
M:F(Args), apply/3, fun M:F/A під час виконанняСпершу експорт модуля, потім вбудована функція

Порції

Вбудовані функції, чия робота зростає зі списком або binary, виконуються обмеженими порціями, як BIF з перехопленням в OTP.

Типізовані вбудовані функції

Реєстрація

Структура вихідного коду

Модуль erlang

Зовнішній формат термів

erlang/term_encoding.cpp, term_decoding.cpp; кодек спільний із компілятором (external_term.hpp), явні стеки.

Час

erlang/time.cpp.

Системна інформація

erlang/system.cpp, erlang/system_flags.cpp.

Хешування

erlang/hashing.cpp, erlang/md5.cpp.

Завантаження коду

erlang/code.cpp. Кожен модуль скомпонований і залишається завантаженим; динамічний код відкладено.

Модуль lists

builtins/lists/. lists OTP написаний на Erlang, тож вбудовані функції генерують те, що генерують його клаузи.

Модуль math

builtins/math.cpp.

Модуль binary

builtins/binary/; replace/3,4 і list_to_bin/1 написані на Erlang.

Модуль maps

builtins/maps.cpp, builtins/os.cpp.

Колекції

builtins/collections/: кожна задокументована функція ordsets, orddict, proplists, dict, sets, gb_trees, gb_sets, queue, array.

Множини множин

Граф

Digraph

ETS

builtins/ets/ над таблицями runtime (runtime).

Dets

dets.erl через clause_dets (builtins/dets/): формат файлів версії 9 з OTP байт у байт, той самий порядок у файлах.

Кодування

builtins/encoding/.

Повідомлення POSIX

builtins/erl_posix_msg.cpp, library/stdlib/erl_posix_msg.erl.

Мережеві імена

builtins/net/, library/kernel/clause_net.erl, library/kernel/net.erl.

Імена файлів

builtins/filename/.

Filelib

builtins/filelib.cpp, library/stdlib/filelib.erl, library/stdlib/clause_filelib.erl.

Argparse

builtins/argparse/, library/stdlib/argparse.erl, library/stdlib/clause_argparse.erl.

Qlc pt

builtins/qlc_pt/, library/stdlib/qlc_pt.erl, library/stdlib/clause_qlc_pt.erl: перетворення синтаксичного дерева qlc під час виконання, для qlc:string_to_handle/1,2,3 і qlc:q/1,2 в інтерпретованому коді. Модулі, скомпільовані з qlc.hrl, як і раніше отримують перетворення OTP хоста (перетворення синтаксичного дерева).

Qlc

library/stdlib/qlc.erl: кожна функція на Erlang, оскільки обчислення викликає fun запиту. Написано за документацією OTP; алгоритми взято з OTP там, де їх видно з відповідей, їхнього порядку або info/1,2.

Рядки

builtins/string/: кожна функція string.

Рядок URI

builtins/uri/.

Випадкові числа

builtins/rand/.

Календар

builtins/calendar.cpp.

Таймер

builtins/timer.cpp.

Persistent terms

builtins/persistent_term.cpp над таблицею runtime (runtime).

Модуль unicode

builtins/unicode/: кожна функція вбудована.

Модуль code

builtins/code.cpp. Без процесу code_server; відповіді описують скомпоновану програму.

Модуль io

builtins/terminal.cpp, library/stdlib/clause_io.erl.

Модуль os

builtins/os.cpp, library/kernel/os.erl.

Модуль init

builtins/init.cpp, library/erts/init.erl. Запущена система без сценарію завантаження.

Atomics і counters

builtins/atomics.cpp.

Erts internal

builtins/erts_internal.cpp, library/erts/erts_internal.erl: функції, які викликають stdlib і kernel.

Unicode util

unicode_util.erl через вбудовані функції clause_unicode і згенеровані таблиці (unicode/tables.cpp).

io_lib

io_lib.erl, builtins/io_lib/. Глибокі списки символів OTP, побудовані в арені C++; io:format використовує той самий рушій.

Таблиці компілятора

builtins/front_end/.

Erl scan

erl_scan.erl через clause_erl_scan:scan/6 (front_end/scanner*.cpp), власний сканер, що слідує scan1/5 з OTP.

Erl parse

erl_parse.erl через clause_erl_parse:parse/1 (front_end/parser*.cpp), парсер рекурсивного спуску для граматики OTP.

Erl eval

erl_eval.erl інтерпретує абстрактний формат на Erlang; вбудовані функції clause_erl_eval обробляють сегменти бітового синтаксису (front_end/erl_eval.cpp) і зіставлення зі зразком (front_end/eval_match.cpp), а erl_eval:partial_eval/1 та is_constant_expr/1 також є вбудованими функціями.

Erl lint

Перевірки erl_lint — вбудовані функції (front_end/lint*.cpp), написані за erl_lint з OTP клауза за клаузою; erl_lint.erl зберігає те, що викликає fun або інші модулі.

Erl pp

Друк erl_pp — вбудована функція (front_end/pp*.cpp), clause_erl_pp:print/2, перенесена з двох проходів попереднього модуля на Erlang; erl_pp.erl зберігає гачки й legalize_vars/1.

Epp

Умови -if і -elif з epp обчислює вбудована функція clause_epp:eval_if/1 (front_end/epp_eval.cpp), тож програма, яка виконує попередню обробку файлів, не компонує erl_eval.

Erl expand records

erl_expand_records:module/2 — вбудована функція (front_end/expand_records.cpp): розгортання обходить форми на C++ замість великої диспетчеризації клауз Erlang, тож програми, які її викликають, не компілюють додаткового коду.

Модуль zlib

builtins/zlib/streams.cpp, library/erts/zlib.erl.

Модуль zstd

builtins/zstd/contexts.cpp, library/stdlib/zstd.erl.

Кодек ASN.1

builtins/asn1/ у clause_runtime, library/asn1/clause_asn1.erl (ASN.1).

Відкритий ключ

builtins/public_key/ у clause_runtime, library/public_key/clause_public_key.erl (public_key): обходи records і таблиці pubkey_translation та pubkey_cert_records з OTP, які викликає clause_public_key_codec.

Модуль crypto

builtins/crypto/ в окремому архіві clause_runtime_crypto, library/crypto/crypto.erl і clause_crypto.erl.

Модуль re

builtins/re/, re.erl над включеною PCRE2 (PCRE2).

Prim eval

process/receive.cpp, library/erts/prim_eval.erl.