Início · carta fundadora · 2026

Escrito por LLMs. Compilado para qualquer metal.

Cyr é o dialeto nativo de Cyra — compilado AOT via LLVM, de servidores até a um MCU nu. Sem VM, sem GC. A linguagem que as máquinas escrevem, agora no metal.

Código nativo, da tua aplicação até ao PID 1.

Pre-v0

Esta página partilha as primeiras ideias, a filosofia inicial e as expectativas para Cyr. O nome, a relação tronco/ramo, os nomes do runtime e da CLI, e um conjunto de decisões fundamentais estão fixados — mas Cyr ainda não está disponível. O que aqui lês é uma carta, não um lançamento.

Onde a BEAM é uma parede.

Cyra é excelente naquilo em que a BEAM é excelente: sistemas concorrentes, tolerantes a falhas e recarregáveis a quente. Mas há classes inteiras de trabalho que vivem abaixo dessa linha. Hoje, um programador que bate na parede tem de descer a C, Rust ou Zig e abandonar a linguagem por completo. Cyr é a saída de emergência que te mantém na família.

LLVM, AOT

Cyr compila antecipadamente para código-objeto nativo via LLVM — sem VM, sem JIT. Um binário autónomo que corre numa plataforma Tier-1 sem nada instalado.

Runtime minúsculo: cyrt

Um pequeno runtime ligado a cada binário — alocador, manipulador de panics, intrínsecos. Visa as poucas centenas de kilobytes, não megabytes. Embebido e plausível em WASM.

.C

FFI C23

@external(c, "...") é a única superfície de interoperabilidade nativa. Chama C e sê chamado por C com assinaturas completas, larguras explícitas e nulabilidade explícita — sem cola escrita à mão.

Mesma sintaxe, mesma alma

Fluxo apenas com switch, Option/Result, tipos explícitos — gramática ~85% idêntica à de Cyra. A competência e o código atravessam a fronteira gerido/nativo.

A arborescência

Uma gramática, um núcleo de semântica, dois backends — tal como C tem uma implementação hospedada e outra autónoma. O tronco é a gramática partilhada; os dois ramos divergem apenas onde o modelo de runtime os obriga a isso.

// o dialeto BEAM

Cyra

Quente e gerido. Corre numa máquina.

  • Alvo Erlang VM — dinâmico, recarga a quente
  • Atorespid / ref / port
  • Inteiros de precisão arbitrária
  • FFI :erlang.* · biblioteca-padrão Cyra.*

// o dialeto nativo

Cyr

Bare metal. É o código-máquina.

  • Alvo LLVM — AOT, binário estático
  • FFI C23ptr<T>, @external(c, "...")
  • i64 por omissão + bigint opcional
  • runtime cyrt · biblioteca-padrão Cyr.*

Da tua aplicação ao PID 1.

Cyr visa explicitamente o desenvolvimento de sistemas de baixo nível e de SO — incluindo um init/PID 1, daemons, drivers e código autónomo bare-metal. Quanto mais exigente o perfil, mais a linguagem se afasta do caminho. O alcance de Cyr está organizado em três perfis de execução.

1

hospedado

aplicação · daemon · CLI

Um programa nativo normal num SO completo. Toda a pilha está disponível, e cyrt usa o heap do SO e as threads do SO.

cyrt completo + biblioteca-padrão Cyr.* completa + libc
2

autónomo-hospedado

init / PID 1 · binário estático mínimo

Existe um kernel, mas o espaço de utilizador é mínimo. O PID 1 não deve arrastar uma libc completa — uma camada fina de chamadas diretas ao sistema fala com o kernel.

cyrt + Cyr.Core + libc fina / syscalls
3

bare-metal

kernel · bootloader · firmware · ISR

Sem SO nenhum. Tu trazes o alocador; não há threads, não há libc, não há unwinding. Asm inline, volatile/MMIO, atómicos, pontos de entrada personalizados.

apenas cyrt-core · sem libc, sem alocador de SO

Nativo, explícito, inequívoco

