Artcode agora suporta um statement shell de primeira camada com prefixo $.
Tambem suporta chamada estilo funcao para executaveis no PATH quando o identificador nao resolve para simbolo Artcode.
$ echo "hello"
$ ls -la
$ echo hello |> tr a-z A-Z
let r = echo("hello from function")
match r {
case .Ok(out): println(f"ok={out}")
case .Err(err): println(f"err={err}")
}
match shell_result {
case .Ok(out): println(f"ok={out}")
case .Err(err): println(f"err={err}")
}
Regras atuais:
- O statement inicia com
$e consome os tokens da mesma linha (ou ate;). - O primeiro argumento e o programa.
- Os demais sao passados como argumentos para
std::process::Command. |>conecta estagios de processo (stdout do estagio anterior vira stdin do proximo).- Strings entre aspas viram um argumento unico.
- Chamadas
cmd(arg1, arg2, ...)ondecmdnao existe como simbolo Artcode sao mapeadas para execucao shell decmdno PATH. - O runtime publica o retorno da ultima execucao shell em
shell_resultcomoResult.Ok(stdout)ouResult.Err(stderr). - Em
--pure, comandos shell sao bloqueados com diagnostico de runtime.
Veja examples/35_shell_syntax.art.
- Ainda nao ha expansao de variaveis/globs.
A cobertura desta fase inclui:
- Lexer: reconhecimento de token
$. - Parser: construcao de
Stmt::ShellCommand. - Runtime: execucao de comando externo, pipeline
|>, retorno tipado emshell_resulte bloqueio em modo--pure. - Runtime: mapeamento de chamada estilo funcao para executaveis no PATH (
echo("ok")etc.). - CLI: teste de integracao com
art run.