Category: Desenvolvimento

Python-BPF: Uma Nova Maneira de Escrever Programas eBPF em Python

2025-09-15

Python-BPF é uma biblioteca de código aberto revolucionária que permite escrever programas eBPF inteiramente em Python, compilando-os diretamente em arquivos de objeto. Isso elimina a abordagem trabalhosa anterior de incorporar código C dentro do Python. Aproveitando o AST do Python e o LLVM IR para compilação, o Python-BPF suporta fluxo de controle, mapas hash, funções auxiliares e muito mais, simplificando significativamente o desenvolvimento de eBPF e oferecendo uma nova opção pronta para produção.

Desenvolvimento

Titania: Uma Linguagem de Programação para Ensino de Desenvolvimento de Compiladores

2025-09-15
Titania: Uma Linguagem de Programação para Ensino de Desenvolvimento de Compiladores

Titania, baseada na linguagem Oberon-07 de Niklaus Wirth, foi projetada como uma ferramenta educacional para aprender desenvolvimento de compiladores. Sua sintaxe limpa abrange conceitos essenciais como módulos, procedimentos e tipos de dados, e inclui funções integradas para operações numéricas, manipulação de bits e gerenciamento de memória. Aprender Titania proporciona uma compreensão profunda dos princípios de compiladores e design de linguagens.

Objetos de Página: Tornando seus testes de IU menos frágeis

2025-09-15
Objetos de Página: Tornando seus testes de IU menos frágeis

Testar páginas da web requer interagir com elementos, mas manipular diretamente o HTML torna os testes frágeis. Objetos de Página resolvem isso encapsulando uma página ou fragmento como uma API específica do aplicativo. Isso permite interagir com elementos sem acessar diretamente o HTML. O objetivo é imitar as ações do usuário, fornecendo uma interface limpa que oculta widgets subjacentes. Campos de texto usam acessores de string, caixas de seleção booleanos e botões métodos orientados a ação. Bons Objetos de Página modelam a perspectiva do usuário, não a estrutura interna da IU, retornando tipos de dados básicos ou outros Objetos de Página. Há um debate sobre a inclusão de asserções dentro dos Objetos de Página. O autor prefere manter as asserções nos scripts de teste, evitando Objetos de Página inchados e usando bibliotecas de asserção para reduzir a redundância. Esse padrão funciona em várias tecnologias de IU, útil não apenas para testes, mas também como uma interface de script para aplicativos.

Morte às Classes de Tipo: Explorando o Sistema de Módulos Backpack em Haskell

2025-09-15

Este artigo explora a substituição de classes de tipo pelo sistema de módulos Backpack em Haskell. O autor demonstra, através de um exemplo chamado "Death", como definir assinaturas para tipos como Functor e implementar diferentes instâncias (por exemplo, Maybe e IO). A configuração do Cabal permite a seleção flexível de implementações, como usar uma mônada de estado para simular IO durante os testes. Essa abordagem, embora exija mais configuração do Cabal, oferece mensagens de erro mais claras, controle mais flexível e potenciais vantagens de desempenho. O artigo conclui com uma filosofia de programação minimalista, argumentando que a simplificação leva a melhor legibilidade e manutenibilidade.

Desenvolvimento Sistema de Módulos

Instalação Simplificada do Omarchy no CachyOS

2025-09-15
Instalação Simplificada do Omarchy no CachyOS

Este projeto fornece um script para instalar a configuração de desktop Omarchy de DHH no CachyOS, uma distribuição Arch Linux otimizada para desempenho. O Omarchy, uma configuração baseada em Hyprland, prioriza simplicidade e produtividade. O script simplifica a instalação, mas requer familiaridade com o Arch Linux. Ele não instala o CachyOS ou lida com particionamento, formatação ou criptografia; os usuários devem fazer isso previamente. O script opta pelo Yay (assistente AUR) e Fish (shell), mantendo o Tealdeer do CachyOS e o Mise do Omarchy. Importante: ele não instala um gerenciador de exibição ou inicia automaticamente o Hyprland, a menos que já esteja instalado pelo CachyOS. Nenhuma garantia é fornecida; use por sua conta e risco.

