Olá, Makoto
Objetivo: entender por que Makoto existe, instalar a toolchain e rodar seu primeiro programa.
O pitch
Seção intitulada “O pitch”Makoto junta quatro apostas que normalmente vêm separadas:
- Resiliência da BEAM (Erlang): processos isolados, supervisão estrutural, let it crash. Um processo que falha não corrompe o resto.
- Concorrência do Go:
spawncria processos baratos; eles conversam por channels tipados. - Tipos do Rust, sem lifetimes: sum types, generics, pattern matching exaustivo, sem o borrow
checker e sem
'ainfectando assinaturas. - Comptime do Zig: metaprogramação na própria linguagem, inteiros de largura arbitrária, FFI-C de primeira classe, IO sem coloring.
E três “nãos” que definem o caráter da linguagem:
- Sem
null: ausência éOptional[T], explícita no tipo. - Sem
unit/void: uma função que não devolve valor simplesmente não tem-> T. - Sem function coloring: não existe
async; o scheduler suspende o processo no IO, e nenhuma função precisa ser marcada.
A filosofia, em uma frase: consistente, não simples. Você só paga pelo que convoca.
Instalar e rodar
Seção intitulada “Instalar e rodar”A toolchain é um binário único, makoto, com o alias mk. Arquivos-fonte do core terminam
em .mko.
use io
fn main() { io.println("Olá, Makoto!")}mk run ola.mko // compila e rodamk build ola.mko // só compila → binárioRepare em algumas coisas que já aparecem no hello world:
use io: não há funções no escopo global. Atéprintlnse importa (printmora emio,panicemruntime). Quem não faz IO nunca vêio.mainnão tem-> T: ela não devolve valor. Semvoid, a ausência de->é a ausência de retorno."{{ }}"vai aparecer já no próximo programa: interpolação de string.
use io
fn main() { nome := "mundo" io.println("Olá, {{nome}}!") // interpolação por {{ }}, via a interface Display}nome := "mundo" declara um valor imutável (o caso comum não leva cerimônia). No próximo
capítulo a gente destrincha declaração, os tipos primitivos, e por que não existe null.
Próximo: 01 · Valores e tipos