As pessoas portaram Doom para tudo, desde calculadoras até caixas registradoras do McDonald's. Recentemente, houve um impulso para executar o software em plataformas que não possuem o poder de processamento real, sendo documentos PDF e Word os exemplos mais recentes. Claro, esses métodos são muito lentos, mas incrivelmente, o jogo pode até ser executado em plataformas que não sejam de computador.

As pessoas portaram Doom para tudo, desde calculadoras até caixas registradoras do McDonald's. Recentemente, houve um impulso para executar o software em plataformas que não possuem o poder de processamento real, sendo documentos PDF e Word os exemplos mais recentes. Claro, esses métodos são muito lentos, mas incrivelmente, o jogo pode até ser executado em plataformas que não sejam de computador.

O engenheiro de software Dmitri Mitropoulos levou o trabalho de portar Doom para plataformas não informáticas a um nível totalmente novo. Este programador conseguiu fazer Doom rodar dentro do sistema de tipos do TypeScript, que era tão complexo que levou um ano inteiro para completar essa façanha.

TypeScript é uma linguagem desenvolvida pela Microsoft que adiciona recursos de verificação de tipo estático ao JavaScript para detectar erros de codificação antes da execução. Pense nele como um verificador ortográfico ou gramatical do seu código, garantindo que funções e variáveis ​​sejam inseridas corretamente. Os desenvolvedores costumam usá-lo para criar grandes aplicativos JavaScript.

Rodar jogos dentro do sistema de tipos do TypeScript é considerado "impossível". Mitropoulos ainda observou que iniciou o projeto para provar “rapidamente” por que isso não poderia ser feito. No entanto, à medida que se aprofundava em sua pesquisa, ele ficou obcecado em fazê-la funcionar. No final, até mesmo desenvolvedores experientes de TS ficaram impressionados com ele e não tinham nada a dizer.

Mitropoulos reage ao TypeScript finalmente renderizando o primeiro quadro do apocalipse.

A versão do Doom de Mitropoulos executou 3,5 trilhões de linhas de tipos e consumiu impressionantes 177 TB. Demora 12 dias para compilar um quadro, resultando em 0,0000009645 quadros por segundo incrivelmente lentos. O rastreador de tipo TypeScript deve processar 20 milhões de instâncias de tipo por segundo para produzir saída, resultando em taxas de quadros extremamente lentas.

Apesar dos gastos, Mitropoulos acredita que ganhos de desempenho são possíveis. No canal Michigan TypeScript Discord, ele sugeriu que, com otimizações adicionais, os tempos de compilação poderiam ser reduzidos para “1 a 12 horas”. Ele identificou áreas onde pode melhorar sua velocidade.

Para que isso acontecesse, ele construiu uma máquina virtual inteiramente usando tipos TypeScript, incluindo a implementação lógica de todas as 116 instruções WebAssembly necessárias para executar o Doom. Cada elemento de um computador funcional – memória, espaço em disco e até mesmo o cache L1 da CPU – deve ser cuidadosamente recriado no sistema de tipos. Como o TypeScript só permite a iteração de strings do lado esquerdo, ele precisa digitar o algoritmo binário ao contrário.

A execução do programa requer um tempo de execução WebAssembly personalizado que lide com tudo no editor TypeScript. Além disso, o compilador TypeScript teve que ser modificado para lidar com a escala do projeto, já que o rastreador de tipo sozinho consumiu mais de 90 GB de RAM durante a execução.

Mitropoulos descreveu o trabalho como um desafio assustador. Ele escreveu 12.364 testes manuscritos, aprendeu várias linguagens de programação e estimou inicialmente que o projeto exigiria 1,25 PB antes da otimização. A certa altura, a compilação de uma estrutura exigia instanciação contínua por três meses. Ele disse que a inteligência artificial não pode ajudar.

“Oh, a IA não pode fazer nada sobre nada disso”, disse Mitropoulos em sua breve explicação em vídeo de sete minutos. "É de nível tão baixo que não há arrays, objetos, strings ou booleanos dentro do mecanismo, apenas números binários, e Doom usa apenas números inteiros de 64 e 32 bits, é isso. Ah, e esses números inteiros não são assinados nem não assinados. Levei o dia todo para descobrir isso."

Essa árdua tarefa levou um ano inteiro, trabalhando 18 horas por dia, para ser concluída. Outros desenvolvedores de TS tiveram muitas dúvidas sobre o projeto, então Mitropoulos planeja lançar mais dois vídeos explicando os detalhes altamente técnicos e suas motivações. Agora, temos mais uma evidência de que Doom pode rodar em qualquer coisa – incluindo coisas que não conseguem rodar o jogo.