Desenvolvimento

Analisando números de versão de pacotes npm com um script Bun

2025-09-15

Este script Bun analisa os números de versão dos pacotes npm. Ele busca todos os IDs de pacotes da API de replicação npm e, em seguida, recupera informações de versão para cada pacote da API do registro npm. O script calcula o número total de versões e o maior número dentro dos números de versão para cada pacote, filtrando os pacotes problemáticos conhecidos. Em seguida, ele exibe listas de pacotes com mais versões e os maiores números em suas versões. Isso ajuda a identificar padrões e problemas potenciais no gerenciamento de versões de pacotes npm.

Desenvolvimento números de versão

arXivLabs: Construindo Novos Recursos do arXiv com Colaboração da Comunidade

2025-09-15
arXivLabs: Construindo Novos Recursos do arXiv com Colaboração da Comunidade

arXivLabs é uma estrutura que permite que desenvolvedores colaborem com a comunidade arXiv para construir e compartilhar novos recursos diretamente no site do arXiv. Os participantes devem adotar os valores do arXiv de abertura, comunidade, excelência e privacidade dos dados do usuário. Tem alguma ideia para melhorar a comunidade arXiv? Saiba mais sobre arXivLabs!

Desenvolvimento

GrapheneOS: Um sistema operacional Android focado em segurança

2025-09-14
GrapheneOS: Um sistema operacional Android focado em segurança

O GrapheneOS (GOS) é um sistema operacional baseado no Android que prioriza a segurança e é compatível apenas com dispositivos Google Pixel. Ele utiliza perfis de usuários múltiplos para garantir privacidade robusta, com criptografia e permissões independentes para cada perfil, criando, na prática, sistemas isolados dentro do seu telefone. Os usuários podem controlar granularmente as permissões de cada perfil, podendo até mesmo interromper completamente a execução em segundo plano. A instalação é simples, as atualizações são fáceis e o gerenciamento de permissões de aplicativos é poderoso. Embora seja um pouco menos amigável que o Android padrão, o GOS oferece um controle sem precedentes para usuários preocupados com segurança e privacidade, tornando-se uma alternativa interessante.

Desenvolvimento

Kernel de Sistema Operacional de Tempo Compartilhado Minimalista em RISC-V usando Zig

2025-09-14
Kernel de Sistema Operacional de Tempo Compartilhado Minimalista em RISC-V usando Zig

Este artigo detalha um kernel de sistema operacional de tempo compartilhado minimalista, implementado em RISC-V usando a linguagem de programação Zig. O projeto, uma reformulação de uma tarefa de graduação em SO, utiliza ferramentas modernas e a arquitetura RISC-V. Ele apresenta threads definidos estaticamente, chamadas de sistema entre threads e escalonamento round-robin por meio de interrupções de temporizador. A virtualização básica de threads é implementada, com cada thread tendo uma pilha e contexto de registro privados. O código é de código aberto, e o autor fornece um guia detalhado da implementação e explicações do código, tornando-o um recurso valioso para estudantes de software de sistemas e arquitetura de computadores.

Desenvolvimento

Caches Inline do SpiderMonkey: Além do Caching Simples

2025-09-14

Este artigo mergulha na implementação de caches inline (IC) no motor JavaScript SpiderMonkey. Ao contrário do caching tradicional, o IC do SpiderMonkey é uma técnica de código automodificável. Ele insere uma série de stubs nos locais de chamada, selecionando dinamicamente caminhos de execução eficientes com base nos tipos de entrada. A primeira chamada executa um caminho de fallback e gera stubs correspondentes com base no resultado. Chamadas subsequentes do mesmo tipo atingem o cache, melhorando significativamente a eficiência. O artigo usa a adição JavaScript como exemplo para explicar como o IC funciona e menciona a arquitetura CacheIR mais recente do SpiderMonkey, que abstrai os detalhes dos ICs para permitir o compartilhamento entre diferentes compiladores.

Desenvolvimento cache inline

SV2TTS em tempo real: Aprendizado por Transferência para Síntese de Texto para Fala Multilocutor

2025-09-14
SV2TTS em tempo real: Aprendizado por Transferência para Síntese de Texto para Fala Multilocutor

