Saltar al contenido

Aprendiendo FORTRAN en la era moderna

Puede que se de el caso de que halles algún problema en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes subir el código al trabajo final.

Solución:

Tienes que tener una “idea” de lo que los programadores tenían que hacer en el pasado. La gran mayoría del código con el que trabajo es más antiguo que yo y se ejecutaba en máquinas que eran “nuevas” cuando mis padres estaban en la escuela secundaria.

Los FORTRAN-ismos comunes con los que trato, que perjudican la legibilidad son:

  • Bloques comunes
  • Variables implícitas
  • Dos o tres bucles DO con declaraciones CONTINUE compartidas
  • GOTO en lugar de bucles DO
  • Declaraciones aritméticas IF
  • GOTO calculado
  • Equivalencia REAL / INTEGER / otro en algún bloque común

Las estrategias para resolver estos incluyen:

  1. Obtenga Spag / plusFORT, vale la pena el dinero, resuelve muchos de ellos automáticamente y sin errores ™
  2. Muévase a Fortran 90 si es posible, si no, muévase a Fortran 77 de formato libre
  3. Agregue IMPLICIT NONE a cada subrutina y luego corrija todos los errores de compilación, lo que requiere mucho tiempo pero en última instancia es necesario, algunos programas pueden hacer esto automáticamente (o puede escribirlo)
  4. Mover todos los bloques COMUNES a MÓDULOS, fruta madura, vale la pena
  5. Convertir instrucciones aritméticas IF en bloques IF..ELSEIF..ELSE
  6. Convierta GOTO calculados en bloques SELECT CASE
  7. Convierta todos los bucles DO a la sintaxis F90 más nueva

    myloop: do ii = 1, nloops
        ! do something
    enddo myloop
    
  8. Convierta miembros de bloque comunes equivalentes en memoria ASIGNABLE asignada en un módulo o en su true rutinas de personajes si Hollerith se almacena en un REAL

Si tiene preguntas más específicas sobre cómo realizar algunas tareas de legibilidad, puedo darle un consejo. Tengo una base de código de unos pocos cientos de miles de líneas de Fortran que se escribieron en un lapso de 40 años del que soy de alguna manera responsable, por lo que probablemente me he encontrado con cualquier “problema” que pueda haber encontrado.

Jabonera Legacy Fortran

Ayudé a mantener / mejorar una base de código heredada de Fortran durante bastante tiempo y, en su mayor parte, pienso variables de seis letras está en el dinero. Sin embargo, ese consejo tiende a lo técnico; Una fila más difícil de abordar es la implementación de “buenas prácticas”.

  • Establezca un estilo de codificación requerido y pautas de codificación.
  • Requiere una revisión del código (¡de algo más que el codificador!) Para todo lo que se envíe a la base del código. (El control de versiones debe estar vinculado a este proceso).
  • Empiece a crear y ejecutar pruebas unitarias; lo mismo ocurre con las pruebas de referencia o de regresión.

Estos pueden parecer cosas obvias en estos días, pero a riesgo de generalizar demasiado, afirmo que la mayoría de las tiendas de códigos de Fortran tienen una cultura arraigada, algunas comenzaron antes de que existiera el término “ingeniería de software”, y que con el tiempo lo que llega a dominar es “Hágalo ahora”. (Esto no es exclusivo de las tiendas Fortran de ninguna manera).

Abrazando Gotchas

Pero, ¿qué hacer con una vieja base de código heredada que ya existe? Estoy de acuerdo con Joel Spolsky en reescribir, no lo hagas. Sin embargo, en mi opinion variables de seis letras apunta a la excepción permitida: Utilice herramientas de software para realizar la transición a mejores construcciones de Fortran. Muchos pueden ser detectados / corregidos por analizadores de código (FORCHECK) y reescritores de código (plusFORT). Si tiene que hacerlo a mano, asegúrese de tener una razón urgente. (Ojalá tuviera a mano una referencia a la cantidad de errores de software que provienen de la corrección de errores de software, es una lección de humildad. Creo que algunas de esas estadísticas están en Programación experta en C.)

Probablemente la mejor ofensiva para ganar el juego de las trampas de Fortran es tener la mejor defensa: Conocer el idioma bastante bien. Para promover ese fin, recomiendo … ¡libros!

Biblioteca de árboles muertos de Fortran

