Una línea de código en APL: mi viaje de 7 meses creando un juego de voxeles

Fuentes: Saying Goodbye to one line of APL
Una línea de código en APL: mi viaje de 7 meses creando un juego de voxeles
Imagen generada con IA

Este contenido narra la historia de una línea de código en APL (A Programming Language) que cambió la perspectiva del autor sobre su desarrollo como programador. El projeto consiste en un juego de voxeles escrito en Dyalog APL durante aproximadamente 7 meses, donde el autor aprendió APL específicamente para realizar este desarrollo.

La línea en cuestión es: ↑[0]{edges∨solid>⍵}¨0 1 2∘.{⍵⌽[⍺]solid}¯1 1
Su función principal es determinar qué caras de los bloques(frontales) están expuestas y pueden renderizarse en el vertex buffer del chunk. Funciona mediante dos arraysbooleanos 3D de tamaño 16x128x16: uno representa los bloques sólidos y otro los bordes. La lógica desplaza el array sólido en cada uno de los 3 ejes usando rotaciones (⌽), compara cada desplazamiento con el original mediante mayor que (>), y Marca los bordes como visibles para evitar problemas de desplazamiento envuelto.

Este enfoque fue inspirado directamente en el famous Game of Life one-liner de APL, que usa la misma técnica de Producto externo combinando rotaciones para procesar múltiples posiciones simultáneamente.

El autor destaca tres ventajas de esta línea: cabe en la cabeza(se puede memorizar en menos de 30 segundos), permite reflexionar sobre el código sin computadora durante actividades cotidianas, y aunque parezca ineficiente por usar un lenguaje interpretado, alcanza más de 60 FPS en un MacBook.

Como consideración, esta línea tenía una limitación: generaba geometría innecesaria al marcar todas las caras de los bloques en los bordes como visibles, incluso cuando apuntaban hacia chunks adyacentes. El autor resolvió esto añadiendo padding(agregando ceros antes de rotar) para reducir la geometría多余的 y logró una reducción de 5 veces en los vértices por chunk.