Clause
← Toda a documentação

O original em inglês mudou desde esta tradução, pelo que partes dela podem estar desatualizadas. Ler em inglês

Traduzido do original em inglês · 1e3a39c8-dirty · 2026-10-26

Módulos de biblioteca

O Clause inclui as suas próprias versões dos módulos do OTP que os programas chamam, escritas em Erlang a partir do comportamento documentado do OTP (não copiadas das fontes do OTP) sobre builtins do runtime, e compila-as juntamente com os programas que as usam.

Conteúdo

Cada módulo fornecido exporta a lista completa do OTP 29 para o seu nome; o seu inventário <module>.terms (ficheiros) regista que funções estão implementadas e quais são stubs.

MóduloConteúdo
listsAs funções habituais; funções de dados como sublist/2,3, flatten/1,2, sort/1, usort/1, keymember/3, zip/2,3, merge/2 são builtins do runtime; todas as funções documentadas estão implementadas (módulo lists)
mapsTodas as funções documentadas; get/3, merge/2, intersect/2, with/2, ... são builtins do runtime, as funções que recebem funs são Erlang (módulo maps)
ordsets, orddict, proplistsTodas as funções documentadas; os percursos de listas são builtins do runtime, as funções que recebem funs são Erlang (coleções)
calendarTodas as funções documentadas; a aritmética gregoriana como builtins do runtime, a hora local e RFC 3339 em Erlang (calendar)
proc_lib, sysTodas as funções documentadas: criação de processos com antecessores e chamadas iniciais, arranques síncronos (init_ack, init_fail), etiquetas, stop/1,3, relatórios de falhas e o seu texto; o protocolo de mensagens de sistema e opções de depuração (trace, log, statistics, log_to_file, funs instaladas) com as formas das listas de depuração do OTP
gen_server, gen_statem, gen_event, gen_fsm, genTodas as funções documentadas em Erlang sobre proc_lib e sys, com as mensagens do OTP ('$gen_call' com etiquetas de alias, '$gen_cast', ...), resultados e ações dos callbacks, coleções de identificadores de pedidos, termos de erro e textos de relatórios; gen contém o que partilham
supervisor, supervisor_bridgeTodas as funções documentadas: especificações de processos filhos e erros do OTP, estratégias, intensidade de reinício, regras de encerramento, filhos simple_one_for_one e encerramento automático, como um gen_server
logger, logger_formatter, logger_std_h, logger_filters, logger_handlerTodas as funções documentadas em Erlang: configuração primária, de handlers e de proxy com as verificações e termos de erro do OTP, níveis por módulo, metadados de processos, filtros, as macros ?LOG_* de kernel/include/logger.hrl, modelos de formatação e o cabeçalho antigo, logger_std_h em dispositivos e ficheiros com rotação, compressão e filesync/1, logger_disk_log_h em registos de disco halt e wrap (ambos sobre clause_logger_h, opções e verificações comuns dos handlers do OTP). O servidor logger é o clause_logger do Clause, iniciado na primeira utilização com o handler predefinido do OTP em standard_io (a variável de ambiente CLAUSE_LOGGER_TYPE=standard_error passa-o para o erro padrão, como faz o executor de goldens para corresponder aos goldens feitos com o handler do OTP aí); os níveis por aplicação precisam de application
disk_log, wrap_log_reader, clause_disk_log, clause_disk_log_serverTodas as funções documentadas em Erlang: registos halt, wrap e rotate, internos e externos, com os formatos de ficheiro do OTP (cabeçalhos de registo, estruturas de itens com MD5 de itens grandes, ficheiros de índice e tamanho wrap, arquivos rotate), pelo que os ficheiros são idênticos aos do OTP byte a byte; um processo por registo com proprietários, utilizadores, notificações, bloqueio com pedidos em fila, registo antecipado, uma cache de escrita despejada por tamanho e temporizador, reparação, blocos só de leitura que contam bytes inválidos; o servidor de registo disk_log_server com as tabelas nomeadas disk_log_names e disk_log_pids; wrap_log_reader sobre o mesmo leitor de blocos
error_logger, error_logger_file_h, log_mf_hTodas as funções documentadas: mensagens e relatórios como eventos de registo com os metadados error_logger do OTP, handlers de relatórios no gestor de eventos error_logger alimentado pelo handler de logger error_logger, logfile/1 com o texto de relatório antigo, ficheiros wrap com o formato de índice e record do OTP
pg, data_publisherTodas as funções documentadas: âmbitos como servidores data_publisher com as tabelas ETS do OTP, adesões, saídas, membros que terminam, monitores de âmbito e grupo; o âmbito não tem pares
global, global_groupTodas as funções documentadas como num nó não distribuído: nomes (também {global, Name} nos behaviours), bloqueios e transações sobre um global_name_server iniciado na primeira utilização; global_group sem grupos; o locker e os mecanismos internos de distribuição são declinados
rpc, erpcTodas as funções documentadas: chamadas a este nó executadas em processos criados para o efeito (rex inicia-se na primeira utilização) com os resultados e erros do OTP; os outros nós estão indisponíveis ({badrpc, nodedown}, {erpc, noconnection})
net_adm, net_kernel, auth, seq_traceAs respostas do OTP para um nó que não está ativo (pang, ignored, #{started => no}, nocookie); net_kernel:start/1,2 e os mecanismos internos da distribuição são declinados; seq_trace mantém o token de cada processo sem rastreio
trace, erl_tracerO rastreio não é suportado: todas as funções de trace e o tracer predefinido de erl_tracer (enabled/3, trace/5) lançam notsup, como as funções de rastreio de erlang (módulo erlang); erl_tracer:behaviour_info/1 lista os callbacks do OTP
error_handlerAs funções de chamadas indefinidas, que podem ser chamadas diretamente; o próprio runtime lança undef e nunca as chama; breakpoint/3 declinado (sem interpretador)
timerTodas as funções documentadas sem o servidor de temporizadores do OTP: envios temporizados para pids locais são erlang:send_after/3, cada outro temporizador é um processo próprio alcançado por um alias no seu TRef; as conversões e now_diff/2 são builtins do runtime (timer)
filelib, clause_filelibTodas as funções documentadas: padrões glob compilados e comparados por builtins do runtime com as regras, peculiaridades e erros do OTP, o percurso de diretórios, consultas, ensure_dir/1, ensure_path/1, fold_files/5,6, find_file/2,3, find_source/1,2,3 (source_search_rules do kernel ou os valores predefinidos do OTP) e safe_relative_path/2 em Erlang; também as formas não documentadas que recebem um módulo (file, erl_prim_loader ou outro), compile_wildcard/1 (auxiliar de depuração do OTP) como stub (filelib)
file_sorterTodas as funções documentadas em Erlang: sequências do OTP (size bytes ordenados em memória), fusões (no_files ficheiros temporários de cada vez, blocos de 16 KiB, fluxos ordenados pelos objetos em memória intermédia e números de ficheiro) e verificações seguidas passo a passo, pelo que os termos que comparam como iguais saem e sobrevivem a unique como no OTP; formatos binary_term, binary, term e fun, header, compressed (através da camada gzip de file), tmpdir, funs de entrada e saída, termos de erro do OTP
zipTodas as funções documentadas em Erlang, seguindo a disposição dos arquivos do OTP byte a byte (cabeçalhos locais e centrais feitos por UNIX 6.1, campos extra de timestamp estendido e uid/gid UNIX, zip64 acima de 4 GiB, blocos deflate de 8 KiB com despejos completos sobre zlib), pelo que os arquivos são iguais aos do OTP; ficheiros ou binaries de entrada e saída através das funs de entrada e saída do OTP, filtros, cwd, keep_old_files, skip_directories, foldl/3, arquivos zip_open/1,2 servidos por um processo ligado, t/1, tt/1, termos de erro do OTP; os records de stdlib/include/zip.hrl
erl_tarTodas as funções documentadas em Erlang, seguindo as regras de formato do OTP byte a byte: cabeçalhos USTAR, nomes longos divididos num prefixo ou movidos para cabeçalhos estendidos pax (tal como nomes longos ou não ASCII, ligações e nomes de proprietários, e números demasiado largos para octal), leitura de arquivos v7, GNU (nomes e ligações longos, ficheiros esparsos), STAR, USTAR e pax com as peculiaridades do OTP (campos em base 256, tempos pax), compressed através da camada gzip de file, binaries lidos como ficheiros ram, dispositivos, funs de E/S do utilizador init/3, max_size, keep_old_files, files, cwd, verbose, verificações de caminhos inseguros, termos de erro do OTP e format_error/1
zstd, clause_zstdTodas as funções documentadas: compressão e descompressão numa só operação e em fluxo, parâmetros, dicionários (em bruto ou por referência), cabeçalhos de frames e identificadores de dicionários, em Erlang sobre builtins do runtime que mantêm contextos libzstd 1.5.7 como o NIF do OTP (zstd); file:open/2 aceita {zstd, Options}
beam_lib, erl_abstract_codeTodas as funções documentadas em Erlang, seguindo o tratamento de blocos do OTP: o percurso IFF com os erros do OTP, tabelas de átomos nas duas codificações, tabelas de símbolos, atributos, informação de compilação, literais, informação de depuração e código abstrato através do backend erl_abstract_code, documentação (records de kernel/include/eep48.hrl), MD5 dos blocos significativos, comparação e remoção de informação de ficheiros, diretórios e releases, beams comprimidos com gzip, build_module/1, e o servidor de chaves criptográficas com desencriptação da informação de depuração (através de crypto, chamado dinamicamente: ligue-o com --with-crypto)
io_ansiTodas as funções documentadas em Erlang: sequências de terminal virtual do OTP 29 como as sequências ANSI integradas que o OTP usa sem terminfo (as consultas terminfo respondem {error, enotsup}), format/1,2,3 e render/1,2 sobre io_lib, fwrite/1,2,3,4 como pedidos put_ansi apresentados pelo servidor de entrada padrão, scan/1, e enabled/0,1 a partir do indicador de terminal do dispositivo (módulo io)
win32regTodas as funções documentadas: análise de chaves do OTP (raízes, caminhos absolutos, relativos e ..), chave atual, valores inteiros, strings e binaries, listagens e eliminações sobre o driver do registo do Windows (o registo); {error, enotsup} noutros sistemas, como no OTP
argparse, clause_argparseTodas as funções: validação com os erros do OTP, análise (opções, flags, nargs, ações, tipos com escolhas, limites e expressões regulares, tipos personalizados, subcomandos, prefixos, valores predefinidos) com os maps de argumentos e erros do OTP, help/1,2 com a disposição e modelos do OTP, run/3 com todas as formas de handler, como builtins do runtime que pedem ao Erlang para chamar as funs (argparse); sem progname, o nome do próprio programa
escriptcreate/2 e extract/2 seguindo a disposição de secções e leitura de cabeçalhos do OTP (linhas shebang, de comentário e de argumentos do emulador; corpos source, beam e archive através de zip); script_name/0 é o caminho do executável; a execução de escripts (start/0,1, parse_file/1) é declinada
filenameTodas as funções documentadas segundo as regras Unix e Windows do OTP para o anfitrião; os percursos de nomes são builtins do runtime, absname/1,2 e basedir/2,3 (a partir de HOME, das variáveis XDG e de APPDATA) são Erlang (filename)
uri_stringTodas as funções documentadas como builtins do runtime: análise de RFC 3986 com os fragmentos de erro do OTP, recomposição, normalização, resolução, codificação percentual e consultas form-urlencoded (uri_string)
jsonTodas as funções documentadas com os iodata, erros e ordem de callbacks do OTP; decode/1, encode/1, format/1,2 e as funções de escape de binaries são builtins do runtime, os codificadores e formatadores que recebem funs e os descodificadores com callbacks são Erlang (codificações)
rand, randomTodas as funções documentadas com os estados e sequências do OTP; os algoritmos do OTP correm como builtins do runtime, os geradores plug-in em Erlang (números aleatórios)
stringTodas as funções documentadas como builtins do runtime, percorrendo chardata como string.erl do OTP para manter as formas dos resultados do OTP (string)
base64Todas as funções documentadas como builtins do runtime (codificações)
arrayTodas as funções documentadas sobre o record do OTP 29; as operações sobre o record são builtins do runtime, os folds e mapfolds são Erlang (coleções)
gb_trees, gb_sets, queueTodas as funções documentadas sobre as formas de árvores e filas do OTP; as operações sem funs são builtins do runtime (coleções)
dict, setsTodas as funções documentadas sobre os records do OTP (conjuntos da versão 1) e maps (versão 2); as operações sem funs são builtins do runtime (coleções)
ioget_line/1,2, get_chars/2,3 (servidor da entrada padrão ou um ficheiro aberto), fread/2,3 (um pedido get_until sobre io_lib:fread/3), read/1..4, scan_erl_exprs/1..4, scan_erl_form/1..4, parse_erl_exprs/1..4, parse_erl_form/1..4 (pedidos get_until sobre erl_scan:tokens/3,4, analisados por erl_parse), request/1,2, requests/1,2 (o protocolo de E/S do OTP, ficheiros), getopts/0,1, setopts/1,2, columns/0,1, rows/0,1 (tamanho do terminal sobre builtins de clause_io), get_password/0,1, write/1,2; format/1,2,3, fwrite/1,2,3, put_chars/1,2 e nl/0,1 são builtins do runtime (io)
io_libEscritores, verificações, funções de recolha, o motor de formatação, o formatador de apresentação (print/1,4, ~p, chars_limit) e o scanner (fread/2,3) como builtins do runtime nas formas de listas profundas do OTP, funs maps_order que ordenam chaves em clause_io_lib; get_until, format_prompt e write/3 em Erlang (io_lib)
sofs, clause_sofsTodas as funções; as operações de dados são builtins do runtime, as funções que recebem funs e as conversões de dígrafos são Erlang (conjuntos de conjuntos)
etsTabelas, leituras, escritas, percursos e atualizações como builtins do runtime sobre as suas tabelas; foldl/3, foldr/3, i/0..3 e fun2ms/1 em Erlang; especificações de correspondência (famílias select, match, match_spec) como builtins sobre o interpretador do runtime, match_spec_run/2, test_ms/2, repair_continuation/2, match_delete/2 e init_table/2 em Erlang; ficheiros de tabelas (tab2file/2,3, file2tab/1,2, tabfile_info/1) em Erlang sobre file e clause_disk_log; to_dets/2 e from_dets/2 em Erlang sobre dets; table/1,2 em Erlang sobre qlc:table/2 (ets)
graphTodas as funções sobre o record do OTP; as consultas e percursos são builtins do runtime, as atualizações são Erlang (graph)
digraph, digraph_utilsTodas as funções sobre o record de três tabelas do OTP; as atualizações e leituras são Erlang sobre ets, as pesquisas de caminhos e os percursos de digraph_utils são builtins do runtime que leem as tabelas, subgraph/2,3 e condensation/1 em Erlang (digraph)
dets, clause_detsTodas as funções documentadas: processos de servidor e de tabela do OTP em Erlang sobre um motor C++ do formato de ficheiro versão 9 do OTP, ficheiros idênticos byte a byte aos escritos pelo OTP; table/1,2 em Erlang sobre qlc:table/2 (dets)
ms_transformTodas as funções em Erlang sobre o formato abstrato: parse_transform/2 traduz funs literais passadas a ets:fun2ms/1 e dbg:fun2ms/1 nas formas de um módulo, transform_from_shell/3 as cláusulas de uma fun da shell, com as especificações de correspondência, avisos de ocultação e códigos de erro do OTP. Um módulo que usa a transformação em tempo de compilação continua a executar o ms_transform do OTP do anfitrião (parse transforms)
qlc_pt, clause_qlc_ptA parse transform qlc em tempo de execução (não documentada no OTP): transform_expression/2, transform_from_evaluator/2 e parse_transform/2 como builtins do runtime com o código de consulta gerado, mensagens e anotações do OTP; ms_transform executa-se em Erlang a pedido (qlc_pt). Os módulos compilados que incluem qlc.hrl continuam a usar a transformação do OTP do anfitrião (parse transforms)
qlcTodas as funções em Erlang, escritas a partir da documentação do OTP: identificadores de consultas compiladas (identificadores qlc_lc do OTP provenientes da transformação), listas, tabelas table/2, append/1,2, sort/1,2 e keysort/2,3; avaliação com pesquisas de constantes, especificações de correspondência, junções por fusão e pesquisa, cache (ets, list com transferência para ficheiros temporários), unique, ordenações de file_sorter, cursores como processos, info/1,2 sobre erl_pp, string_to_handle/1,2,3 sobre qlc_pt, termos de erro do OTP e format_error/1. Os identificadores, tabelas, chaves do dicionário de processos e nomes de ficheiros temporários são os do OTP. stdlib/include/qlc.hrl nomeia a transformação qlc, que se executa no OTP do anfitrião (qlc)
shell, clause_shell, clause_shell_eval, clause_shell_commands, clause_shell_recordsTodas as funções documentadas em Erlang, escritas a partir da documentação do OTP: a shell interativa na entrada padrão (shell interativa): prompts, mensagem inicial, histórico (e/1, v/1, h/0), associações, records (rd, rr, rl, rp, rf), funções, tipos e specs definidos no prompt, relatórios de exceções sobre erl_error, resultados apresentados como no OTP (profundidade 30, records), shells restritas, catch_exception/1 e as funções de configuração
shell_default, cTodas as funções: comandos de c com a saída do OTP (i/0, regs/0, m/0,1, ls/0,1, flush/0, help/0, ...); a compilação (c/1,2,3, lc/1, nc/1,2), xm/1 e y/1,2 reportam a chamada falhada como o OTP sem compiler, tools ou parsetools; h/1,2,3 não encontram documentação no código ligado; os comandos i do depurador reportam a aplicação em falta
edlin, edlin_expandedlin:keymap/0 (o mapa de teclas do editor de linha chamador; undefined fora de um); edlin_expand:expand/1,2 em Erlang: completamento de módulos, funções (aridades Mod:, fun Mod:Fun/), BIFs, comandos da shell, funções definidas na shell, palavras-chave, associações, nomes e campos de records, chaves de maps e caminhos de ficheiros, com as secções e correspondências antigas do OTP; os argumentos de uma chamada são sugeridos como cabeçalhos Mod:Fun/Arity (o código ligado não tem especificações)
shell_docs, clause_shell_docs_markdownTodas as funções em Erlang, escritas a partir da documentação do OTP: render/2..5, render_type/2..5 e render_callback/2..5 de um dado bloco docs_v1 (application/erlang+html, text/markdown convertido como a shell do OTP o converte, outros formatos text/ tal como estão) com a disposição, quebra de linhas, marcadores e estilos ANSI do OTP, normalize/1, validate/1, supported_tags/0; idêntico ao OTP nas 51,249 apresentações dos blocos de documentação do próprio OTP 29. O código ligado não tem blocos próprios (code:get_doc/1)
erl_parse, clause_erl_parseTodas as funções: parse_form/1, parse_exprs/1, parse_term/1 e parse/1, parse_and_scan/1 do yecc sobre um analisador do runtime com o formato abstrato e erros do OTP; normalise/1, abstract/1,2, tokens/1,2 e as tabelas de precedência como builtins; os percursos de anotações e format_error/1 em Erlang (erl_parse)
erl_eval, clause_erl_evalTodas as funções em Erlang sobre o formato abstrato: associações como orddicts ou maps, handlers de funções locais e não locais (os operadores, BIFs e erros como chamadas erlang:raise/3 passam pelo segundo), funs interpretadas com o ambiente do OTP, comprehensions com geradores estritos e zip, maybe, native records, receive sobre prim_eval; correspondência de padrões, segmentos de sintaxe de bits e avaliação de constantes são builtins do runtime (erl_eval). exprs/2 e expr/2 verificam um comando com erl_lint:exprs_opt/3; qlc:q/1,2 de uma list comprehension de consulta passa por qlc:transform_from_evaluator/2 com as chamadas locais ocultas, como no OTP
erl_errorTodas as funções em Erlang sobre io_lib: format_exception/3,4 e os formatadores internos (format_exception/6,7,8, format_stacktrace/4,5, format_call/4,5, format_fun/1,2) com as explicações, disposições, callbacks error_info e opções do OTP. Os stack traces do próprio Clause não têm localizações nem error_info (diferenças), pelo que os seus relatórios não mostram nenhum dos dois
erl_pp, clause_erl_ppTodas as funções; a apresentação é um builtin do runtime (erl_pp): formas, atributos, tipos e specs, funções, guards e expressões com a disposição (largura de linha, indentação, fragmentos de strings, parênteses de precedência) e opções do OTP; os hooks e legalize_vars/1 executam-se aqui; idêntico ao OTP nas formas de 347 ficheiros-fonte e suites do OTP, e em 80 deles com cinco conjuntos de opções, incluindo hooks
erl_lint, clause_erl_lintTodas as funções; as verificações são builtins do runtime (erl_lint) com os erros, avisos, opções e ordem do OTP, e os textos de format_error/1; o behaviour_info/1 dos behaviours é chamado aqui, e is_guard_test/3 consulta primeiro a sua fun sobre as chamadas locais; idêntico ao OTP em 481 ficheiros-fonte e suites do OTP, 474 fragmentos de suites e 816 expressões de comandos
erl_expand_recordsmodule/2 como builtin do runtime (erl_expand_records): records de tuplos expandidos para operações de tuplos, native records e native records importados mantidos, chamadas de imports e BIFs com o respetivo módulo, testes guard is_record/3 transformados em padrões, com as opções dialyzer, expand_inits e [no_]strict_record_tests; idêntico ao OTP nas formas de 347 ficheiros-fonte e suites de testes do OTP
epp, clause_eppTodas as funções em Erlang exceto as condições -if, avaliadas por um builtin (epp): um servidor por ficheiro-fonte aberto com as formas, macros (argumentos, sobrecarga, ??Arg, ?FUNCTION_NAME, predefinidas e da opção macros), inclusões, condicionais, -file, -feature, -error/-warning, ficheiros de documentação e erros do OTP; os ficheiros são lidos por inteiro e descodificados pelo seu comentário de codificação. Idêntico ao OTP em 1,110 chamadas parse_file/scan_file em ficheiros-fonte e suites do OTP. -include_lib encontra cabeçalhos apenas pelo caminho de inclusão até code:lib_dir/1
erl_scanTodas as funções: string/1,2,3 e tokens/3,4 reentrante sobre um scanner do runtime com os tokens, anotações, opções, callbacks e erros do OTP; funções de acesso e format_error/1 em Erlang (erl_scan)
erl_internal, erl_annoTodas as funções como builtins do runtime: tabelas de BIFs, guards, testes de tipos e operadores, funções predefinidas e anotações do OTP (tabelas do compilador)
records, erl_featuresReflexão de native records, definições em tempo de execução e definições compiladas com valores predefinidos avaliados (native records); funcionalidades do OTP 29 e aquelas com que cada módulo foi compilado (tabelas do compilador)
binaryTodas as funções; replace/3,4 e list_to_bin/1 em Erlang, as outras builtins do runtime (módulo binary)
mathTodas as funções como builtins do runtime (módulo math)
unicodeTodas as funções como builtins do runtime: conversões, bin_is_7bit/1, marcas de ordem de bytes, formas de normalização, categorias e propriedades de identificadores (módulo unicode)
unicode_utilTodas as funções sobre tabelas geradas, os percursos de chardata como builtins do runtime (unicode_util)
reTodas as funções exceto import/1, sobre o PCRE2 (módulo re)
fileTodas as funções documentadas: abrir, ler, escrever, posicionar e fechar ficheiros (em disco, compressed, ou em memória com ram), leituras e escritas posicionadas, truncate/1, advise/4, allocate/3, leituras e escritas de ficheiros inteiros, consult/1, eval/1,2, script/1,2 e as suas formas path_ com path_open/3 (o ficheiro lido por inteiro e descodificado pelo seu comentário de codificação, UTF-8 por omissão, como faz epp:set_encoding/1 em clause_epp, depois analisado forma a forma com os resultados e erros do OTP), informação de ficheiros e as suas alterações (write_file_info/2,3, change_*), operações de diretórios sobre o driver de ficheiros, sendfile/2,5 como alternativa por blocos do OTP e format_error/1 (ficheiros)
erl_posix_msgMódulo interno do OTP para file:format_error/1: message/1 como builtin do runtime (mensagens POSIX)
gen_tcp, gen_udp, inet, clause_socket, clause_socket_optionsSockets sobre portas de socket, com as suas opções, estatísticas, estado e listagens (sockets); inet:get_rc/0 de clause_inet_config
socketTodas as funções documentadas em Erlang sobre as portas do driver de sockets (sockets): identificadores {'$socket', Ref} mantidos por um processo e tabela clause_socket_registry (proprietários, estados, contadores, meta, monitores, listagens), open/bind/listen/accept/connect, send/sendto/sendmsg/sendv/sendfile/sendmmsg, recv/recvfrom/recvmsg/recvmmsg com os erros de dados parciais do OTP, nowait como mensagens de conclusão no Windows e mensagens select noutros sistemas, cancel/2, nomes de opções e erros de valores inválidos do OTP, info/0,1, i/0,1,2, supports/0,1,2; chamadas SCTP lançam notsup e os pedidos de interfaces são recusados, como no OTP no Windows
gen_sctpTodas as funções documentadas: sem SCTP, pelo que open/0,1,2 respondem {error, eprotonosupport} após as verificações de opções do OTP e as restantes veem um socket fechado ou alheio; error_string/1 tem os textos do OTP
inet_res, clause_inet_configTodas as funções documentadas em Erlang: cliente DNS do OTP sobre gen_udp e gen_tcp (repetições, servidores de nomes alternativos, EDNS, truncagem sobre TCP, esperas servfail, erros do OTP, listas de pesquisa, cadeias CNAME e hostents) com mensagens codificadas e descodificadas pelo codec DNS de clause_net (nomes de rede); a configuração do resolvedor como o OTP a carrega num nó não distribuído (nenhuma no Windows; resolv.conf e o ficheiro hosts noutros sistemas)
net, clause_netTodas as funções documentadas: pesquisas de anfitriões, endereços e serviços e listas de interfaces como builtins do runtime com os resultados de prim_net, os filtros em Erlang; sem espaços de nomes de rede (nomes de rede)
clause_socketPróprio do Clause: o protocolo do driver de sockets partilhado pelos três módulos acima
oscmd/1,2 sobre uma porta com o protocolo de shell, max_size e exception_on_failure do OTP; consultas de ambiente, tempo e versão, find_executable/1,2 e set_signal/2 como builtins (módulo os)
codeConsultas de módulos carregados sem code server; o caminho de código num termo persistente com as alterações de caminhos do OTP, pesquisas lib_dir/priv_dir, where_is_file/1, all_available/0, clash/0; respostas de carregamento para código ligado (módulo code)
application, application_controllerTodas as funções documentadas: carregamento, chaves, ambientes, arranques com dependências e fases de arranque, paragens, permissões e tipos de reinício com os erros e relatórios do OTP, sobre um controlador iniciado na primeira utilização e clause_application_master (aplicações); gestão de releases, arranque do sistema e controlo distribuído declinados
erlangStubs gerados de todos os exports de erlang do OTP 29; os builtins do catálogo têm corpos de marcador de posição, nif_error/1,2 têm corpo, os restantes lançam {not_implemented, F, A} quando chamados (módulo erlang)
initAs respostas de um sistema arrancado; boot/1, restart/0,1 e make_permanent/2 recusados (módulo init)
persistent_termTodas as funções como builtins do runtime (termos persistentes)
atomics, countersTodas as funções (atomics e counters)
erts_internal, erts_code_purgerO que stdlib e kernel chamam; os grupos de distribuição, .beam, emulador e processo de purga declinados (erts_internal)
erl_prim_loaderConsultas de ficheiros sobre file; carregamento e arquivos declinados (ficheiros)
zlibTodas as funções sobre o zlib fixado (módulo zlib)
prim_eval'receive'/2 sobre os passos de um receive compilado (prim eval)
Módulos ASN.1 de public_key ('OTP-PKIX', 'PKIX1Explicit-2009', ...) e public_key.hrlGerados em tempo de compilação a partir de library/public_key/asn1/ para library-asn1/public_key/ da árvore de compilação (public_key)
public_key, clause_public_key_codec, clause_public_key_keys, clause_public_keyAplicação public_key (com public_key.app): codificação DER e PEM, encriptação PEM, chaves privadas PKCS #8 de todos os tipos e certificados nas formas plain e otp sobre os módulos gerados (public_key, chave pública); chaves, assinaturas, encriptação RSA, geração e acordo de chaves, assinatura de certificados sobre crypto (clause_public_key_keys, chaves); as funções de validação são stubs
clause_asn1O codec que os módulos gerados pelo clau a partir de especificações ASN.1 chamam (codec ASN.1, ASN.1); a aplicação asn1 do OTP (asn1ct, asn1rt_nif) não é fornecida
crypto, clause_cryptoAplicação crypto (com crypto.app), sobre libcrypto do OpenSSL no arquivo do runtime de criptografia (módulo crypto, OpenSSL): listas de algoritmos do OpenSSL ligado (supports/0,1, hash_info/1, info/0, info_lib/0), resumos e estados de hash, HMAC/CMAC/Poly1305 e estados de MAC, pbkdf2_hmac/5, hash_equals/2, exor/2, mod_pow/3, cifras e os seus estados (crypto_init/3,4, crypto_update/2, crypto_final/1, crypto_get_data/1, crypto_one_time/4,5, cipher_info/1), AEAD (crypto_one_time_aead/4,6,7, crypto_one_time_aead_init/4), números aleatórios fortes e os plugins crypto, crypto_cache, crypto_aes e crypto_prng1 de rand, termos de erro do OTP; motores recusados (notsup); modo FIPS alterável como no OTP, ou fixado com clau --fips; chaves públicas (sign/4,5, verify/5,6, encriptação RSA, generate_key/2,3, compute_key/4, privkey_to_pubkey/2: RSA, DSA, DH, ECDSA/ECDH em curvas nomeadas e explícitas, EdDSA, X25519/X448, ML-DSA, SLH-DSA, SRP), ec_curve/1 e ec_curves/0 (parâmetros explícitos da libcrypto ligada), ML-KEM (encapsulate_key/2, decapsulate_key/3)

Os resultados e as razões de erro coincidem com o OTP 29, incluindo as formas de erro das implementações em Erlang do OTP (lists:map(F, x) dá {case_clause, x}, lists:nth(0, L) function_clause, lists:seq(1, 10, 0) badarg) e dos seus BIFs (lists:member/2, lists:keyfind/3, lists:reverse/2, as funções de maps: badarg, {badmap, M}, {badkey, K}). lists:member/2 compara com =:=, lists:keyfind/3 com ==. lists:sort/1 é um builtin estável do runtime (comparação e ordem). Os stack traces indicam as funções da biblioteca, não as do OTP.

Shell interativa

shell:start_interactive/0,1 inicia a shell Erlang nos fluxos padrão, e clau --shell liga-a num executável de que é o ponto de entrada, salvo se --entry nomear outro (compilação). O processo clause_shell ocupa o lugar do user_drv do OTP: apresenta a versão do sistema, inicia o servidor de shell e inicia um novo quando uma shell termina (exit().). O servidor lê cada comando através do servidor de entrada padrão de io, repetindo o prompt em cada linha adicional de um comando, mantém o histórico e inicia o avaliador, que verifica cada expressão com erl_lint, expande records e avalia-a com erl_eval. Os resultados são apresentados com os records da shell pelo formatador de apresentação do runtime (clause_io_lib:pretty/2, io_lib). O fim da entrada termina o programa com estado 0 após *** Terminating erlang (nonode@nohost).

Os comandos chamam módulos pelo nome, pelo que um programa que inicia a shell precisa de poder chamar todos os exports: --shell mantém-nos (exports em uso) e liga todos os módulos da biblioteca; um programa compilado sem essa opção alcança apenas os módulos que nomeia. As linhas de entrada são lidas tal como o terminal as entrega, editadas pelo próprio terminal: não há edição de linha edlin, teclas de histórico nem completamento com Tab (diferenças).

Como os programas os obtêm

Substituições de módulos do runtime

O Clause substitui os módulos do OTP que o ERTS implementa em C (NIFs, BIFs, drivers de portas, os módulos pré-carregados de erts/preloaded/src) e os módulos que o OTP gera durante a sua compilação (unicode_util). O kernel e o stdlib do OTP são Erlang simples, mas chamam esses módulos.

Fornecido ou em falta

Tudo o que precisa do runtime e não pode ser escrito em Erlang simples é decidido por módulo, e por grupo de funções quando um módulo mistura responsabilidades:

As funções triviais para o runtime são implementadas sem uma decisão separada.

A que módulo um nome é resolvido

O OTP é opcional na máquina do utilizador; quando presente, não pode alterar o que uma compilação compila. Um nome de módulo é resolvido por esta ordem:

  1. Entradas explícitas: os códigos-fonte que o utilizador lista (sources, source_dirs, entradas posicionais). Uma que tenha o nome de um módulo do Clause substitui-o, com um aviso que indica ambos os ficheiros.
  2. Módulos do Clause: os módulos da biblioteca, incluindo as substituições fornecidas.
  3. source_search_paths, tal como descrito em projetos.

O nome de um módulo em falta está reservado: um ficheiro com o mesmo nome num caminho de pesquisa (por exemplo erts/preloaded/src/prim_file.erl do OTP) não é usado, e o diagnóstico indica que o Clause não fornece o módulo. Uma entrada explícita pode ainda fornecê-lo, com o aviso de substituição.

ignore_modules aplica-se também aos módulos do Clause: um módulo do Clause ignorado fica em falta no lote, e uma entrada explícita pode então fornecê-lo sem aviso, uma vez que nada é substituído.

Ficheiros

Funções documentadas

library/documented.terms lista as funções públicas que o OTP 29 documenta para erts, kernel, stdlib, crypto e public_key: {Module, Application, Name, Arity}. por função cuja documentação do módulo e da função não está oculta e que não está obsoleta, observada nos blocos de documentação do OTP do anfitrião por tests/compiler/library/observe_docs.escript (executado explicitamente). Os exports não documentados mantêm-se nos inventários mas podem continuar como stubs.

Tipos

Como os módulos do Clause prevalecem sobre os do OTP, o código OTP que nomeia file:filename() ou erlang:time_unit() nas suas specs tem de encontrar esses tipos nos módulos do Clause. Cada módulo fornecido cujo equivalente OTP exporta tipos inclui <module>.types.hrl do seu próprio diretório: a lista -export_type, depois os tipos exportados e os tipos locais e records que eles usam, tal como o OTP os define (a documentação mostra as mesmas definições; a documentação instalada não traz definições de tipos, pelo que estas vêm da implementação: a informação de depuração do beam, ou o código-fonte distribuído de um módulo pré-carregado como erlang). escript tests/compiler/library/observe_types.escript LIBRARY APP MODULE escreve o cabeçalho a partir do OTP do anfitrião, e --check compara as suas formas com uma observação nova (CTest library_freshness); library_modules.py check exige que cada cabeçalho seja incluído pelo seu módulo. Os tipos que os cabeçalhos nomeiam a partir de módulos fora do programa (unicode:chardata(), calendar:datetime()) e as uniões largas do OTP (file:posix() tem mais membros do que o grafo de tipos mantém) resolvem-se para term() sem aviso: os diagnósticos pertencem à biblioteca do Clause, não ao programa do utilizador.

Serviços do kernel no arranque

file, io e code do OTP chamam servidores registados (file_server_2, code_server, o servidor de io de um group leader) que a aplicação kernel inicia no arranque. Um executável do Clause não inicia nenhum deles: os próprios file e io do Clause não precisam de servidor, o logger do Clause inicia o seu servidor na primeira utilização, e um módulo OTP que precise de um falha da mesma forma que falha no OTP sem esse servidor (noproc). O código OTP que chama code em tempo de execução não funciona, portanto. Arrancar toda a aplicação kernel não está planeado.

Aplicações

Registo

O plano do projeto agenda todos os módulos documentados de erts, kernel e stdlib; os programas reais (luerl primeiro) definem as prioridades. Compile-o e execute-o, classifique cada erro (unknown module, undefined function M:F/A, sintaxe ou funcionalidade não suportada, outro) e atribua cada um a um passo do plano, a outro item pendente ou a uma recusa registada. Com o stderr da execução guardado num ficheiro, python tests/compiler/library/library_modules.py report FILE imprime a classificação em tabelas: cada módulo desconhecido com o seu número de erros, os módulos chamadores e as funções chamadas com as aridades; as funções não definidas por módulo; as outras mensagens com as suas contagens.

Ferramentas

Todas ficam em tests/compiler/library/: