La combinación de Fortran y WebAssembly
- Fortran es un lenguaje de programación antiguo que apareció por primera vez en 1957, y es más antiguo que el lenguaje C, la CPU Intel 4004 y la computadora mainframe IBM System/360.
- Fortran se ha utilizado en tareas intensivas en cómputo dentro de aplicaciones científicas y de ingeniería, y algunos consideran que es más eficiente que C para operaciones numéricas.
- Esta entrada de blog explica cómo compilar código Fortran existente a WebAssembly para poder ejecutarlo en un navegador web.
¿Cuál es el problema?
- Existen varias formas de compilar Fortran a WebAssembly, pero ninguna ofrece soporte completo para todas las funcionalidades.
- Cada método tiene desventajas y no es una solución simple de conectar y usar.
Resumen de compiladores
- Ha habido algunos cambios en los compiladores de Fortran basados en LLVM.
- La utilidad f2c convierte Fortran 77 a código C, pero no es compatible con código Fortran moderno.
- El compilador LFortran ha llegado a soportar muchas funcionalidades, aunque todavía pueden surgir problemas en algunos proyectos.
- Dragonegg es un plugin de GCC que genera LLVM IR, pero requiere versiones antiguas de GCC y LLVM.
- Classic Flang no soporta salida de 32 bits, y LLVM Flang actualmente no genera salida para WebAssembly de forma predeterminada.
Compilar y usar WebAssembly con LLVM Flang
- Es necesario modificar el código fuente de LLVM Flang para implementar el objetivo WebAssembly.
- Se puede aprovechar el diseño modular de LLVM para usar el frontend de Flang y el backend de WebAssembly.
Llamar una subrutina de Fortran desde C
- Se repasa cómo compilar y enlazar una subrutina de Fortran como parte de un programa en C.
Volviendo a LLVM Flang
- Se pueden compilar subrutinas de Fortran con el compilador LLVM Flang, pero como el objetivo WebAssembly todavía no está implementado, es necesario aplicar parches al código fuente.
Llamar rutinas de Fortran desde JavaScript
- Se puede usar Emscripten para enlazar objetos Fortran y llamarlos directamente desde JavaScript.
La biblioteca de runtime de Fortran: el camino hacia "Hello, World!"
- Se explican los problemas que surgen al intentar construir un programa "Hello, World!" en Fortran.
- Es necesario compilar la biblioteca de runtime de LLVM Fortran para WebAssembly.
Opinión de GN⁺
- Este artículo muestra un intento de integrar un lenguaje tradicional como Fortran con tecnologías web modernas. Este enfoque puede ser útil para llevar a la web bibliotecas numéricas existentes y ya probadas.
- El proceso de compilar Fortran a WebAssembly muestra bien los desafíos de portar una base de código existente a una plataforma nueva. En especial, los problemas relacionados con el cross-compiling son factores importantes que también deben considerarse al portar a otros lenguajes o plataformas.
- Aunque esta tecnología es interesante, todavía existen límites prácticos para realizar en la web tareas de cálculo numérico que exigen alto rendimiento. WebAssembly aún podría no ofrecer el mismo nivel de rendimiento que las aplicaciones nativas tradicionales.
- El desarrollo de LLVM Flang es muy activo, y se espera que estos esfuerzos de desarrollo tengan un impacto positivo en la comunidad de Fortran. Sin embargo, los diversos problemas mencionados en este artículo sugieren que todavía quedan retos por resolver.
- Este artículo ofrece información útil para desarrolladores que buscan integrar Fortran con tecnologías web, y puede ser de especial ayuda para quienes están considerando desarrollar herramientas basadas en la web en áreas como análisis numérico o computación científica.
1 comentarios
Comentarios de Hacker News
George investigó sobre Fortran mientras participaba en el proyecto WebR para ejecutar R en el navegador web
Experiencia trabajando hace 20 años en un compilador FORTRAN en Xilinx
barfRecomiendan compilar f18 usando el código fuente más reciente del proyecto LLVM
Elogios a la forma de explicar usando el enfoque de “el ejemplo no trivial más simple”
Mencionan que no saben mucho sobre el desarrollo con WebAssembly
Pregunta sobre si existe un ecosistema listo para “producción” para álgebra lineal en JavaScript
Opinión de que les gustaría ver si hoy podrían ejecutar código Fortran 78 escrito en 1981/82, si lo hubieran conservado
Mencionan que les parece extraño que no se hable más de LFortran
Aportan información sobre el uso de Fortran en .NET y Java
Comparten experiencia compilando TensorFlow para el navegador