Documentación de LFortran

LFortran es un moderno compilador interactivo de Fortran de código abierto (bajo la licencia BSD) construido sobre LLVM. Este puede ejecutar código de usuario interactivamente para permitir trabajo exploratório (similar a Python, MATLAB o Julia) , así como compilar para generar archivos binarios con el objetivo de ejecutar el código de usuario en arquitecturas modernas, como CPU y GPU de varios núcleos.

Website: https://lfortran.org/

Main repository: https://github.com/lfortran/lfortran

Try online using Binder: Binder

Características destacadas

LFortran está en desarrollo, hay características que funcionan actualmente y hay características que se están implementando. También puede consultar la sección Estado de desarrollo para obtener más información sobre las funciones compatibles y en las que se está trabajando.

Trabajando actualmente

  • Interactivo, compatible con Jupyter LFortran se puede usar desde Jupyter como un kernel de Fortran, lo que permite un flujo de trabajo exploratorio y de creación rápida de prototipos al estilo de Python/Julia (ver [static](https://nbviewer.jupyter.org/gist/certik /f1d28a486510810d824869ab0c491b1c) o interactivo cuaderno de ejemplo). O se puede usar desde la línea de comandos en un indicador interactivo (REPL).

  • Diseño limpio y modular, utilizable como biblioteca LFortran está estructurado en torno a dos módulos independientes, AST y ASR, ambos independientes (completamente independientes del resto de LFortran) y se recomienda a los usuarios que los utilicen de forma independiente para otras aplicaciones y construir herramientas en la parte superior. Consulte los documentos Diseño y Tutorial para desarrolladores para obtener más detalles.

  • Interoperación con GFortran LFortran puede analizar los archivos del módulo GFortran en una ASR y generar un contenedor Fortran que se puede compilar con cualquier compilador Fortran y vincular con el módulo compilado GFortran original.

  • Crear ejecutables Puede crear ejecutables como otros compiladores de Fortran.

  • Se ejecuta en Linux, Mac y Windows Las tres plataformas son probadas regularmente por nuestro CI.

Planificación

Estas características están en desarrollo, hay un enlace al problema correspondiente para que pueda seguir el avance.

  • Interoperación nativa con otros lenguajes (y otros compiladores de Fortran) Esta puede puede llamar automáticamente código escrito en otros lenguajes (tales como C o Python) simplemente usando la instrucción use, ver #44. Comprende otros archivos de módulos de compiladores de Fortran (uno puede simplemente «usarlos») y su ABI para enlazar correctamente (se admite GFortran, se planean otros compiladores, consulte [# 56](https://gitlab.com/lfortran/lfortran/ issues/56)), que permite utilizar LFortran con códigos de producción en la actualidad.

  • Compatibilidad con hardware moderno Gracias a LLVM, el objetivo de LFortran es ejecutarse en hardware moderno y aprovechar las construcciones nativas del lenguaje Fortran (como do concurrent) para ejecutarse en CPU y GPU multinúcleo, consulte # 57.

  • Compatibilidad completa con Fortran 2018 Actualmente solo se implementa un subconjunto de Fortran, pero el objetivo es tener una implementación completa del último estándar de Fortran 2018, consulte [#58](https://gitlab.com/lfortran/lfortran /temas/58).

Vote sobre los problemas en nuestro seguidor de problemas que desea que prioricemos (no dude en crear nuevos si nos falta algo).

Guía

Aquí está nuestra guía sobre cómo implementar todas las funciones planificadas anteriormente:

  1. Generación de código de puerto para usar una ASR y pasar todas las pruebas actuales (#74). Elimine la generación de código anterior y la semántica anterior, que solía anotar el árbol AST, que estaba desordenado.

  2. Obtenga los archivos del módulo GFortran que funcionan con el módulo use, tanto matrices de tamaño supuesto como de forma supuesta (#52). Esto permitirá de inmediato utilizar códigos de producción con LFortran.

  3. Hacer esto al mismo tiempo:

    a) Implementar más funciones de Fortran, hasta que finalmente se admita Fortran 2018 completo (#58).

    b) Muévase gradualmente a C++ para obtener robustez y velocidad (#70). La API de Python no cambiará (o solo mínimamente), por lo que la experiencia del usuario de Python no cambiará.

    c) Implemente todas las demás funciones interesantes: módulo use para C y Python y envoltorios automáticos (#44), soporte de hardware moderno (# 57), generando un estándar anterior de Fortran (#72) , función de prueba de documentos de Fortran (#73), integración de SymPy ([#71](https://gitlab.com/lfortran/lfortran/issues/ 71)), servicio de lenguaje para IDE (#12), y otras ideas ([#29](https://gitlab.com/lfortran /lfortran/issues/29)).

El paso 1. es una restauración interna que no llevará mucho tiempo.

El paso 2 permitirá que LFortran se use de forma interactiva con los códigos de producción de inmediato (el código de producción se compilará con GFortran, luego uno «usa» cualquier módulo en LFortran y las funciones/subrutinas se pueden llamar de forma interactiva, el módulo en sí puede usar cualquier Función compatible con GFortran, pero la API debe encajar en el subconjunto que comprende LFortran — para una gran cantidad de aplicaciones, las funciones/subrutinas simples con argumentos de matriz son suficientes). Esto hará que LFortran sea utilizable para los primeros usuarios y siempre se puede usar GFortran temporalmente hasta que LFortran admita la función dada. Esperamos terminar con el paso 2 a fines del verano de 2019, con suerte antes.

Finalmente, el paso 3 mejorará LFortran en general, permitiendo que los primeros usuarios contribuyan, haciendo crecer la comunidad y haciendo que LFortran sea gradualmente útil para más y más personas.