Clause
← Toute la documentation

L'original anglais a changé depuis cette traduction ; certaines parties peuvent donc être obsolètes. Lire en anglais

Traduit de l'original anglais · 1e3a39c8-dirty · 2026-10-26

Builtins

Fonctions que le runtime implémente en C++ : BIF d'erlang et fonctions d'autres modules dont les équivalents d'OTP sont des BIF, des NIF ou ont besoin du runtime. Enregistrées par module, fonction et arité ; atteintes directement, par des appels dynamiques et sous forme de funs. Les sources sont dans runtime/src/builtins/ ; les différences observables avec OTP sont dans différences.

Quelles builtins existent

Comment les appels les atteignent

SourceChemin
abs(X), X + Y, display, halt, errorCode en ligne ou service dédié
Builtins du catalogue sans service en ligne (A -- B, ...)Entrée comme dans une fonction : CLAUSE_builtin_frame_v1, arguments dans les registres
Builtins directes (ne font jamais de trap, n'attendent pas et ne touchent aucun autre processus)CLAUSE_builtin_call_v1 renvoie le résultat
Builtins rapides (length, binary_to_list, list_to_binary, iolist_to_binary)Chemin rapide borné (256 cellules, 4096 octets de résultat) ; sinon entrée dans la trame
A ++ BA courte et propre copiée en ligne ; sinon entrée
fun abs/1, fun erlang:'+'/2Fun externe erlang:F/A liée à la builtin
M:F(Args), apply/3, fun M:F/A à l'exécutionExport du module d'abord, puis builtin

Portions

Les builtins dont le travail croît avec une liste ou un binary s'exécutent par portions bornées, comme les BIF à traps d'OTP.

Builtins typées

Enregistrement

Organisation des sources

Module erlang

Format de termes externe

erlang/term_encoding.cpp, term_decoding.cpp ; codec partagé avec le compilateur (external_term.hpp), piles explicites.

Temps

erlang/time.cpp.

Informations système

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

Hachage

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

Chargement de code

erlang/code.cpp. Chaque module est lié et reste chargé ; le code dynamique est reporté.

Module lists

builtins/lists/. Le module lists d'OTP est en Erlang, donc les builtins lèvent ce que ses clauses lèvent.

Module math

builtins/math.cpp.

Module binary

builtins/binary/ ; replace/3,4 et list_to_bin/1 sont en Erlang.

Module maps

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

Collections

builtins/collections/ : toutes les fonctions documentées de ordsets, orddict, proplists, dict, sets, gb_trees, gb_sets, queue, array.

Ensembles d'ensembles

Graphe

Digraphe

ETS

builtins/ets/ sur les tables du runtime (runtime).

Dets

dets.erl sur clause_dets (builtins/dets/) : format de fichier version 9 d'OTP octet pour octet, mêmes ordres de fichiers.

Encodages

builtins/encoding/.

Messages POSIX

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

Noms réseau

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

Noms de fichiers

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 : la transformation syntaxique qlc à l'exécution, pour qlc:string_to_handle/1,2,3 et qlc:q/1,2 dans le code évalué. Les modules compilés avec qlc.hrl reçoivent toujours la transformation de l'OTP hôte (transformations syntaxiques).

Qlc

library/stdlib/qlc.erl : toutes les fonctions sont en Erlang, car l'évaluation appelle les funs de la requête. Écrit à partir de la documentation d'OTP ; les algorithmes sont ceux d'OTP quand les réponses, leur ordre ou info/1,2 les rendent observables.

Chaînes

builtins/string/ : toutes les fonctions de string.

Chaînes URI

builtins/uri/.

Nombres aléatoires

builtins/rand/.

Calendrier

builtins/calendar.cpp.

Minuteurs

builtins/timer.cpp.

Termes persistants

builtins/persistent_term.cpp sur la table du runtime (runtime).

Module unicode

builtins/unicode/ : chaque fonction est une builtin.

Module code

builtins/code.cpp. Aucun processus code_server ; les réponses décrivent le programme lié.

Module io

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

Module os

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

Module init

builtins/init.cpp, library/erts/init.erl. Un système démarré sans script d'amorçage.

Atomics et compteurs

builtins/atomics.cpp.

Erts internal

builtins/erts_internal.cpp, library/erts/erts_internal.erl : les fonctions appelées par stdlib et kernel.

Unicode util

unicode_util.erl sur les builtins clause_unicode et les tables générées (unicode/tables.cpp).

io_lib

io_lib.erl, builtins/io_lib/. Listes profondes de caractères d'OTP construites dans une arène C++ ; io:format utilise le même moteur.

Tables du compilateur

builtins/front_end/.

Erl scan

erl_scan.erl sur clause_erl_scan:scan/6 (front_end/scanner*.cpp), son propre analyseur lexical suivant scan1/5 d'OTP.

Erl parse

erl_parse.erl sur clause_erl_parse:parse/1 (front_end/parser*.cpp), un analyseur par descente récursive de la grammaire d'OTP.

Erl eval

erl_eval.erl interprète le format abstrait en Erlang ; les builtins clause_erl_eval traitent les segments de syntaxe binaire (front_end/erl_eval.cpp) et la correspondance de motifs (front_end/eval_match.cpp), et erl_eval:partial_eval/1 et is_constant_expr/1 sont aussi des builtins.

Erl lint

Les vérifications d'erl_lint sont des builtins (front_end/lint*.cpp) écrites d'après erl_lint d'OTP clause par clause ; erl_lint.erl garde ce qui appelle des funs ou d'autres modules.

Erl pp

L'affichage d'erl_pp est une builtin (front_end/pp*.cpp), clause_erl_pp:print/2, portée depuis les deux passes de l'ancien module Erlang ; erl_pp.erl garde les hooks et legalize_vars/1.

Epp

Les conditions -if et -elif d'epp sont évaluées par une builtin, clause_epp:eval_if/1 (front_end/epp_eval.cpp), donc un programme qui prétraite des fichiers ne lie pas erl_eval.

Erl expand records

erl_expand_records:module/2 est une builtin (front_end/expand_records.cpp) : le développement parcourt les formes en C++ au lieu d'une vaste sélection de clauses Erlang, donc les programmes qui l'appellent ne compilent aucun code supplémentaire.

Module zlib

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

Module zstd

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

Codec ASN.1

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

Clé publique

builtins/public_key/ dans clause_runtime, library/public_key/clause_public_key.erl (public_key) : les parcours de records et tables de pubkey_translation et pubkey_cert_records d'OTP, appelés par clause_public_key_codec.

Module crypto

builtins/crypto/ dans l'archive séparée clause_runtime_crypto, library/crypto/crypto.erl et clause_crypto.erl.

Module re

builtins/re/, re.erl sur PCRE2 embarqué (PCRE2).

Prim eval

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