Clause
← All dokumentation

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

Använda kompilatorn

./build/debug/bin/clau --parse-check examples/project/src/main.erl
./build/debug/bin/clau --print-pp -I include -DDEBUG examples/project/src/main.erl
./build/debug/bin/clau --print-ast examples/project/src/main.erl

På macOS bygger ./run-macos.sh --parse-check examples/project/src/main.erl först och kör sedan den senaste körbara filen, med alla argument oförändrade. Det godtar åsidosättningar via miljövariablerna BUILD_DIR, BUILD_TYPE och JOBS.

clau [options] <source.erl>...
  --project <path>        Read a TOML project instead of positional sources
  --target <name>         Select a target; repeat for more (default: all)
  --new-project <filename>  Create an annotated starter; append .toml when needed
  --preprocess-check       Check preprocessing only
  --parse-check            Preprocess and check syntax
  --print-pp               Print expanded Erlang source
  --print-ast              Print an indented syntax tree
  --print-source           Print each module as Erlang source
  --print-types            Print each module as source annotated with inferred types
  --print-ir               Print verified IR with Erlang source comments before LLVM optimization
  --print-optimized-ir     Print verified IR with Erlang source comments after LLVM optimization
  --emit obj|llvm-ir|llvm-bc  Write one artifact per module
  --artifact-dir <dir>     Override the artifact root (requires --emit)
  --target-triple <triple>  Select the machine/OS/ABI
  -O0 / -O2 / -Os         Generic O0 (default) / speed / size optimization
  --no-type-specialization  Disable compiler variants at either optimization level
  --verbose               Trace files and compilation phases to stderr
  --impldebug <n[,n...]>   Enable debug output for selected implementation steps
  -I, --include <dir>      Add an include directory (last supplied searched first)
  -D, --define <name[=term]>  Define a macro (default value: true)
  --app-dir <app=dir>      Set an include_lib application directory
  --enable-feature <name>  Enable a language feature
  --disable-feature <name> Disable a language feature
  -h, --help              Show all options
  --version               Show version
  --                      Treat remaining arguments as input paths

Citera sökvägar som innehåller mellanslag och makrovärden som innehåller skalets skiljetecken:

./build/debug/bin/clau --parse-check -I include '-DVERSION={1,0}' \
  --app-dir myapp=examples/project examples/project/src/main.erl

Kontrollägen är tysta vid lyckat utfall; diagnostik går till stderr. Utskriftslägen skriver till stdout och kan kombineras: --print-pp --print-ast skriver ut källkoden före trädet för varje indatafil. Att lägga till --preprocess-check stänger inte av den tolkning som begärs av --parse-check eller --print-ast. Fel kan lämna ofullständig utskrift.

Utan kontroll-/utskriftsåtgärd kör källfiler och --project hela kedjan till verifierade inbyggda objektbuffertar i minnet. Positionella indata bildar en batch; varje projektmål bildar en egen batch. --emit skriver artefakter under build/aot eller --artifact-dir; projekt lägger till ett kodat målnamn och använder en standardrot relativ till manifestet. Filnamnen kodar modulens identitet. -o PATH länkar positionella indata, eller ett valt projektmål, till en körbar fil med Clang och runtime-biblioteket (ingång: --entry MODULE[:FUNCTION], manifestets entry, eller den enda modul som exporterar main/1). Utan -o länkas projektmål med en output- eller entry-nyckel till sin output i TOML (standard build/<target>), och publiceras först när alla valda mål har länkats. Se körbara filer för kontraktet om ingång, argument och slutstatus.

clau -O2 -o demo answer.erl client.erl && ./demo
clau -O2 --emit obj answer.erl client.erl
clau --print-ir --print-optimized-ir -O2 answer.erl
clau --print-types answer.erl client.erl