Este projeto de código aberto implementa síntese de texto para fala (SV2TTS) multilocutora em tempo real usando aprendizado por transferência a partir de verificação de locutor, baseado na tese de mestrado do autor. É uma estrutura de aprendizado profundo em três estágios: criar uma representação digital de voz a partir de clipes de áudio curtos, e então usar essa representação para gerar fala a partir de texto arbitrário. Embora o projeto seja mais antigo e possa ter qualidade inferior a alternativas comerciais, ele suporta Windows e Linux, com aceleração de GPU recomendada. São fornecidas instruções detalhadas de instalação e uso, juntamente com suporte para vários conjuntos de dados.

Desvendando as Funções e Closures em Rust: Um Mergulho Profundo

2025-09-14
Desvendando as Funções e Closures em Rust: Um Mergulho Profundo

As funções e closures em Rust são uma fonte de confusão para muitos iniciantes. Esta publicação mergulha nos mecanismos subjacentes do sistema de funções e closures de Rust, explicando as relações entre itens de função, ponteiros de função e os três traços de closure: Fn, FnMut e FnOnce. Ela revela como o compilador transforma closures em structs anônimas e as otimizações do compilador por trás de chamadas de função aparentemente simples. A compreensão desses mecanismos subjacentes capacita os desenvolvedores a escrever código Rust mais eficiente e livre de erros, compreendendo como diferentes modos de captura de closure impactam o comportamento.

Desenvolvimento

Backpropagation Eficiente: Simplificando Derivadas de Transformações Lineares com Einsum

2025-09-14

Esta publicação apresenta um método inteligente de backpropagation que simplifica a derivação de qualquer expressão einsum através de uma simples troca de letras. Einsum é uma maneira concisa de expressar transformações lineares, como multiplicação de matrizes, produtos escalares, produtos de Hadamard e muito mais. O artigo usa a multiplicação de matrizes como exemplo, mostrando como realizar a propagação direta e inversa usando einsum e verificando os resultados com JAX. Este método evita derivações complexas, simplificando significativamente os cálculos de backpropagation em aprendizado profundo.

Desenvolvimento transformações lineares

Construtor de consultas de observabilidade: Quatro anos de iteração focados na experiência do usuário

2025-09-14
Construtor de consultas de observabilidade: Quatro anos de iteração focados na experiência do usuário

Uma empresa iterou três vezes em seu construtor de consultas ao longo de quatro anos. As versões iniciais foram baseadas em suposições falhas, levando a problemas de usabilidade, mesmo para engenheiros seniores. As versões V3 e V4 simplificaram demais, faltando expressões booleanas complexas e suporte eficaz para logs. Por meio de amplo suporte ao usuário e feedback, eles reconheceram a importância da experiência do usuário e lançaram a versão V5. O princípio central do V5: 'Parar de tomar decisões para os usuários'. Ele capacita os usuários com mais controle e uma interface mais intuitiva, com recursos poderosos como aninhamento arbitrário, regras de precedência e consultas entre tipos de dados. O V5 recebeu feedback extremamente positivo; os usuários até abandonaram o SQL bruto em favor do construtor. Os planos futuros envolvem atualizações incrementais adicionando subconsultas e junções, aprimorando continuamente a experiência do usuário.

Desenvolvimento construtor de consultas

O retorno surpresa do Perl ao Top 10 do TIOBE: O ressurgimento de uma linguagem clássica

2025-09-14

A recente entrada do Perl no top 10 do índice TIOBE, após um período de relativa calmaria, gerou debates significativos. Essa ressurgência não se deve apenas a avanços técnicos, mas a uma confluência de fatores. O grande volume de livros sobre Perl disponíveis na Amazon, superando os de linguagens como PHP e Rust, fornece uma base significativa de recursos de aprendizado. Além disso, o desenvolvimento contínuo do Perl 5, juntamente com o desaparecimento do Perl 6 (Raku), solucionou a incerteza da comunidade por muito tempo. Fundamentalmente, o Perl mantém seus pontos fortes no processamento de texto, integração perfeita com Linux/shell e sintaxe expressiva, mantendo sua relevância na manipulação de dados e administração de sistemas. Embora criticado por sua sintaxe às vezes obscura, a flexibilidade e o poder do Perl continuam a ressoar em áreas de nicho.

