Pitch: Estou criando uma linguagem de programação porque queria misturar a simplicidade do Go com controle de baixo nível
Fala, pessoal.
Há um tempo eu comecei a criar uma linguagem de programação chamada Glide.
Não comecei porque achei que o mundo precisava de “mais uma linguagem”. Comecei porque eu queria experimentar uma pergunta que sempre me incomodou:
e se desse para ter uma linguagem de sistemas com a praticidade de Go, mas com mais controle sobre memória, erros e
runtime?
Eu gosto da ideia de escrever código direto, previsível e nativo. Mas muitas vezes as opções acabam caindo em extremos:
- C te dá controle, mas cobra caro em segurança e ergonomia.
- Rust te dá segurança forte, mas nem sempre é simples de explicar, aprender ou prototipar.
- Go é muito produtivo, mas esconde bastante coisa do runtime e não foi feita para controle de baixo nível.
O Glide nasceu nesse espaço intermediário.
A proposta dela é ser uma linguagem pequena, compilada para código nativo, com:
- erros como valores;
- memória com ownership simples e auto-drop por escopo;
- borrows sem anotações de lifetime;
- concorrência M:N com spawn e canais tipados;
- macros e procedural macros;
- HTTP, JSON, TLS, WebSocket e tooling já na stdlib;
- compilador escrito em Glide.
Um exemplo de erro como valor:
fn parse(n: int) -> !int {
if n < 0 { return err("negative"); }
return ok(n * 2);
}
fn pipeline(n: int) -> !int {
let v: int = parse(n)?;
return ok(v + 1);
}
!T é um resultado. ?T é uma option. Não existe try/catch. O erro aparece no tipo da função.
A parte de concorrência segue uma ideia mais próxima de Go:
fn worker(c: chan) {
c.send(42);
}
fn main() -> int {
let c: chan = make_chan(1);
spawn worker(c);
return c.recv();
}
Mas por baixo existe um scheduler M:N próprio, canais tipados e runtime nativo.
Outra coisa que eu queria evitar era fazer uma linguagem que só tivesse “hello world”. Então fui colocando tooling e stdlib desde cedo. Hoje o Glide já tem package manager, test runner, benchmark runner, LSP, formatter, geração de docs, tree-sitter, extensão para VS Code/Zed e uma stack HTTP.
Por exemplo, dá para escrever uma API REST com JSON tipado assim:
@derive(JsonBind)
pub struct Todo {
pub id: string,
pub title: string,
pub done: bool,
}
@handler
fn create_todo(body: Json) -> Json {
let in: CreateTodo = body.val;
let t: Todo = Todo { id: in.id, title: in.title, done: false };
store().insert(t.id, t);
return Json::wrap(t);
}
O Glide ainda é nova. A versão atual é 0.1.1. Não estou vendendo como “pronta para substituir X em produção”. O que eu queria compartilhar é o experimento: uma tentativa de criar uma linguagem de sistemas com menos cerimônia, bom tooling e runtime próprio.
O compilador já é self-hosted: existe uma seed em C para bootstrap, mas depois o Glide compila para Glide.
Fonte: https://glide-lang.org