Pular para o conteúdo

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.

bash
dataforge repl
text
forge> x := 21
forge> x * 2
=> 42
forge> :type x
Integer  = 21
forge> exit

Os comandos#

ComandoO que faz
:helpa lista (ou help)
:exitsai (ou exit, quit, Ctrl+D)
:envas 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
:modulesos módulos Arcane disponíveis
:resetzera o interpretador
:clearlimpa a tela
:versiona versão

Blocos de várias linhas#

Uma linha terminada em : abre um bloco, que continua até uma linha em branco:

text
forge> action dobro(n):
   ...     yield n * 2
   ...
forge> dobro(21)
=> 42

Carregar 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.

text
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:

text
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#

text
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, :save e siga num arquivo.
  • Não guarda estado entre sessões. :save grava o histórico; fechar o console perde as variáveis.
  • Não substitui teste. O que funcionou no console precisa virar trial para continuar funcionando amanhã.

Por onde seguir#