Um fragmento de driver com FFI C23, layout compactado, Option em vez de null, e recursão de cauda que corre em pilha constante — tudo em sintaxe Cyra familiar.

driver.cyr
module Sensor.Driver {
    use Cyr.Result;

    // C23 FFI — the single native interop surface
    @external(c, "read_register")
    fn read_register(addr: ptr<u32>) -> u32;

    @repr(packed)
    struct Reading { id: u16; value: i32; }

    // switch-only flow; Option<T> for absence, never null
    pub fn decode(raw: u32) -> Option<Reading> {
        switch raw {
            0 => None;
            _ => Some(Reading { id: 1, value: raw as i32 });
        }
    }

    // guaranteed constant stack — TCO holds at the CIR layer
    fn sum(xs: list<i64>, acc: i64) -> i64 {
        switch xs {
            []        => acc;
            h :: rest => sum(rest, acc + h);   // i64 traps on overflow
        }
    }

    @entry
    pub fn main() -> i32 { 0; }
}

Decisões fundamentais

Cyr parte das premissas que Cyra já estabeleceu, mais um conjunto de portas de sentido único ratificadas pelo conselho de filosofia no início. Estas são as expectativas a que Cyr se compromete.

i64

Sem overflow silencioso

i64 por omissão; a aritmética faz trap por omissão. wrapping, saturating e bigint são opções explícitas.

?:

Ausência apenas com Option

O nil foi retirado dos tipos que não são Option. O null vive apenas por trás de ptr/any na parede de C.

TCO garantido

A recursão em posição de cauda — incluindo a recursão mútua — corre em pilha constante. Uma garantia semântica na camada CIR, não fé no LLVM.

&

ARC, sem borrow checker

A memória é ARC + arena opcional + weak. A segurança é transferida para as predefinições do compilador, não para anotações de tempo de vida escritas pelo autor — a escolha certa para um corpus escrito por LLM.

!!

unsafe ruidoso e mínimo

A desreferência de ptr<T> em bruto e os down-casts de any vivem apenas dentro de unsafe — localizáveis com grep e auditáveis.

::

Uma biblioteca-padrão Cyr.* separada

Cyr reescreve a sua biblioteca-padrão de forma nativa. A portabilidade vive na gramática, não nos nomes da biblioteca — uma linha use é sempre honesta sobre o seu dialeto.

O que Cyr não é

Não é uma reescrita nem um fork

Cyr não é o "Cyra 2.0" e não diverge na sintaxe. É uma só linguagem com dois backends — não duas linguagens a competir.

Não é uma marca separada

Cyr faz parte do mesmo projeto — as mesmas ferramentas, a mesma comunidade — não um produto rival com identidade própria.

Não é o modelo de atores

pid, ref, port, spawn, receive, send foram removidos. Tudo o que se assemelhe a atores é uma biblioteca, não uma primitiva da linguagem.

Não é um argumento geral de sistemas

Cyr é para as pessoas que já adoram Cyra e agora querem escrever a camada por baixo das suas aplicações — não um argumento para o público geral da programação de sistemas.

Decidido deliberadamente, uma só vez

"Continuidade de código e competência"

A máxima pragmática de Peirce é o teste de Cyr: que diferença concreta faz Cyr que "Cyra mais usar C" não faz? A resposta — a continuidade de código e competência através da fronteira gerido/nativo — rege cada escolha de design.

"Gramática partilhada, biblioteca honesta"

Os dialetos partilham ~85% da sua sintaxe — o verdadeiro ativo transferível. Deliberadamente não partilham os nomes das bibliotecas: a coerência pertence à sintaxe e à CLI; a honestidade pertence ao namespace.

"Vinte e um filósofos, uma carta"

As Quatro Causas de Aristóteles enquadram o esforço; Popper nomeia o que falsificaria o sucesso; as antinomias de Kant mantêm o conselho honesto. Dezoito domínios de design em aberto foram lidos por todos os vinte e um, e as decisões fundamentais ratificadas — o conselho funciona como organon, aberto no GitLab.