IR-inspektion tillåter båda stegen tillsammans och stannar före generering av objekt. Flera ögonblicksbilder är separata moduler; använd --emit llvm-ir för enskilda assemblerfiler. Typinspektion stannar före LLVM och skriver ut varje modul som källkod med härledda funktionssignaturer och annoteringar av formen Expression :: Type. Den godtar alternativ för preprocessor, projekt och utförlighet, men avvisar andra åtgärder, utdatadestinationer och backend-policy. Se kompileringsalternativ.

--verbose skriver ut [pp] <filename> för källfiler och lösta preprocessorinkluderingar, och [parse] <filename> när varje källfil går in i parsern. Nästlade inkluderingar och biblioteksinkluderingar spåras när de laddas; inaktiva inkluderingar hoppas över. Parsern konsumerar expanderade token stegvis, så dess spårning kan komma före spårningen av inkluderingar. [comp] lägger till semantiska faser och backend-faser samt beslut om begränsad specialisering när de startar. Spårning går till stderr i varje läge, även för projekt.

--impldebug 23 eller --impldebug 23,24,27 väljer valfri felsökningsutdata för implementationssteg oberoende av --verbose. Upprepade alternativ kombinerar sina val; dubbletter ignoreras. Värden är decimala 32-bitars heltal med tecken, med valfritt +/- och utan mellanslag eller tomma listelement. Steg 23–27 skriver ut härledda funktionsindata/-resultat och parameterrelationer till stderr med det valda stegets prefix (till exempel [impldebug 27]). Detta är analyserade indata till sänkningen (lowering), inte en IR-dump. Framtida steg kan kontrollera sitt eget nummer; att välja ett steg utan felsökningsutdata har ingen effekt. Samma val gäller positionella indata och varje valt projektmål. Rena frontend-åtgärder för kontroll/utskrift kör inte typhärledning.

Slutstatus: 0 vid lyckat utfall (även med varningar), 1 för fel i källkod/projekt, 2 för användningsfel eller okända målnamn. Varje indatafil har ett oberoende preprocessortillstånd; varje källfel får hela kommandot att misslyckas.

Syntaxkontroller validerar inte semantik och kör inte parse transforms. Kontroll-/utskriftslägen skapar inga utdatafiler och avvisar -o/--output. Standardkompilering utan -o skriver ingen körbar fil.

Se preprocessorn, användning av parsern och valideringsstatus för mer information.

Projekt

Kör det medföljande exemplet med två mål:

./build/debug/bin/clau --parse-check --project examples/project/project.toml
./build/debug/bin/clau --print-ast --project examples/project/project.toml --target app
./build/debug/bin/clau --preprocess-check --project examples/project/project.toml --target tests --target app

Skapa ett annoterat projekt i en befintlig katalog:

mkdir -p build/project-demo
./build/debug/bin/clau --new-project build/project-demo/demo
mkdir -p build/project-demo/src
cp examples/project/src/main.erl build/project-demo/src/main.erl
./build/debug/bin/clau --parse-check --project build/project-demo/demo.toml

Skapandet skriver endast den begärda TOML-filen och vägrar befintliga destinationer. Startfilen innehåller ett mål app som använder src, med alla frontend-alternativ på sina standardvärden. Lägg till källfiler innan den kontrolleras.

Manifestsökvägar är relativa till TOML-filen; CLI-sökvägar är relativa till anropskatalogen. Alla mål körs som standard. Upprepa --target för att välja en ordnad delmängd; upprepade val körs en gång. sources stöder literala filnamn och mönstren *, ?, **; source_dirs hittar rekursivt .erl-filer. Söksökvägar för källfiler lokaliserar endast explicit listade filer. CLI:ns include-sökvägar har företräde, CLI:ns applikationsrötter ersätter matchande namn, CLI:ns funktionsinställningar tillämpas sist, och dubblerade makrodefinitioner förblir fel.

Se projektformat och arbetsflöden. Projekt stöder varje CLI-åtgärd; generering av körbara filer är fortfarande inte implementerad.

Den tillåtna guard-katalogen innehåller kontrollerad is_integer/3, kvalificerade anrop och äldre tester på toppnivå; process-/nodidentiteter och identiteter för native records behåller explicit förmågediagnostik.