#007 - Macros em Rust | Linux na TV Box | Como programar melhor?
Semana no baixo nível: atualizações e assuntos que rolaram nos últimos dias na comunidade do desempenho
Macros em Rust Link para o cabeçalho
Os programas compilados costumam ter dois tipos de modos de operação: runtime e comptime. O que acontece enquanto o programa roda, é o chamado runtime, já o que é calculado durante a compilção são as operações em comptime.
Tradicionalmente as linguagens tratam esses dois modos de operação de maneiras diferentes, então é como se houvesse uma linguagem para runtime e uma outra para comptime.
Em C há o #define
e substituição de texto para compilação, já em C++ temos os templates, e em Rust há os macros.

Qualquer um que já tentou programar em comptime sabe que a experiência não é muito legal, e em Rust parece não ser muito diferente. O @Krone apareceu com essa dúvida lá no Discord, e o @caio deu algumas considerações sobre a linguagem (inclusive parabéns @caio pela vaga, sucesso!)

Além de serem um sistema especial, debuggar coisas feitas em tempo de compilação costuma ser um pesadelo.

Uma exceção desse sistema é Zig, que utiliza a mesma linguagem para comptime e runtime, que foi um grande atrativo pra mim. Convido a navegarem no nosso repositório zLBM para entender um pouco da capacidade que Zig nos trás com comptime, facilitando e muito minha vida.
Uma Linguagem Nova Por Semana Link para o cabeçalho
Já estão cansados de saber que eu uso e promovo Zig pra baixo nível. Isso é porque realmente me apaixonei pela linguagem depois dos primeiros projetos, superou todas minhas expectativas.
Dito isso, Zig não é a única linguagem de baixo nível que “vai tomar o lugar de C”. Temos vários outros exemplos que sempre me perguntam: Carbon, D, V, entre outras. Nessa semana no Discord rolou um debate sobre essas alternativas e as perspectivas de cada uma.

Me lembro de ver V envolvida em algumas polêmicas, mas nunca imaginei que o pessoal não gostasse tanto assim dela.

Parece que outras linguagens, como Carbon, não vem ganhando tanta tração também.

Além disso temos o CPP Front que eu nunca tinha ouvido falar, mas vamos ver no que dá.

Fico feliz de ver tantas alternativas surgindo, com o objetivo de superar C e C++ (ótimas linguagens, mas com problemas crônicos que já sabemos há tempos, e que podemos superar). Rust parece ser a mais promissora, principalmente por permitir sistemas de segurança de memória muito mais robustos. Zig ainda tem muito caminho para percorrer, mas creio que suas decisões estratégicas vão a fazer chegar no mesmo patamar de Rust daqui alguns anos.
É esperar pra ver
Linux na TV box Link para o cabeçalho
Um aparalho comum na casa do brasileiro é a TV Box. Permitindo o acesso a diversos aplicativos multimídia para o telespectador. Se tem CPU, pode rodar Linux, e se pode rodar Linux, alguém da comunidade do Desempenho vai instalar Arch nele, como o @RecursiveError fez.

Mas nem sempre as coisas vão como esperado, já que mexendo com dispositivos embarcados uma placa queimada é só mais uma terça feira (inclusive já queimei uma Raspberry que quase me fez reprovar numa matéria…).

Sobre Arch, particularmente nunca instalei ele em nenhum PC, mas é uma coisa que está na minha lista de a fazeres. Isso porque o Arch Linux é famoso por “ser cru”, então você tem que configurar absolutamente tudo do zero, o que é uma benção e um pesadelo.

A documentação do Arch é conhecida por ser uma das melhores de todas, então o processo é menos doloroso se você segui-lá, mas não quer dizer que é fácil.

Então quem for instalar Arch ou qualquer outra distribuição de Linux, em qualquer dispositivo, fique a vontade para pedir ajuda ou mostrar o que fez lá na comunidade do Desempenho.
Como programar melhor? Link para o cabeçalho
Programar é muito bom, melhor ainda é ganhar dinheiro programando. Pra isso é importante mostrar suas habilidades técnicas para o recrutador, mas antes é preciso adquirir essas habilidades. A melhor maneira de fazer isso é por meio de projetos.

