Jogo 3D em C# com apenas 2KB
Recentemente publiquei algo falando que comecei com um computador de 2KB. Queria fazer jogo.
Não é a mesma coisa, a relação é mais complicada e não vou explicar aqui, mas fazer um jogo que faça algo útil com 2KB no executável é algo sem maiores dificuldades... quando você está programando em C. Ou Assembly. Até vai em C++ ou Rust, ou Zig, com as flags certas, mas fazer o mesmo com C# parece impossível.
C# que pegou a ideia inicial de Java (não vou contar toda a história aqui, muitos sabem, muitos sabem algo errado sobre ela), e criou uma tecnologia interessante, mas cheia de defeitos. Naquela época estourou a ideia que hardware não é problema, que você pode desperdiçar recursos, que o importante é ser mais fácil, ter tudo pronto. E de lá pra cá o mercado de Ti "só" tem tomado decisões erradas. Mesmo quando alguns acontecimentos vão mostrando o contrário e precisam voltar atrás. Tanto é mentira isso que algumas das linguagens que mais florescem agora são mais simples, enxutas que permitem mais eficiência geral, pelo menos um lado tem melhorado.
C# em si não é uma linguagem que fará tudo ficar pesado, mas o .NET que é a infra que costuma ser usada para C# ser útil, é pesadíssimo, segue a linha da JVM, é um desperdício e só faz sentido em alguns cenários (nem vou falar como web pode ser pior). Por isso na última década o .NET começou ser enxuto, dar opções para fazer mais simples. Não tem milagre que ele possa fazer, mas é impressionante que antes um Hello World precisava de dezenas de megabytes e agora consegue em kilobytes. E ainda vai melhorar.
Mas pode não ser suficiente usar algumas flags para enxugar tudo isso. Pode precisar ser mais enxuto ainda.
Não que seja sempre uma boa solução, ainda é usado mais como demonstração, mas o .NET ficou tão flexível que existem alternativas de implementação quando precisa de algo muito simples. Tem lá suas desvantagens, mas estão criando bibliotecas simplificadas que abrem mão de alguns recursos para entregar o mesmo que C entrega. mesmo com limitações, não são maiores do que C já tem, então a comparação fica até justa.
Isso já foi feito antes algumas vezes, mas agora o resultado se superou. Quem quiser conhhcer o experimento da pessoa clica aqui.
Tem uns truquezinhos, é verdade, mas atinge o objetivo.
Roda no Linux também.
Espero que outras tecnologias comecem pegar esse rumo. O que acha? O que sabe de outras?
Veja o repositório abaixo. Ajuda ver como os jogos eram construídos no passado, onde 2KB fazia coisas incríveis para o tamanho. Usava-se inteligência em vez de força bruta.
Colocar o executável dentro de um QRCode foi a cereja do bolo :D
Observou? Faz sentido para você?
Espero ter ajudado. Em geral estou à disposição na plataforma (sem abusos :D)
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).