O REPL
O console interativo: avaliar, inspecionar a árvore, medir tempo e carregar um arquivo na sessão.
O REPL é onde se responde "o que essa linha faz?" sem criar arquivo. Ele carrega o mesmo interpretador, a mesma biblioteca e o mesmo analisador — o que você vê ali é o que o programa vai fazer.
dataforge replforge> x := 21
forge> x * 2
=> 42
forge> :type x
Integer = 21
forge> exitOs comandos#
| Comando | O que faz |
|---|---|
:help | a lista (ou help) |
:exit | sai (ou exit, quit, Ctrl+D) |
:env | as variáveis definidas na sessão |
:type <expr> | o tipo e o valor de uma expressão |
:doc <nome> | o que é um nome definido na sessão |
:check <código> | roda o analisador estático sobre o trecho |
:tokens <código> | o fluxo de tokens — para entender o lexer |
:ast <código> | a árvore sintática |
:time <código> | executa e mede |
:load <arquivo> | carrega e executa um .df na sessão atual |
:save <arquivo> | grava o histórico da sessão num .df |
:history [n] | os últimos comandos |
:modules | os módulos Arcane disponíveis |
:reset | zera o interpretador |
:clear | limpa a tela |
:version | a versão |
Blocos de várias linhas#
Uma linha terminada em : abre um bloco, que continua até uma linha em branco:
forge> action dobro(n):
... yield n * 2
...
forge> dobro(21)
=> 42Carregar um arquivo e continuar de dentro dele#
:load é o que transforma o REPL em ferramenta de depuração: o programa roda, e você fica com as variáveis dele ao alcance.
forge> :load src/main.df
forge> :env
forge> clientes[0]
forge> calcular_total(clientes)Entender a linguagem por dentro#
Três comandos existem para responder perguntas sobre a própria linguagem, e são os mesmos que se usa ao mexer no interpretador:
forge> :tokens x := 7 ~/ 2
forge> :ast given a: out 1
forge> :check xs := [1, 2]
out xs[10]O :tokens é a forma rápida de resolver a dúvida do //: seguido de dígito é divisão, seguido de nome é comentário.
Medir no lugar certo#
forge> :time [x * x cycle x in range(100000)]:time mede aquela expressão. Para comparar duas implementações com rigor, use `Arcane.Bench`; para achar onde o tempo vai num programa real, dataforge profile.
O que o REPL não é#
- Não é um editor. Para algo com mais de dez linhas,
:savee siga num arquivo. - Não guarda estado entre sessões.
:savegrava o histórico; fechar o console perde as variáveis. - Não substitui teste. O que funcionou no console precisa virar
trialpara continuar funcionando amanhã.