Clause
← All dokumentation

Översatt från det engelska originalet · 06042fa · 2026-10-09 · Läs på engelska

Native records

Beslut i plan 11 step 31A (2026-10-07). Det avgränsar OTP 29:s record-former utöver vanliga tupel-records och fastställer deras representation, operationer och fel. Step 31B implementerade runtime-cellerna och CLAUSE_record_v1; 31C kompilerar lokala native records, 31D kvalificerade och importerade former med -export_record/-import_record, 31E anonyma former. Tupel-records beskrivs i termer.

OTP 29 markerar native records som experimentella. Fakta nedan kommer från de fastlåsta maint-29-källorna (erl_lint, erl_expand_records, v3_core, beam_core_to_ssa, erts/emulator/beam/erl_record.c, utils.c, erl_printf_term.c) och liveprober på OTP 29.1.1.

Omfattning

Alla tre former utöver tupel-records är valda. De delar en representation, så de behöver inget separat representationsbeslut:

FormSyntaxSteg
Native record, lokalt-record #r{...}., #r{...}, X#r.f, X#r{...}, mönster, is_record/1,2,331C
Kvalificerade och importerade#m:r{...}, X#m:r.f, X#m:r{...}, mönster; -export_record, -import_record31D
Härledda (anonyma)X#_.f, X#_{...}, mönstret #_{...}31E

Inte valt: reflektionsmodulen records (ett bibliotek, med bibliotekarbetet i step 39), term_to_binary (RECORD_EXT) och uppgradering av kod under drift (D01). Anrop till records:* förblir diagnostiken unknown module.

Representation

Operationer

M är den aktuella modulen. Alla fel har klassen error; badrecord-nyttolaster är det felaktiga värdet utom vid misslyckad extern konstruktion.

OperationGodtarFel
Lokal konstruktion #r{...}Alltid (definitionen är lokal)Okänt fält eller saknat värde är kompileringsfel
Extern konstruktion #m:r{...} (även importerad #r{...}, även #M:r)m:r definierad i batchen och exporterad{badrecord, {m, r}}; sedan {badfield, {{m, r}, F}}, {novalue, {{m, r}, F}} (badfield vinner)
Lokal åtkomst X#r.fNative record med namnet r (modul och exportflagga kontrolleras inte, som i OTP:s runtime){badrecord, X}; saknat fält {badfield, {{Mod, r}, f}}
Extern åtkomst X#m:r.fModul m, namn r, exporterat{badrecord, X}; {badfield, ...}
Anonym åtkomst X#_.fVilket native record som helst (export kontrolleras inte, som i OTP:s runtime){badrecord, X}; {badfield, ...}
Lokal uppdatering X#r{...}Modul M, namn r{badrecord, X}; okänt fält {badfield, ...}
Extern uppdatering X#m:r{...}Exporterat, modul m, namn rsamma
Anonym uppdatering X#_{...}Exporterat eller modul Msamma
Lokalt mönster #r{...}Modul M, namn r, varje listat fält finnsingen matchning
Externt mönster #m:r{...}Modul m, namn r; exporterat när ett fält listasingen matchning
Anonymt mönster #_{...}Vilket native record som helst; exporterat eller modul M när ett fält listasingen matchning

Regler vid kompilering

Meddelanden följer erl_lint:

Utskrift och ordning

Behållna skillnader

OTPClause
Fältordningen för display följer atomindexDefinitionsordning
Extern konstruktion för en modul som inte är laddad misslyckas tills den laddasVarje modul i batchen laddas vid start; en modul utanför batchen misslyckas alltid
Kompilatorn kan vika == mellan records till =:= (#r{a=1} == #r{a=1.0} är falskt)Runtime-== (sant)
Okända fält vid åtkomst/uppdatering/i mönster, kvalificerad konstruktion i den egna modulen utan värden, oanvända records eller records definierade i headerfiler: varningarInga varningar