Solo he tenido un éxito modesto como “fastidioso” a lo largo de los años, pero he descubierto que la educación funciona, a veces sin darme cuenta, y que una de las cosas más influyentes es un libro de referencia que alguien tiene a mano. Me encanta y lo recomiendo

Fortran 90/95 para científicos e ingenieros, por Stephen J. Chapman

El libro es incluso bueno con Fortran 77 en el sentido de que identifica específicamente las construcciones que no deben usarse y ofrece las mejores alternativas. Sin embargo, en realidad es un libro de texto y puede quedarse sin fuerza cuando realmente desea conocer el meollo de Fortran 95, por lo que recomiendo

Fortran 90/95 explicado, por Michael Metcalf y John K. Reid

como su referencia de referencia para Fortran 95. Tenga en cuenta que no es la escritura más lúcida, pero el velo se levantará cuando realmente desee aprovechar al máximo una nueva función de Fortran 95.

Por centrarme en los problemas de pasar de Fortran 77 a Fortran 90, disfruté

Migrando a Fortran 90, por Jim Kerrigan

pero el libro ahora está agotado. (Simplemente no entiendo el uso que hace O’Reilly de Safari, ¿por qué no están disponibles todos sus libros agotados?)

Por último, en cuanto al heredero del maravilloso, maravilloso clásico, Herramientas de software, nomino

FORTRAN clásico, por Michael Kupferschmid

Este libro no solo muestra lo que se puede hacer con “solo” Fortran 77, sino que también habla sobre algunos de los problemas más sutiles que surgen (por ejemplo, si se debe o no se debe usar la declaración EXTERNAL). Este libro no cubre exactamente el mismo espacio que “Herramientas de software”, pero son dos de los tres libros de programación de Fortran que yo etiquetaría como “divertidos” … (aquí está el tercero).

Consejos varios que se aplican a casi cada compilador de Fortran

  • Existe una opción del compilador para imponer el comportamiento IMPLICIT NONE, que puede utilizar para identificar rutinas problemáticas sin modificarlas primero con la declaración IMPLICIT NONE. Este consejo no parecerá significativo hasta después de la primera vez que un build bombardea debido a un comando IMPLÍCITO NINGUNO insertado en una rutina heredada. (¿Qué? ¿Tu revisión de código no captó esto? 😉
  • Hay una opción de compilador para array comprobación de límites, que puede ser útil al depurar el código de Fortran 77.
  • Los compiladores de Fortran 90 deberían poder compilar casi todo el código de Fortran 77 e incluso el código de Fortran más antiguo. Active las opciones de informes en su compilador Fortran 90, ejecute su código heredado a través de él y tendrá un comienzo decente en la verificación de sintaxis. Algunos compiladores comerciales de Fortran 77 son en realidad compiladores de Fortran 90 que se ejecutan en modo Fortran 77, por lo que esta puede ser una opción relativamente trivial para cualquier script de compilación que tenga.

Hay algo en la pregunta original sobre lo que quisiera advertir. Dice que el código está plagado de “mejoras que mejoran el rendimiento”. Dado que los problemas de Fortran son generalmente de naturaleza científica y matemática, no asuma que estos trucos de rendimiento están ahí para mejorar la compilación. Probablemente no se trate del idioma. En Fortran, la solución rara vez se basa en la eficiencia del código en sí, sino en las matemáticas subyacentes para resolver el problema final. Los trucos pueden hacer que la compilación sea más lenta, incluso pueden hacer que la lógica parezca desordenada, pero la intención es hacer que la solución sea más rápida. A menos que sepa exactamente lo que está haciendo y por qué, déjelo en paz.

Incluso la refactorización simple, como cambiar los nombres de variables que parecen tontos, puede ser un gran error. Históricamente, las ecuaciones matemáticas estándar en un campo dado de la ciencia habrán utilizado una abreviatura particular desde los días de Maxwell. Entonces para ver un array llamado B (:) en electromagnetismo le dice a todos los ingenieros de Emag exactamente lo que se está resolviendo. Cambie eso a su propio riesgo. Moraleja, conozca la nomenclatura estándar de la ciencia antes de cambiar el nombre también.

Comentarios y calificaciones del tutorial

Si te ha resultado provechoso este artículo, sería de mucha ayuda si lo compartieras con más entusiastas de la programación de este modo nos ayudas a extender esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología