1 puntos por GN⁺ 2024-04-07 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2024-04-07
Comentarios de Hacker News
  • George investigó sobre Fortran mientras participaba en el proyecto WebR para ejecutar R en el navegador web

    • El código fuente de R incluye una cantidad considerable de código Fortran
    • Originalmente, WebR usaba f2c para convertir Fortran a C, pero con parches para LLVM Flang ahora puede compilarse con un compilador Fortran real
    • George no lo menciona directamente en la publicación del blog, pero espera que Flang acepte sus parches o implemente otros mejores
    • Si estos parches ya no tuvieran que mantenerse por separado y Flang sin modificar pudiera compilar a wasm, también ayudaría a otros proyectos que usan Fortran
  • Experiencia trabajando hace 20 años en un compilador FORTRAN en Xilinx

    • Lo más memorable fue que el archivo de cabecera f2c.h incluía una definición llamada barf
  • Recomiendan compilar f18 usando el código fuente más reciente del proyecto LLVM

    • Mencionan que el proyecto LLVM avanza rápido, y que depurar problemas ya resueltos o pasar por alto funciones que ya existen es una pérdida de tiempo
  • Elogios a la forma de explicar usando el enfoque de “el ejemplo no trivial más simple”

    • Dicen que pudieron aprender mucho a partir del problema concreto de “llamar funciones BLAS desde JavaScript”
  • Mencionan que no saben mucho sobre el desarrollo con WebAssembly

    • Se preguntan si WebAssembly actualmente ofrece algo útil para los usuarios finales, o si todo esto más bien está sentando las bases para un futuro de programas verdaderamente portables
    • Han escuchado rumores de que WebAssembly ayuda a restringir el acceso a la red y a los archivos, pero no están seguros de si eso es algo teórico o realmente implementado
  • Pregunta sobre si existe un ecosistema listo para “producción” para álgebra lineal en JavaScript

    • Al buscar en Google suelen encontrar bibliotecas antiguas portadas a JavaScript, pero se preguntan si se están perdiendo de algo
  • 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 un formateador de código fuente para el lenguaje de programación Jovial, para el cual en ese entonces no les quedaba más opción que usar Fortran
  • Mencionan que les parece extraño que no se hable más de LFortran

    • LFortran ofrece excelentes y sorprendentes ejemplos de WASM en línea
  • Aportan información sobre el uso de Fortran en .NET y Java

    • Indican, mediante enlaces relacionados, que Fortran puede usarse en .NET y Java
  • Comparten experiencia compilando TensorFlow para el navegador

    • Expresan agradecimiento porque TensorFlow usaba Eigen, lo que evitó mucho más trabajo al no tener que usar bibliotecas matemáticas populares escritas en Fortran, como BLAS y Lapack