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.
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.
Porque existe Cyr
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.
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.
cyrtUm 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.
@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.
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.
Uma linguagem, dois dialetos
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
Quente e gerido. Corre numa máquina.
pid / ref / port:erlang.* · biblioteca-padrão Cyra.*// o dialeto nativo
Bare metal. É o código-máquina.
ptr<T>, @external(c, "...")bigint opcionalcyrt · biblioteca-padrão Cyr.*Alcance de sistemas & SO
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.
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.
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.
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.
Vê em ação
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.
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; }
}
O que já está fixado
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 por omissão; a aritmética faz trap por
omissão. wrapping, saturating e
bigint são opções explícitas.
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.
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.
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.
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.
Posicionamento honesto
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.
Cyr faz parte do mesmo projeto — as mesmas ferramentas, a mesma comunidade — não um produto rival com identidade própria.
pid, ref, port, spawn,
receive, send foram removidos. Tudo o que se
assemelhe a atores é uma biblioteca, não uma primitiva da linguagem.
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.
Filosofia de design
"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.