Rust

Como o compilador do Rust funciona?

Rust Compiladores LLVM Memória Segurança
Uma visão geral do compilador do Rust

O Rust é famoso por ser uma linguagem que evita muitos erros de memória sem precisar de um coletor de lixo rodando em segundo plano. Mas como ele faz isso? O segredo está no compilador, que passa seu código por várias etapas até virar um programa que o computador entende. Neste artigo, explicarei de forma simples cada fase desse processo: desde a leitura do código lexing, passando pela análise da estrutura parsing, até a geração do código final pelo LLVM.

Leia mais →

Inferência de Tipos em Rust e C++

Inferência de Tipos Programação Rust C++ Swift
Por que isso pode facilitar sua vida.

Inferência de tipos é o mecanismo pelo qual o compilador descobre automaticamente o tipo de uma variável ou expressão em uma linguagem de programação. Esse recurso permite que o programador omita anotações de tipo em muitas situações sem comprometer a segurança de tipos do programa. Neste artigo, discutimos como as linguagens Rust e C++ implementam inferência de tipos de formas fundamentalmente diferentes, analisando as consequências práticas de cada abordagem. Exploramos também brevemente o caso do Swift, comparando sua estratégia híbrida e os desafios de desempenho que ela acarreta. Ao final, refletimos sobre o impacto dessas escolhas de design na experiência de programação.

Leia mais →

Try/Catch: Origem, Propósito e o Erro de Usá-lo como Fluxo Lógico

tratamento de erros exceções javascript typescript rust clojure zig boas práticas
Entenda quando, por que e para que o try/catch foi criado, e por que ele não deve ser usado como controle de fluxo lógico.

O conceito de tratamento de exceções tem raízes mais antigas do que muitos imaginam. Embora tenha se popularizado nos anos 70, suas origens remontam ao final dos anos 50 e início dos 60, com linguagens como LISP (1958) e SIMULA 67, que introduziram conceitos fundamentais de manipulação de condições excepcionais. No entanto, foi nos anos 70 com linguagens como PL/I e posteriormente Ada que vimos o surgimento de formas mais estruturadas e organizadas de lidar com erros, incluindo construções mais próximas ao que hoje reconhecemos como try/catch.

Leia mais →