Brick compila arquivos fonte .brc para código C, então delega a gcc ou clang para geração de código de máquina. O compilador é escrito em C++20.
.brc → Lexer → Tokens → Parser → AST → Type Checker → C Codegen → .c → gcc -O3 → binário
↕
Macro Expander
Build Eval
src/lexer/)Tokeniza fonte .brc em um fluxo de tokens. Suporta:
fn, struct, if, while, for, match, defer, const, etc.)+ - * / = == != < > <= >= && || ! & | ^ ~ << >> ++ -- += -= *= /= @//src/parser/)Parser recursivo descendente que produz uma AST. Inclui:
src/codegen/)Duas fases:
#line para debugComponentes:
block_memory.c — Bump allocator por blocos (~3 ciclos), TLS, double-bufferpool_allocator.c — Pool allocator O(1) para tipos ≤ 64 byteshot_reload.c — Hot reload via dlopen (Linux) / LoadLibrary (Windows)io.c — I/O com print() formatado e tipo StringTUI ncurses mostrando estado dos blocos: capacidade, uso, pico, contagem de alocações.
Syntax highlighting (TextMate), LSP (completions, hover, go-to-def, signature help), webview de memória.
.gdbinit + pretty-printers Python para BlockCtx e BrickString. Comandos: info blocks, block <name>.
tests/test_codegen.cpptests/test_integration.shtests/features/| Operação | Tempo |
|---|---|
| Block allocation | ~3 ciclos |
| Reset global | ~5 ns (O(1)) |
| Chamada fn (inline) | 0 ciclos |
| Dispatch vtbl | ~2-3 ciclos |
| Pool alloc (≤64B) | O(1) |