Tipos e semântica
Tipos
| Fonte | Interno | Observação |
|---|---|---|
int, i32, i64, i128, u32, u64 | Int | largura/sinal não preservados |
float, f32, f64 | Float | largura não preservada |
bool, char, string, void, null | homônimo | primitivos |
never, any | homônimo | contrato ainda parcial |
Há arrays, tuplas, structs, enums, objetos, funções, genéricos, T?, uniões e
variáveis de inferência. Anotações podem ser omitidas quando o inicializador
fornece informação suficiente.
let, const e var são preservados na AST; mut registra mutabilidade. A
distinção completa entre os três bindings ainda não é estável em todos os
backends.
Operações e fluxo
Aritmética opera sobre números; comparações produzem bool; lógica exige
booleanos; bitwise/shifts destinam-se a inteiros; + também concatena strings
no runtime. Atribuição requer alvo atribuível.
Limitação: a VM ainda avalia ambos os lados de &&/||; não dependa de
curto-circuito com efeitos colaterais.
Condições são verificadas como booleanas. for é voltado a arrays/ranges.
Ranges são experimentais e podem ter custo proporcional ao tamanho.
Funções e estruturas
Funções têm parâmetros posicionais, parâmetros de tipo, retorno opcional e
corpo. async, await, lambdas e extern são front-end/experimentais; não há
modelo assíncrono nem ABI FFI pública.
Structs têm suporte parcial. Enums, interfaces, traits, impl e genéricos têm
representação/análise parcial, mas não despacho ou monomorfização estabilizados.
Patterns são variados, porém exaustividade e bindings não são contrato público.
Memória, erros e segurança
Valores compostos vivem em heap com coleta mark-and-sweep geracional. O usuário
não desaloca manualmente. ref, ref mut e dereferência não formam um sistema
público de empréstimos na alpha.
try, catch, throw, defer e yield são reconhecidos, mas rejeitados
pelos executores. Stack traces/source maps ainda são incompletos. Não trate a
VM ou o interpretador como sandbox: limites públicos de tempo, memória,
recursão e saída ainda não existem.