Desenvolvimento

UltraPlot: Um wrapper conciso para Matplotlib para gráficos impressionantes

2025-09-14
UltraPlot: Um wrapper conciso para Matplotlib para gráficos impressionantes

UltraPlot é um wrapper conciso para Matplotlib projetado para criar gráficos bonitos e de qualidade para publicação. Construído sobre o ProPlot e atualizado para o Matplotlib moderno (3.9.0+), ele simplifica a criação de layouts complexos de vários painéis, gráficos cartesianos, projeções e mapas, barras de cores e legendas, inserções e painéis e mapas de cores visualmente atraentes. Facilmente instalável via pip ou conda, com documentação abrangente disponível.

Desenvolvimento

O Futuro da Programação Visual: Além de Nós e Fios

2025-09-14
O Futuro da Programação Visual: Além de Nós e Fios

Este artigo explora as limitações da programação visual, argumentando que ela ficou presa por muito tempo no paradigma de nós e fios, negligenciando o princípio de "a forma segue a função". Usando CellPond como exemplo, o autor destaca que seu sucesso reside em definir primeiro a função subjacente (apenas quatro operações), com a forma surgindo naturalmente. O autor elabora ainda sobre o triplo significado de "função": natureza intrínseca, racionalidade e álgebra, e argumenta que a programação visual deve se concentrar em alavancar a capacidade de reconhecimento de padrões do córtex visual humano para modelar problemas, em vez de simplesmente imitar a programação textual. O artigo propõe modelar problemas como entidades e relacionamentos, e utilizar elementos visuais (cor, agrupamento, movimento) para representar mudanças de estado, quebrando assim as limitações da programação visual existente e criando ferramentas de programação mais poderosas.

Desenvolvimento

Proposta Safe C++ Abandonada: Comitê C++ Prioriza Perfis

2025-09-14

Há um ano, a proposta Safe C++ visava adicionar um subconjunto seguro ao C++, oferecendo garantias robustas como o Rust, sem quebrar o código C++ existente. No entanto, a proposta foi rejeitada pelo comitê C++ em favor da abordagem de Perfis. Os Perfis definem modos restritos de C++ para garantir propriedades de segurança. É uma solução mais pragmática e fácil de adotar do que o Safe C++, embora possa oferecer garantias de segurança menos abrangentes. Em última análise, é considerado um caminho mais realista para o futuro.

Desenvolvimento Perfis

Lexy: Uma biblioteca de analisador C++ que rivaliza com analisadores PEG

2025-09-14
Lexy: Uma biblioteca de analisador C++ que rivaliza com analisadores PEG

Lexy é uma biblioteca de analisador C++ de alto desempenho que equilibra desempenho e controle. Em comparação com outros analisadores PEG como Boost.Spirit e PEGTL, Lexy evita retrocesso implícito controlando as condições de ramificação, melhorando o desempenho e simplificando o tratamento de erros. Lexy suporta recursos avançados como recuperação de erros, análise de precedência de operador e permite análise de cópia zero diretamente em suas próprias estruturas de dados. Embora a gramática do Lexy seja mais verbosa do que a do Boost.Spirit, ela é mais adequada para gramáticas maiores. Os tempos de compilação são razoáveis, e o design modular ajuda a otimizar a velocidade de compilação.

Desenvolvimento analisador

pass: Gerenciador de senhas de linha de comando simples, seguro e extensível

2025-09-14

pass é um gerenciador de senhas de linha de comando que usa criptografia GPG e segue a filosofia Unix. Cada senha é armazenada em um arquivo criptografado com GPG com o nome do site ou recurso. Esses arquivos podem ser organizados em pastas, copiados facilmente entre computadores e gerenciados com ferramentas padrão de linha de comando. O pass fornece comandos simples para adicionar, editar, gerar e recuperar senhas, com suporte para copiar para a área de transferência e rastreamento de alterações baseado em Git. Os usuários gerenciam o armazenamento de senhas usando comandos padrão do shell Unix junto com o pass, sem exigir novos formatos de arquivo ou paradigmas. Ele suporta extensões e possui uma comunidade ativa com inúmeros clientes e interfaces gráficas.

