Construindo um jogo bootável bare-metal para Raspberry Pi em C#
Um jogo em estilo bare-metal para Raspberry Pi escrito em C# usando UEFI e NativeAOT gera debate sobre o quanto isso é realmente “bare metal” e se apontar para firmware em vez de um SO é prático ou apenas um truque divertido. Os comentaristas usam isso como ponto de partida para examinar a evolução do .NET — do controle manual de memória e ajuste do GC ao NativeAOT, WASM e ferramentas multiplataforma como Rider e VS Code — e o quão perto o C# está de ser viável em contextos embarcados e de microcontroladores. Muitos veem forte potencial em C# voltado a desempenho e no NativeAOT, mas observam que ecossistemas, qualidade das ferramentas e estabilidade de plataforma a longo prazo importam tanto quanto as capacidades brutas da linguagem.
Gerenciamento de memória e GC em C#
- Alguns querem que C# suporte alocação/desalocação totalmente manual de objetos gerenciados para evitar o GC, por exemplo, via ponteiros inteligentes com contagem de referências ou flags do compilador.
- Outros argumentam que isso adiciona grandes encargos de correção, com pouco ganho de desempenho no mundo real em comparação com o GC الحالي.
- Ferramentas existentes: ponteiros
unsafe, structs,Span/Memory,where T : unmanaged, APIs de controle do GC (suspender/retomar, regiões sem GC) e APIs de alocação para interoperabilidade. - Há interesse em um modo de GC “sem operação” semelhante ao Epsilon GC do Java, mas existem preocupações de que padrões típicos de alocação esgotariam a memória rapidamente.
- Modelos alternativos em tempo de compilação ou híbridos (por exemplo, estilo Mojo, pesquisas como Perceus) são mencionados como promissores, mas limitados pela semântica da linguagem e pela usabilidade.
“Bare metal” vs UEFI e Raspberry Pi
- Alguns dizem que isso não é realmente “bare metal” porque roda como uma aplicação UEFI e usa APIs gráficas da UEFI em vez de controlar o hardware diretamente.
- Outros respondem que a UEFI já é muito de baixo nível e prática para trabalho hobbyista de SO/jogos.
- A discussão toca em abordagens ainda mais “bare”: programação direta do VideoCore, vídeo gerado por GPIO ou técnicas estilo microcontrolador.
- A thread observa que o Raspberry Pi pode ser usado com UEFI e que o repositório realmente menciona Pi, embora o texto do artigo mal o trate, o que confundiu alguns leitores.
Ecossistema .NET, ferramentas e história multiplataforma
- Vários comentários se impressionam com o .NET moderno: suporte multiplataforma, IoT, jogos, WASM e mobile.
- Debate sobre ferramentas:
- Visual Studio é elogiado pela capacidade, mas criticado pela lentidão e pelo foco apenas no Windows.
- Rider e VS Code são vistos como alternativas fortes e multiplataforma; alguns dizem que estão substituindo o Visual Studio em muitos cenários.
- UI multiplataforma e WASM:
- Alguns veem o suporte do .NET a WASM/Android/iOS (Blazor, MAUI) como mais fraco ou instável do que Kotlin multiplatform e Compose.
- Outros rebatem, citando uso em produção de .NET WASM, múltiplos frameworks de UI multiplataforma (Avalonia, Uno) e argumentam que a história “não Android” do Kotlin também tem seus problemas.
- Há desacordo sobre se o .NET é “espetáculo” ou uma stack pragmática e amplamente capaz.
NativeAOT, desempenho e comparação com Go
- O NativeAOT é visto como promissor; a falta de suporte robusto ao EF Core é um ponto de dor comum.
- Dapper AOT é citado como uma resposta às necessidades de AOT (por exemplo, para serverless).
- Alguns dizem que C# poderia rivalizar com Go quando o AOT amadurecer, embora a velocidade de compilação ainda não esteja no mesmo nível de Go.
Desenvolvimento embarcado e de microcontroladores
- Uma perspectiva: as ferramentas, bibliotecas e a portabilidade para MCU são “lixo”, e ecossistemas de nível mais alto (C#, Python, JS) poderiam incentivar práticas melhores.
- Outra resposta diz que a qualidade varia como em qualquer domínio, que ferramentas sérias de MCU são boas, e que a escolha da linguagem importa (C++, Rust etc. já são usados).
- Há curiosidade — mas também ceticismo — sobre C# em microcontroladores muito pequenos; muitos veem isso como tecnicamente interessante, mas não obviamente prático.
Reações gerais
- Muitos expressam entusiasmo por ideias “amaldiçoadas” como binários nativos em C# e jogos meio bare-metal, vendo isso como experimentos divertidos.
- Outros estão mais interessados em trabalho bare-metal mais profundo (bootloaders personalizados, acesso direto ao hardware) do que em truques baseados em UEFI.