00 — Introdução
Aura 0.2.0a6. Aura transpila para Python e roda no CPython. Este capítulo explica o modelo mental; os capítulos 01–16 ensinam a linguagem.
O que é Aura
Aura é uma linguagem de programação com sintaxe própria, transpilada para código-fonte Python e executada pelo CPython. Quando você escreve:
def main() {
print("Hello, Aura!")
}
a toolchain o parseia, o checa, emite Python e roda esse Python. A linguagem é pequena de propósito; o poder vem do target, já que todo módulo Python é alcançável (capítulo 14).
Três níveis são mantidos separados, e a distinção importa por todo este tutorial:
| Nível | O que é |
|---|---|
| Aura | a linguagem — as regras contra as quais você escreve |
| A toolchain Aura | o parser, checker, transpiler e CLI (aura ...) |
| CPython | o target que de fato roda o Python emitido |
Por que transpilar para Python?
Porque você obtém o ecossistema Python e o runtime do CPython sem a sintaxe de superfície do Python. Uma biblioteca que você já tem — json, re, requests, um framework web — é chamável de Aura através do prefixo py.:
import py.math as math
def main() {
print(math.sqrt(16)) // 4.0
}
O que Aura muda, e o que mantém
Aura não é um dialeto de Python com alguns renames. O modelo mental é uma linguagem que deliberadamente:
- exige
let/let mut/constem vez de atribuição nua, então a mutabilidade é visível na declaração (x = 1sozinho não é uma declaração); - usa
def— não háfn,fun,lambdanemfunction; - escreve tipos com colchetes:
Box[T],[int],{str: int};<T>não existe; - escreve o valor nulo como
none;null,NoneeTrue/Falsesão rejeitados; - usa
and,or,not;&&,||,!são rejeitados; - usa
extendspara herança;implementseclass C(A)são rejeitados; - faz todo membro de classe declarar uma visibilidade (
public/private/protected); - tem recursos reais de linguagem que o Python não tem como sintaxe:
matchcom guards e desestruturação,unless,until,guard,loop,?.,??,?:,|>.
Como o target é CPython, parte do comportamento é herdada em vez de inventada:
| Comportamento | Regra |
|---|---|
| Inteiros | precisão arbitrária (o int do Python) |
7 / 2 | 3.5 — divisão verdadeira; não há operador floor // |
-7 % 3 | 2 — o sinal segue o divisor |
| Ordenação de dict | ordem de inserção |
| Tempo de vida de objeto | contagem de referências + GC do CPython |
str | Unicode |
Estas são regras target-specific, documentadas na referência em vez de escondidas. Veja ../language-reference/semantics.md §6.
Um primeiro programa real
def classify(score) -> str {
match score {
case s if s >= 90 { return "A" }
case s if s >= 80 { return "B" }
case _ { return "F" }
}
return "?"
}
def main() {
for score in [95, 83, 40] {
print(f"{score}: {classify(score)}")
}
}
95: A
83: B
40: F
Isso já mostra várias ideias de Aura de uma vez: def, match com guards, f-strings, for ... in e um ponto de entrada main.
O ponto de entrada
Um arquivo executado com aura run deve declarar um def main() de nível superior. O runtime chama main para você — nunca escreva uma chamada main() à direita. Um arquivo usado apenas como import (um módulo) não precisa de main.
def main() {
// your program
}
main pode não receber parâmetros ou receber um único parâmetro args, pode ser async e pode retornar um int para definir o código de saída do processo. Referência: ../language-reference/functions.md §9.
Como esta trilha é organizada
- Os capítulos 00–06 ensinam o núcleo: variáveis, tipos, controle de fluxo, funções.
- Os capítulos 07–08 cobrem orientação a objetos.
- Os capítulos 09–10 cobrem coleções e programação funcional.
- Os capítulos 11–12 cobrem pattern matching e erros.
- Os capítulos 13–16 cobrem módulos, interop com Python, decorators/macros e a CLI.
Todo capítulo termina com um link Próximo passo e, onde relevante, um ponteiro para a regra exata na referência da linguagem. O tutorial ensina; a referência define. Quando você precisar de uma resposta precisa sobre uma construção, vá à referência.