Desenvolvimento criptografia gpg

Consequências catastróficas do pthread_cancel no cURL 8.16.0 e sua remoção

2025-09-13

O cURL 8.16.0 introduziu o uso de pthread_cancel para interromper getaddrinfo(), visando melhorias de desempenho. No entanto, essa alteração causou sérios vazamentos de memória. Isso ocorre porque getaddrinfo() pode ser cancelado durante a leitura do arquivo /etc/gai.conf, levando à não liberação da memória alocada. Devido à dificuldade em resolver esse problema e ao potencial para sérios problemas de estabilidade, a equipe do cURL decidiu remover esse recurso em #18540, recomendando que os usuários utilizem a biblioteca c-ares como alternativa, apesar de algumas limitações funcionais.

Desenvolvimento vazamento de memória

Dentro dos Compiladores JIT do Ruby

2025-09-13
Dentro dos Compiladores JIT do Ruby

Este artigo mergulha no funcionamento interno dos compiladores JIT do Ruby, como YJIT e ZJIT. Ele explica como o código compilado JIT coexiste com o bytecode e como o Ruby alterna entre os modos de execução. O artigo também esclarece como o Ruby decide quais métodos compilar (com base na contagem de chamadas) e quando o código compilado JIT retorna ao interpretador (por exemplo, ativação do TracePoint ou métodos principais redefinidos). Em essência, o compilador JIT do Ruby encontra um equilíbrio entre desempenho e correção por meio de um mecanismo engenhoso.

Desenvolvimento

Executando uma VM 486 no Sipeed Tang: Uma façanha de amador

2025-09-13

O autor portou com sucesso o core ao486 PC do MiSTer para o Sipeed Tang 138K FPGA, criando um projeto chamado 486Tang. Isso marca a primeira vez que o ao486 foi portado com sucesso para uma FPGA não-Altera. A porta apresentou vários desafios, incluindo gerenciamento de memória (usando SDRAM para memória principal, DDR3 para o framebuffer), armazenamento em disco (acesso direto ao cartão SD) e um processo de depuração complexo. Para superar as dificuldades de depuração de hardware, o autor utilizou inteligentemente o Verilator para simulação de subsistema e de sistema inteiro, usando mensagens de depuração do Bochs BIOS e flags de rastreamento personalizadas para identificar problemas. Por fim, por meio de uma série de otimizações de desempenho, como redução de árvore de reset e fan-out, otimização de busca de instruções e otimização de TLB, o 486Tang atingiu aproximadamente os níveis de desempenho do 486SX-20. Este projeto demonstra as impressionantes habilidades de desenvolvimento de FPGA e a capacidade de resolução de problemas do autor.

Desenvolvimento

Vicinae: Um lançador de desktop de alto desempenho que desafia o Raycast

2025-09-13
Vicinae: Um lançador de desktop de alto desempenho que desafia o Raycast

Vicinae é um lançador de desktop nativo de alto desempenho, construído com C++ e Qt, inspirado no Raycast. Ele possui uma API de extensão amplamente compatível, utilizando React/TypeScript do lado do servidor, eliminando a necessidade de um navegador ou Electron. Recursos incluem indexação de arquivos com pesquisa de texto completo, um seletor de emojis inteligente, uma calculadora, um rastreador de histórico de área de transferência criptografado, atalhos, integração com o gerenciador de janelas e um sistema de temas personalizável. Embora alguns recursos possam ter suporte limitado em determinadas plataformas, o Vicinae visa fornecer aos desenvolvedores e usuários avançados acesso rápido e centrado no teclado a ações comuns do sistema.

Desenvolvimento lançador de desktop

Mago: Ferramenta de análise estática, formatação e lint para PHP, extremamente rápida, escrita em Rust

2025-09-13
Mago: Ferramenta de análise estática, formatação e lint para PHP, extremamente rápida, escrita em Rust