Os projetos não só mostram para os outros do que somos capazes, como também são fundamentais para o nosso desenvolvimento. Programação é prática, e se você não pratica, não aprende. Para teoria isso é o equivalente a resolver exercícios dos livros, para projetos é o equivalente a fazer projetos.

Mas não devem ser qualquer tipo de projeto, de PokeDex o GitHub está cheio. Há um valor muito mais alto na resolução de problemas reais por meio de projetos. Então escolha alguma coisa que incomoda você ou um problema real e faça um código pra resolver isso, na linguagem ou tecnologia necessária.


Você pode automatizar alguma tarefa recorrente, montar um relatório interativo, criar macros em planilhas, fazer um sistema de notificações, etc.
Pra ficar bom em programação, o principal é programar.
No canal Link para o cabeçalho
O suposto teste de desempenho me tirou do sério. Quase não se repercutem benchmarks na bolha dev, e quando repercutem são esses testes inúteis. Me senti na obrigação de fazer um vídeo expondo o absurdo, e falando sobre como benchmarks de verdade são feitos.
Uma das habilidades mais importantes para um programador é saber modelar um problema. A partir de uma série de requisitos, gerar um modelo computacional capaz de resolver o problema da melhor maneira possível. O Advent of Code é uma ótima maneira de praticar essa habilidade, e escolhi o dia 5 para mostrar a modelagem de um problema que considero básico, que um dev junior deveria conseguir propor sem muitas dificuldades.
Para membros já saiu o vídeo mostrando essa solução (acabou ficando um pouco diferente do que proponho no vídeo, mas para melhor).
Para membros Link para o cabeçalho
Mais duas aulas do mini curso de Zig já estão no ar. A 4ª aula é sobre as strings em Zig, em que já começamos a falar de ponteiros. Já na 5ª falamos sobre funções e módulos, como criar e usar essas funcionalidades.
Também resolvemos o problema do dia 5 do advent of code com grafos, uma modelagem elementar de algoritmos. Ficou um ótimo exemplo de como modelar um problema e como algoritmos e estrutura de dados são importantes na nossa área.
Os vídeos do Advent of Code continuam a todo vapor, já chegamos no dia 10
Notícias Link para o cabeçalho
- Código do jogo VVVVVV é compilado com Zig e mostra a capacidade da linguagem se tornar uma ferramenta de build. É possível utilizar a toolchain de Zig para compilar projetos completos em C e C++, e o repositório all your codebase mostra vários exemplos disso, como CPython e FFMpeg. A vantagem disso é permitir o uso do cross-compilation de Zig, gerando libs e binários para todas arquiteturas e sistemas operacionais disponíveis, sem necessidade de ferramental a mais para isso.
- SUPOSTO benchmark entre linguagens quebra internet. Uma suposta comparação entre diversas linguagens ficou famosa na bolha dev e me obrigou a fazer um vídeo desmistificando alguns pontos, e explicando o porquê aquele é um resultado totalmente inútil, que não serve pra absolutamente nada. Pelo lado bom, me incentivou a trazer mais conteúdos mostrando como se fazem essas comparações de maneira séria.
- AMD desativa loop buffer no Zen 4. O loop buffer fica no frontend da CPU e permite com que a CPU desative boa parte do seu frontend em loops muito pequenos. Em algum momento entre começo de 2023 e fim de 2024 a AMD decidiu desativar essa funcionalidade por uma atualização de BIOS. Apesar de não ser claro o porquê disso, o impacto é mínimo em desempenho e consumo. Recomendo ler o artigo para entenderem como é o processo de medir desempenho em CPU.
- Jornada paranaense sobre microeletrônica (SeMicro-PR) está acontecendo aqui em Curitiba. Diversas apresentações e trabalhos em microeletrônica, uma área muito cara e próxima de nós de baixo nível. As sessões ficam gravadas no canal de YouTube do GICS (Grupo de Concepção de Circuitos e Sistemas Integrados) da UFPR, recomendo visitarem o canal e checarem as apresentações.