Além de Hindley-Milner: Um tutorial sobre o compilador Cubiml com subtipagem algébrica

2025-06-13

Esta série de posts de blog apresenta o Cubiml, um tutorial de compilador construído em torno de um novo sistema de inferência de tipos chamado "cubic biunification", uma melhoria na Subtipagem Algébrica. Ele aborda as limitações da falta de suporte a subtipagem do sistema Hindley-Milner, fornecendo uma inferência de tipos mais poderosa e intuitiva. O tutorial percorre a implementação do Cubiml com exemplos de código detalhados, cobrindo booleanos, condicionais, registros, funções, ligações let, ligações let recursivas, recursão mútua e correspondência de tipos de caso. O objetivo final é um compilador que verifica tipos de programas sem exigir anotações de tipo manuais.

Leia mais
Desenvolvimento inferência de tipos

Adeus, Erros de Tipo Misteriosos: Como o PolySubML Melhora as Mensagens de Erro de Inferência de Tipo

2025-05-23

PolySubML é uma linguagem de programação que combina inferência de tipo global com subtipagem e polimorfismo avançado. Esta publicação explora como o PolySubML projeta boas mensagens de erro de tipo e explica por que as linguagens existentes muitas vezes ficam aquém na melhoria das mensagens de erro de inferência de tipo. O autor propõe cinco regras: 1. Nunca adivinhe ou volte atrás; 2. Não tire conclusões precipitadas; 3. Peça ao usuário para esclarecer a intenção; 4. Permita que o usuário escreva anotações de tipo explícitas; 5. Não inclua a inferência de tipo estático no seu modelo de execução em tempo de execução. Seguindo essas regras, o PolySubML aborda com sucesso muitos problemas comuns com a inferência de tipo, melhorando significativamente a capacidade de depuração do código.

Leia mais
Desenvolvimento inferência de tipo

Além da OOP: A Evolução da Subtipagem em Linguagens de Programação

2025-03-29

Este artigo explora o papel crucial da subtipagem no design de linguagens de programação. O autor, com base em sua experiência no desenvolvimento de várias linguagens de programação, explica que a subtipagem não se limita à herança de classes na programação orientada a objetos, mas é um conceito muito mais fundamental: o tipo X é um subtipo do tipo Y se um valor do tipo X pode ser usado onde quer que um valor do tipo Y seja esperado. O artigo explica claramente por que a subtipagem é crucial mesmo em linguagens de baixo nível orientadas a desempenho, permitindo que o compilador verifique estaticamente valores nulos, aliasing e outros problemas, melhorando assim a confiabilidade do código e, por fim, impulsionando a evolução das linguagens de programação.

Leia mais

Quatro Limitações Surpreendentes do Verificador de Empréstimos do Rust

2024-12-24

Este artigo explora quatro limitações surpreendentes do verificador de empréstimos do Rust, encontradas mesmo por programadores Rust experientes. A primeira limitação envolve a incapacidade do verificador de empréstimos de levar totalmente em consideração as instruções match e return, levando a verificações redundantes ao trabalhar com HashMaps. A segunda limitação diz respeito à programação assíncrona, onde o Rust atualmente carece da capacidade de expressar determinadas assinaturas de tipo de retorno de chamada assíncrona. A terceira centra-se em closures FnMut não permitindo o re-empréstimo de variáveis capturadas, restringindo o acesso a estados mutáveis em operações assíncronas. Finalmente, a falta de consciência do fluxo de controle do verificador Send resulta em alguns Futures que deveriam ser Send sendo incorretamente marcados como não Send. O autor ilustra essas limitações e seus desafios com exemplos de código concretos e soluções alternativas, defendendo melhorias no sistema de tipos do Rust para melhorar a produtividade do desenvolvedor.

Leia mais