Mago é uma ferramenta extremamente rápida para lint, formatação e análise estática de PHP, escrita em Rust. Inspirada no ecossistema Rust, ela traz velocidade, confiabilidade e uma experiência de desenvolvedor excepcional para projetos PHP de todos os tamanhos. Recursos incluem lint, análise estática, correções automáticas, formatação, verificações semânticas e visualização de AST. Mago visa ser uma alternativa unificada e mais rápida a ferramentas existentes como PHP-CS-Fixer, Psalm, PHPStan e PHP_CodeSniffer.

Desenvolvimento

Primeiras Impressões do Gleam: Analisando Logs Antigos do AIM

2025-09-13

O autor usa a linguagem de programação funcional relativamente nova, Gleam, para analisar seus antigos logs do AOL Instant Messenger de duas décadas atrás. A postagem detalha seu processo de aprendizado, cobrindo o tratamento de argumentos de linha de comando, compilação, teste e técnicas de programação funcional como casamento de padrões e operadores de pipeline. O autor compartilha suas experiências positivas com a sintaxe elegante de pipeline do Gleam, mas também aponta deficiências como sua biblioteca padrão limitada e o tratamento de erros um pouco estranho.

Desenvolvimento

OpenJDK 25 Inclui Perfilador de CPU Experimental

2025-09-13
OpenJDK 25 Inclui Perfilador de CPU Experimental

Após mais de três anos de desenvolvimento, um perfilador de tempo de CPU experimental foi incluído no OpenJDK 25. Com base no JFR, este novo perfilador oferece medições mais precisas do consumo de ciclos de CPU, corrigindo deficiências do perfilador de tempo de execução existente, especialmente sua amostragem inadequada em sistemas multi-core e seu tratamento menos que ideal de aplicativos limitados por E/S. Embora atualmente limitado ao Linux, ele fornece aos desenvolvedores uma ferramenta poderosa para análise de desempenho, permitindo a otimização da utilização da CPU e melhorando a taxa de transferência do aplicativo.

Codificação de IA: Hype ou Ferramenta?

2025-09-13

O autor argumenta que as atuais ferramentas de codificação de IA são essencialmente compiladores avançados, com sua eficácia exagerada. Elas dependem de bases de código e padrões existentes, não de verdadeira "codificação de IA". Embora a IA possa aumentar a produtividade, os ganhos reais são limitados, e existem muitas restrições, como a entrada imprecisa de linguagem natural e fluxos de trabalho não determinísticos. O autor critica o investimento excessivo em codificação de IA e defende o foco em melhorar a infraestrutura fundamental, como linguagens de programação, compiladores e bibliotecas, em vez de perseguir o hype.

Atualização do crate `image` do Rust: suporte a orientação EXIF adicionado para redimensionamento de imagens

2025-09-13
Atualização do crate `image` do Rust: suporte a orientação EXIF adicionado para redimensionamento de imagens

O crate de processamento de imagens `image` do Rust lançou a versão v0.25.8, adicionando suporte para dados de orientação EXIF. Isso corrige um problema comum em que o redimensionamento de imagens ignorava a orientação, resultando em miniaturas giradas ou invertidas. A nova função `apply_orientation` corrige a orientação da imagem antes do redimensionamento, garantindo que a miniatura corresponda à original. Isso é particularmente útil ao trabalhar com imagens de câmeras e telefones, eliminando o incômodo de imagens desalinhadas.

Desenvolvimento

compile_flagz: Aprimorando o Suporte IDE para C/C++ em Sistemas de Build Zig

2025-09-13

O sistema de build do Zig oferece recursos poderosos de compilação cruzada para projetos C/C++, mas o suporte do editor muitas vezes fica para trás devido à falta de caminhos de inclusão. O compile_flagz resolve isso gerando um arquivo `compile_flags.txt`, um formato padrão usado por servidores de linguagem como o clangd. Esse arquivo fornece as configurações de compilação necessárias, permitindo recursos como conclusão de código e destaque de erros. O autor detalha seu uso e implementação, mostrando sua eficácia em um projeto de descompilação de jogo (ROLLER). Um guia de início rápido também é fornecido.

Desenvolvimento Conclusão de Código
1 2 3 4 5 6 8 10 11 12 214 215