Executando verificação de segurança...
4

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.

Repo: https://github.com/glide-lang/Glide

Carregando publicação patrocinada...
1

Projeto massa.

Estou criando uma linguagem também, a base da minha é Pyhton e C.

Criou os booleanos -T e -F? Eu fiz assim na minha.

Estou achando que com a IA, os programadores irão conseguir converter um projeto para suas ferramentas. Assim, só teríamos que se preocupar com a lógica e aplicabilidade coesa no futuro.

1

Ironicamente Go se classifica como uma linguagem de sistemas. Mas vai ver que é só como ela se sente, né? Isso que é importante, não o que é</ironia>

Eu sempre aprecio e incentivo pessoas a saírem da casinha e criar algo que não seja um produto pra ganhar dinheiro.

Poderia me explicar mais sobre ownership e borrow sem lifetime explícita na Glide? Como funciona? Tem limitações? Por que Glide consegue fazer algo que Rust não consegue? Imagino que isso vale para arenas também?

O que acontece se retornar um err()?

Fora as corrotinas, me parece que está criando algo mais próximo de Rust, não Go.

Antes de finalizar, conhece Zig? Odin? Ou outras linguagens que têm ser uma better C? Uma destas pode servir de inspiração ou mesmo perceber que já existe o que deseja criar (o que não torna o projeto sem sentido, porque ele pode ter outro objetivo que não o de ser melhor que C). Não Rust não é essa linguagem.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui).