Primeiros Passos
Pré-requisitos
Seção intitulada “Pré-requisitos”O Kriol funciona em Linux e Windows (x86_64) e em macOS nos Mac com Apple silicon (M1 ou mais recente). O suporte para Windows é experimental, e os Mac com processador Intel ainda não são suportados.
Precisas ter:
- No Linux, um compilador C (GCC ou Clang), usado para ligar os programas
- No macOS, as Xcode Command Line Tools, que trazem o Clang usado para ligar os programas
- No Windows, nada mais: o compilador já traz tudo o que precisa
- Uma conexão à internet para a instalação
Instalação
Seção intitulada “Instalação”A forma mais fácil de instalar o Kriol é através do script de instalação:
curl -fsSL https://kriol.dev/install.sh | sh -s -- --preDepois, adiciona o Kriol ao teu PATH. Adiciona esta linha ao ficheiro de configuração do teu shell (como ~/.bashrc ou ~/.zshrc):
export PATH="$HOME/.kriol:$PATH"Fecha e reabre o terminal, e verifica se funcionou:
kriol --versionSe ainda não tens as Xcode Command Line Tools, instala-as primeiro. O Kriol usa o Clang que vem com elas para ligar os programas:
xcode-select --installDepois, instala o Kriol com o mesmo script do Linux:
curl -fsSL https://kriol.dev/install.sh | sh -s -- --preAdiciona o Kriol ao teu PATH, acrescentando esta linha ao ficheiro ~/.zshrc (o shell predefinido do macOS é o zsh):
export PATH="$HOME/.kriol:$PATH"Fecha e reabre o terminal, e verifica se funcionou:
kriol --versionNo macOS, o Kriol compila apenas programas nativos: a compilação para WebAssembly (--target wasm32-wasi) ainda não está disponível.
Windows (experimental)
Seção intitulada “Windows (experimental)”No PowerShell, executa:
& ([scriptblock]::Create((irm https://kriol.dev/install.ps1))) -PreO Kriol fica instalado em %LOCALAPPDATA%\Programs\kriol e é adicionado ao teu PATH. Abre um novo terminal e verifica se funcionou:
kriol --versionTambém podes descarregar o ficheiro kriol-<versão>-windows-x86_64.zip da página de versões e usá-lo diretamente; mantém o kriol.exe e o ld.lld.exe na mesma pasta. Os programas compilados funcionam no Windows 7 e versões posteriores.
Se o Windows bloquear o kriol.exe
Seção intitulada “Se o Windows bloquear o kriol.exe”Como o kriol.exe e o ld.lld.exe não têm assinatura digital, ao executá-los podes ver um erro como “Uma política de Controlo de Aplicações bloqueou este ficheiro” (em inglês, “An Application Control policy has blocked this file”) ou um aviso do SmartScreen a dizer “O Windows protegeu o seu PC”. Isto vem das funcionalidades de segurança do Windows, não do Kriol. Para contornar:
-
Se descarregaste o
.zipmanualmente, desbloqueia os ficheiros e tenta de novo. Executa isto na pasta onde o extraíste, ou no.zipantes de o extrair:Terminal window Get-ChildItem -Recurse | Unblock-FileNo aviso do SmartScreen, também podes escolher Mais informações → Executar mesmo assim. O script de instalação já desbloqueia os ficheiros e avisa-te se o Windows continuar a bloquear o
kriol.exe. -
Se o erro da política de Controlo de Aplicações continuar, é o Controlo Inteligente de Aplicações (Smart App Control) que está a bloquear programas sem assinatura. Podes ver o estado dele em Segurança do Windows → Controlo de aplicações e browser → Controlo Inteligente de Aplicações. Nesse caso, recomendamos usar a versão para Linux dentro do WSL, que te permite manter o Controlo Inteligente de Aplicações ativo. Instala o WSL a partir do PowerShell e reinicia o computador quando te for pedido:
Terminal window wsl --installDepois, no terminal do WSL (Ubuntu), instala um compilador C e o Kriol, como nas instruções para Linux:
Terminal window sudo apt update && sudo apt install -y gcc curlcurl -fsSL https://kriol.dev/install.sh | sh -s -- --pre -
Caso contrário, por agora a única forma de contornar o Controlo Inteligente de Aplicações é desativá-lo no mesmo sítio. Em muitas versões do Windows 11 não é possível voltar a ativá-lo sem reinstalar o Windows, por isso pensa bem antes. Também podes compilar o Kriol de origem.
-
Em computadores geridos por uma empresa ou escola, o bloqueio pode vir de uma política de TI. Pede ao administrador que autorize os ficheiros.
O teu primeiro programa
Seção intitulada “O teu primeiro programa”Cria um ficheiro chamado ola-mundu.kriol:
fn inisiu() { mostran("Kualeh, Mundu!");}O que diz cada linha
Seção intitulada “O que diz cada linha”Se é a primeira vez que vês código, vale a pena ler este programa palavra a palavra:
| Pedaço | Significado |
|---|---|
fn | ”aqui começa uma função”, isto é, um bloco de código com nome |
inisiu | o nome da função; é este nome que o Kriol procura para começar |
() | a lista de parâmetros, aqui vazia: inisiu não recebe nada |
{ … } | o corpo da função, tudo o que ela faz |
mostran(...) | escreve no ecrã e muda de linha no fim |
"Kualeh, Mundu!" | o texto a escrever, entre aspas |
; | fim da instrução; todas as instruções terminam com ponto e vírgula |
Compilar e executar
Seção intitulada “Compilar e executar”Compila o programa:
kriol ola-mundu.kriol -o ola-munduExecuta:
./ola-munduNo Windows, o compilador acrescenta .exe ao nome, e o programa executa-se com .\ola-mundu.exe.
Se não indicares -o, o resultado fica em ./a.out (o nome tradicional dos compiladores de C), o que é prático para experiências rápidas.
Os programas são otimizados por omissão (nível 2). Podes escolher outro nível com --opt-lvl <n>, de 0 (sem otimização) a 3.
Saída:
Kualeh, Mundu!Comentários
Seção intitulada “Comentários”Comentários são notas para quem lê o código; o compilador ignora-os por completo. O Kriol aceita as duas formas do C:
fn inisiu() { // Até ao fim da linha.
/* Em várias linhas, útil para explicar um bloco inteiro ou para desligar código temporariamente. */
mostran("Kualeh!"); // também pode vir depois de código}Mensagens de erro
Seção intitulada “Mensagens de erro”Quando o programa tem um erro, o compilador indica o ficheiro, a linha e o que está mal, e muitas vezes sugere como corrigir:
ola-mundu.kriol:2: erro: a variável 'nomi' não foi declarada; declara-a antes de a usar, por exemplo 'int nomi = 0;'Os erros que só acontecem com o programa a correr, como um índice fora dos limites de um array, seguem o mesmo formato:
ola-mundu.kriol:5: erro de execução: o índice 3 está fora do array, que vai de 0 a 2Um erro de compilação impede que o executável seja criado; um erro de execução só aparece quando o programa corre, e termina-o com o código de saída 1. Vê Erros para saber quais se podem tratar.
Os editores de código reconhecem o formato ficheiro:linha: e permitem saltar para a linha indicada.
Estrutura básica de um programa
Seção intitulada “Estrutura básica de um programa”Todo programa Kriol precisa de uma função inisiu sem parâmetros:
fn inisiu() { // código aqui}Podes declarar outras funções antes ou depois de inisiu. A ordem não importa para chamadas entre funções do mesmo ficheiro.
A função inisiu não pode ter parâmetros nem declarar um tipo de retorno; o compilador recusa as duas coisas. Dentro dela, um divolvi; sem valor termina o programa com sucesso:
fn inisiu() { si nau { mostran("isto não acontece"); divolvi; // sai de inisiu, com sucesso } mostran("fim");}Extensões de ficheiro
Seção intitulada “Extensões de ficheiro”Os ficheiros Kriol usam .kriol (preferida) ou .kr (abreviada). Com outra extensão, o compilador recusa o ficheiro e sugere --ignore-extension, que o aceita na mesma.
Opções do compilador
Seção intitulada “Opções do compilador”Estas são as opções que o kriol --help lista. As três primeiras são as que vais usar no dia a dia:
| Opção | Para que serve |
|---|---|
-o, --output FICH | Onde escrever o resultado (por omissão ./a.out, ou ./a.wasm para wasm32-wasi) |
--opt-lvl N | Nível de otimização, de 0 (nenhuma) a 3; por omissão 2 |
--strict | Trata os avisos como erros de compilação; vê Erros |
--text CÓDIGO | Compila o código indicado em vez de um ficheiro |
--target ALVO | native (por omissão) ou wasm32-wasi, para WebAssembly |
--emit-ir | Escreve o IR do LLVM em vez do executável, no ecrã ou no ficheiro de -o |
--ignore-extension | Aceita ficheiros sem a extensão .kriol ou .kr |
-h, --help | Mostra a ajuda |
-v, --version | Mostra a versão do compilador |
Para testar uma ideia sem criar ficheiro nenhum, usa --text:
kriol --text 'fn inisiu() { mostran(1 + 2); }' -o soma && ./somaO alvo wasm32-wasi produz um módulo WebAssembly em vez de um executável do sistema. É assim que o playground corre Kriol dentro do navegador:
kriol ola-mundu.kriol --target wasm32-wasi -o ola-mundu.wasmExemplo: Fibonacci recursivo
Seção intitulada “Exemplo: Fibonacci recursivo”fn fibo(int n) int { konfirma(n >= 0);
si n <= 1 { divolvi 1; } sinon { divolvi fibo(n - 1) + fibo(n - 2); }}
fn inisiu() { int[10] seq = [0; 10];
pa int i = 0; i < 10; i += 1 { seq[i] = fibo(i); }
mostran(f"A sequência de Fibonacci até o 10º elemento é {seq}");}Neste exemplo, konfirma verifica uma condição em execução (vê konfirma), [0; 10] cria um array de 10 zeros (vê Arrays) e f"... {seq}" é uma f-string (vê Strings e Interpolação).
Compilar de origem (opcional)
Seção intitulada “Compilar de origem (opcional)”Se quiseres compilar o compilador de origem, precisas de:
- Clang, LLVM e LLD 20
- bison e flex
- cmake
No Debian/Ubuntu:
apt install make flex bison clang-20 llvm-20 llvm-20-dev llvm-20-tools lld-20 zlib1g-dev libzstd-dev cmake wasi-libc libclang-rt-20-dev-wasm32Obtém o código, incluindo o submódulo do coletor de lixo, e compila:
git clone --recursive https://github.com/kriol-lang/kriolcd kriolcmake -B build && cmake --build buildExecuta:
./build/kriol --helpPara compilar no Windows, segue as instruções do README.md do repositório. Para mais exemplos, vê a pasta examples/.