NovaLang0.2 alpha

Tipos e semântica

Tipos

FonteInternoObservação
int, i32, i64, i128, u32, u64Intlargura/sinal não preservados
float, f32, f64Floatlargura não preservada
bool, char, string, void, nullhomônimoprimitivos
never, anyhomônimocontrato 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.