Pular para o conteúdo

Primeiros Passos

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

A forma mais fácil de instalar o Kriol é através do script de instalação:

Terminal window
curl -fsSL https://kriol.dev/install.sh | sh -s -- --pre

Depois, adiciona o Kriol ao teu PATH. Adiciona esta linha ao ficheiro de configuração do teu shell (como ~/.bashrc ou ~/.zshrc):

Terminal window
export PATH="$HOME/.kriol:$PATH"

Fecha e reabre o terminal, e verifica se funcionou:

Terminal window
kriol --version

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

Terminal window
xcode-select --install

Depois, instala o Kriol com o mesmo script do Linux:

Terminal window
curl -fsSL https://kriol.dev/install.sh | sh -s -- --pre

Adiciona o Kriol ao teu PATH, acrescentando esta linha ao ficheiro ~/.zshrc (o shell predefinido do macOS é o zsh):

Terminal window
export PATH="$HOME/.kriol:$PATH"

Fecha e reabre o terminal, e verifica se funcionou:

Terminal window
kriol --version

No macOS, o Kriol compila apenas programas nativos: a compilação para WebAssembly (--target wasm32-wasi) ainda não está disponível.

No PowerShell, executa:

Terminal window
& ([scriptblock]::Create((irm https://kriol.dev/install.ps1))) -Pre

O Kriol fica instalado em %LOCALAPPDATA%\Programs\kriol e é adicionado ao teu PATH. Abre um novo terminal e verifica se funcionou:

Terminal window
kriol --version

També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.

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:

  1. Se descarregaste o .zip manualmente, desbloqueia os ficheiros e tenta de novo. Executa isto na pasta onde o extraíste, ou no .zip antes de o extrair:

    Terminal window
    Get-ChildItem -Recurse | Unblock-File

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

  2. 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 --install

    Depois, 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 curl
    curl -fsSL https://kriol.dev/install.sh | sh -s -- --pre
  3. 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.

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

Cria um ficheiro chamado ola-mundu.kriol:

ola-mundu.kriol
fn inisiu() {
mostran("Kualeh, Mundu!");
}

Se é a primeira vez que vês código, vale a pena ler este programa palavra a palavra:

PedaçoSignificado
fn”aqui começa uma função”, isto é, um bloco de código com nome
inisiuo 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

Compila o programa:

Terminal window
kriol ola-mundu.kriol -o ola-mundu

Executa:

Terminal window
./ola-mundu

No 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 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
}

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 2

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

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");
}

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.

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çãoPara que serve
-o, --output FICHOnde escrever o resultado (por omissão ./a.out, ou ./a.wasm para wasm32-wasi)
--opt-lvl NNível de otimização, de 0 (nenhuma) a 3; por omissão 2
--strictTrata os avisos como erros de compilação; vê Erros
--text CÓDIGOCompila o código indicado em vez de um ficheiro
--target ALVOnative (por omissão) ou wasm32-wasi, para WebAssembly
--emit-irEscreve o IR do LLVM em vez do executável, no ecrã ou no ficheiro de -o
--ignore-extensionAceita ficheiros sem a extensão .kriol ou .kr
-h, --helpMostra a ajuda
-v, --versionMostra a versão do compilador

Para testar uma ideia sem criar ficheiro nenhum, usa --text:

Terminal window
kriol --text 'fn inisiu() { mostran(1 + 2); }' -o soma && ./soma

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

Terminal window
kriol ola-mundu.kriol --target wasm32-wasi -o ola-mundu.wasm
fibonacci.kriol
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).

Se quiseres compilar o compilador de origem, precisas de:

  • Clang, LLVM e LLD 20
  • bison e flex
  • cmake

No Debian/Ubuntu:

Terminal window
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-wasm32

Obtém o código, incluindo o submódulo do coletor de lixo, e compila:

Terminal window
git clone --recursive https://github.com/kriol-lang/kriol
cd kriol
cmake -B build && cmake --build build

Executa:

Terminal window
./build/kriol --help

Para compilar no Windows, segue as instruções do README.md do repositório. Para mais exemplos, vê a pasta examples/.