2010-08-23 17 views
12

He estado trabajando mucho con FORTRAN 77 últimamente, y aunque tuve reservas al principio, ahora veo algunas grandes cualidades del lenguaje. Es:Lenguaje moderno con las ventajas de FORTRAN?

  • fácil de aprender (no hay complicaciones programación funcional orientada a objetos o)
  • de fácil lectura
  • Blazing rápido en cálculos numéricos

Esas cualidades son naturalmente atractivo para ingenieros y científicos no programadores que solo quieren una forma de hacer que una computadora responda rápidamente. Pero tiene muchas limitaciones basadas en su edad y algunas de sus suposiciones básicas. Soy escéptico sobre cuán fácilmente los no programadores pueden entender algunas de las capacidades adicionales de versiones posteriores de Fortran, también.

¿Existe un lenguaje moderno que sea tan sencillo como FORTRAN, igual de rápido para las aplicaciones matemáticas y menos limitado? O es la respuesta Fortran 90, 95, 2003. . . ?

+1

No me cites sobre esto, pero creo que el público objetivo de F # incluye ingenieros/científicos. – ChaosPandion

+1

El Dr. Seuss es simple, pero una vez que comienzas a leer textos más grandes puedes encontrar un estilo diferente más apropiado.Romeo y Julieta, escritos al estilo del Dr. Seuss, no serían legibles, ni tampoco una gran base de código complicada. Por otro lado, ahora estoy considerando volver a escribir Romeo y Julieta, tal vez estoy equivocado sobre eso ... –

+0

Puede tener un punto, @ S.Lott; Preséntelo como respuesta, y al menos obtendrá votos. – JasonFruit

Respuesta

17

O es la respuesta de Fortran 90, 95, 2003 . . . ?

Sí. Fortran 95 compatible con la mayoría de los compiladores es el idioma que está buscando. Sin embargo, Fortran 2003 tiene algunas mejoras importantes (además de la compatibilidad innecesaria desde su punto de vista con el OOP) que podrían ser útiles. Compiler Support for the Fortran 2003 Standard.

+0

Creo que gfortran e Intel "corrigieron" algunas cosas de esa lista en sus versiones más nuevas. – Rook

4

Puede estar buscando en MATLAB. Muchos estudiantes de ingeniería aprenden eso, así que creo que es fácil para los no programadores asimilar.

Si quieres ser hardcore, échale un vistazo a J.

+5

J es una sugerencia horrible. Uno de sus criterios fue "fácil de leer". No puedo pensar en un lenguaje que sea más difícil de leer. – Turtle

+2

@Turtle: Tienes razón. Dije eso a medias. También estoy sorprendido de que se haya votado tres veces: P – kizzx2

+0

Matlab es realmente una buena opción para estudiantes universitarios y muchos más; tiene muchas características bonitas, y sus capacidades gráficas son, bueno, prácticas por decir lo menos, en varias situaciones. Pero, al igual que todos los "profesionales" tienen una "estafa", adolece de algunos problemas históricos de desarrollo. Para mí, cuando estaba (todavía lo hago para algunas cosas) usándolo era la organización de programas más grandes, a veces documentación incorrecta (incorrecta en algunos asuntos) e incompatibilidad hacia atrás (combinada con el hecho de que era un/un lenguaje de compañía/-> miedo) – Rook

1

Si está realmente entusiasmado con el uso de Fortran, puede considerar usar Fortran for Microsoft.NET. La idea detrás de este proyecto es que le permite usar el lenguaje de Fortran mientras aprovecha un entorno de código de manga mediante Common Language Runtime (CLR).

+4

Mybe es una pregunta estúpida, pero ¿cómo ayuda CLR a los científicos no programadores? –

+2

Supongo, pero la recolección de basura sería bastante útil. – Turtle

+1

@klez Bueno, si alguna vez trabajaste en una biblioteca restringida probablemente lo sabrías. El tiempo de ejecución de CLR y Java tiene soporte para miles de operaciones que los viejos compiladores de Fortran no podían soñar. La creación de GUI cuando sea necesario, gráficos fáciles, matemática de precisión arbitraria y capacidades de recopilación de datos en el mundo real beneficiarían en gran medida a un atador no programador para desarrollar software para resolver un problema de "ciencia" del mundo real. –

0

@ S. Lott: No se puede imaginar a los usuarios, tales como Fortran científicos, tener que cambiar una y volcar todo su trabajo Fortran .....: S El PO está buscando información sobre lo que es nuevo ...

Para el OP: ¿Ha leído en Wikipedia que detalla los cambios realizados en Fortran, para la versión 2003, permite la interoperabilidad con C, por lo que quizás S.Lott tenga un punto, quizás, poco a poco, porte suavemente algunas cosas o escribe una envoltura en C para llamar a los módulos Fortran? Citaré desde esa página de Wikipedia ...

Interoperabilidad con el lenguaje de programación C.

+5

El Fortran moderno es mucho mejor que C. Por lo tanto, el consejo de transferir un código a C es malo, por decir lo menos. – Wildcat

+1

Sí, he leído sobre las actualizaciones desde 1990, y soy escéptico acerca de su idoneidad para los no programadores: ¿orientación al objeto? recursión? punteros? – JasonFruit

+0

"No puedo imaginar a los usuarios de Fortran, como los científicos, teniendo que cambiar y descargar todo su trabajo de Fortran". La pregunta es una búsqueda de un lenguaje de programación. Entonces, ¿qué punto estás haciendo? ¿Que cambiar los lenguajes de programación es malo? ¿Imposible? Inimaginable por ti? –

-2

Supongo que está considerando programas pequeños y dedicados escritos para resolver problemas específicos. En ese caso, si la complejidad de OO realmente te molestara, escribiría una aplicación C# o Java y no usaría OO. Visual Basic también debería ser bastante rápido en estos días. Casi todos los idiomas compilados serán matemáticamente rápidos estos días, todas las operaciones se realizan en el coprocesador matemático, así que a menos que haya encontrado algún idioma que no tenga, no dejaría que ningún lenguaje "velocidad matemática" moleste Yo mucho.

+2

"Casi todos los idiomas compilados serán matemáticamente rápidos en estos días, ..." - apenas. Incluso los programas simples (modelos) pueden volverse muy lentos muy rápidamente cuando se trata de aplicaciones comerciales (donde las cuadrículas deben refinarse de una manera que no muestre solo las tendencias, sino que brinde resultados prácticos). – Rook

+0

@Idigas ¿no es la implementación del programa más que el lenguaje? Estoy bastante seguro de que si revisas el "tiroteo en el lenguaje de programación", encontrarás que C & java es aproximadamente 2-5 veces más rápido que Fortran incluso para cosas pesadas de matemáticas como el punto de referencia de Mandelbrot. Eso no está mal, todos están en la misma área general (10x de velocidad entre ellos, mientras que Ruby y otros tienden a ser 100 veces más lentos). –

+0

"Disparos en el lenguaje de programación", que se ha debatido varias veces antes (solo en google, seguramente tropezarás con uno de ellos). No es un criterio objetivo para la velocidad, ya que obviamente se ajusta más que otros. Quieres un ejemplo opuesto; escribe un solucionador de sistema de chispa en la mayoría de esos (o casi cualquier cosa similar). – Rook

-1

fácil de aprender (sin complicaciones funcionales de programación orientado a objetos o)

Fácil de leer

Blazing rápido en cálculos numéricos

Suena como C.

Compre Recetas Numéricas en C. Eso cubre prácticamente todas las bases en un estilo claro y legible.

http://www.amazon.com/Numerical-Recipes-Art-Scientific-Computing/dp/0521431085

+7

C no es fácil de aprender ni fácil de leer. Y no es para el crujido de números. http://latticeqcd.blogspot.com/2006/11/why-we-use-fortran-and-python.html – Wildcat

+0

@kemiisto: tómenlo con los autores y lectores de Recetas Numéricas. Yo no. Parecen felices, incluso si Georg von Hippel no está contento. –

+6

Cuando comparo la facilidad con la que recogí FORTRAN 77 con las dificultades que tuve con C, me es difícil recomendar C para el que no es programador. Aún así, +1, ya que esto parece ser lo que mucha gente está haciendo, correcta o incorrectamente. – JasonFruit

10

Bueno, yo soy un ingeniero programador no (lo que significa; tengo entendido que significa no tener mucho contacto con los estudios de ciencias informáticas) y ...

partically como continuación al comentario de JasonFruit en S . la respuesta de Lott:

Sí, la norma ha añadido bastantes características de F90 a 2003. sin embargo, el "problema", si se puede llamar así (no se me ocurre o cuidar a una palabra más apropiada) es que muchas personas que usan Fortran no lo saben, guardan las características básicas que necesitan. Es una bendición y una maldición, todo en uno, en cierto modo. Nunca lo aprendieron, nunca leyeron un libro, simplemente lo recogieron a medida que avanzaban. De esa manera ciertamente puede funcionar por un tiempo (si estructura sus programas simplemente, como muchos lo han hecho durante siglos, y tienen una especie de disciplina mental, este enfoque puede durar toda la vida/toda su carrera), pero después de un tiempo comienza para mostrar sus disconformidades. Pruebe, por ejemplo, seguir algunas de las discusiones sobre las características recientes en comp.lang.fortran para poner a prueba su conocimiento.

Por lo tanto, tome un buen libro (muchos recomiendan uno de los tres para principiantes: a) Chapman J. Stephen b) Maine, o c) Metcalf, Reid y Cohen (conocido como el "libro MRC") - después muchas de las características "más oscuras" no solo se vuelven más claras, sino también "obvias" (de alguna manera; esta es realmente la mejor manera, ¿por qué lo hice así ... antes?).

Eso se ocupa de esa cuestión. Ahora, la otra pregunta, que seguramente surgirá, ¿Fortran vale la pena aprender hoy en día? (siempre lo hace, créeme en esto :). Esto se ha cubierto en numerosas ocasiones, por lo que solo dirigiré a my own post con respecto a lo anterior, y my older post (tendrá que desplazarse un poco hacia abajo) que considera algunos problemas en comparación con algunos de los otros languges mencionados aquí.

Lo último, que de alguna manera es la causa de todas estas preguntas en la mayoría de los casos, es la opinión de las personas sobre Fortran, ¡con énfasis en la opinión! En términos generales (y podemos tomar este foro como una muestra bastante buena para nuestro análisis) es que no es tan bueno. A pocos les gusta [siga las preguntas marcadas en este foro durante un mes, y rápidamente sabrá quiénes son.Por cierto, a juzgar por la frecuencia con la que aparece tu nombre, te estás convirtiendo rápidamente en miembro del club :)], la mayoría son indiferentes y otros lo odian, por pura ignorancia (a menudo se usa la comparación de F66 con los idiomas de hoy), algunos por sus propios motivos. Ahora, si tomamos eso y lo comparamos con la población general, por simple cuenta, el resultado saldrá mal. Si entrevistara solo a ingenieros tradicionales, los resultados serían bastante diferentes.

Thhhh-aaa-ttt's it.

Oh, una cosa más - Fortran es/was y todavía permanece principalmente dirigido a ingenieros, no a matemáticos. Es más adecuado para resolver sistemas grandes, luego calcula pi a un decimal ka-zi-llionth. No sé si fue un error en su pregunta, o intencional. Para aplicaciones puramente matemáticas (en un sentido clásico de matemático), yo (si fuera parte de ese campo) probablemente elegiría, no sé, Mathematica. O Pascal (no sé por qué siempre fue Pascal, pero parece tremendamente popular entre esos tipos).

+0

Buen punto; cuando dije "aplicaciones matemáticas", debería haber escrito "aplicaciones computacionalmente intensivas". – JasonFruit

+4

¿No es eso lo bueno de Fotran? No tiene que pasar todo su tiempo en comp.lang.xx estudiando los últimos detalles de la especialización de plantillas parciales a través de funtores no virtuales de lamba, ¡para poder hacer el trabajo que realmente le pagan! –

6

Para la respuesta más directa a su pregunta, creo que la respuesta de kemiisto es correcta, con las advertencias identificadas por Idigas.

Dicho esto, he descubierto que más de mi código numérico entra en contacto con cosas como FTP, web y más cerca de los gráficos. He visto a MATLAB sugerir en otra respuesta, pero he estado escribiendo más y más Python (con NumPy) y llamando a Fortran cuando necesito la velocidad. Es casi seguro que no escribiría todo un sistema (por ejemplo, un modelo numérico completo de predicción del tiempo) de esta manera, pero sí me permite tener lo mejor de ambos mundos en muchos aspectos.

5

O es la respuesta Fortran 90, 95, 2003. . . ? Sí. Para la informática científica, Fortran> = 90 elimina las limitaciones de FORTRAN 77. Aprenda a usar matrices asignables para tener matrices dinámicamente dimensionables. Aprenda a usar los módulos para organizar sus procedimientos y variables, y proporcione fácilmente la verificación de coherencia automática entre argumentos reales y ficticios. A partir de FORTRAN 77, puede aprender gradualmente Fortran 90/95/2003, utilizando las funciones que le parezcan útiles. No tiene que aprender las características de OO y puede ignorar esa parte del idioma, hasta que algún día le ofrezca utilidad.

Recomiendo el libro de Metcalf, Reid and Cohen.

2

Creo que Fortran 95 debe ser su elección, se ve más moderna y se extiende Fortran 77 de manera significativa. El estándar Fortran 2003 no es completamente compatible con la mayoría de los compiladores. La gran ventaja de Fortran es que hay una subrutina optimizada para cada problema matemático (como el descubrimiento de raíz, la multiplicación de matrices, los problemas de autovalores, etc.). Otras personas mencionaron bibliotecas heredadas y lapack es solo un ejemplo muy poderoso. Una gran desventaja de Fortran es que nadie lo usa en el mundo real.

El mejor libro es mi opinión "Fortran 90/95 para científicos e ingenieros".

Por supuesto, todas las demás sugerencias son válidas, pero matlab no es gratuito mientras que Fortran sí lo es.

Python es gratuito y tiene soporte para muchas aplicaciones científicas a través de paquetes adicionales como Numpy y Scipy. Python es, sin embargo, bastante lento en lo que respecta al rendimiento numérico. Probablemente sea una buena opción para proyectos pequeños que no requieren mucha potencia computacional. La sintaxis es muy fácil de entender.

C es, por supuesto, también una opción gratuita y tiene muchas bibliotecas científicas (actualizadas constantemente) disponibles. Sin embargo, cuando se trata de legibilidad, no puede vencer a Fortran. Fortran está bien configurado para trabajar con vectores y matrices.

C++ es un superconjunto de C por lo que definitivamente también es una opción posible. Sin embargo, es un lenguaje que puede ser complejo para los problemas que estás viendo. La cantidad de bibliotecas científicas de C++ es bastante limitada. Hay algunos alrededor, pero no pueden vencer a las versiones de Fortran (o son solo envoltorios de esos). Probablemente sea una muy buena opción para proyectos muy grandes, pero algunos programas muy grandes que se ejecutan en las computadoras más rápidas del mundo están escritos en Fortran. C++ definitivamente vale la pena aprender, ya que se utiliza para una gran cantidad de aplicaciones del mundo real.

Por supuesto, hay otros idiomas o herramientas, pero creo que estos son los más utilizados en todas las disciplinas científicas.

10

Estoy sorprendido de que el consenso aquí sea para el Fortran moderno, y estoy de acuerdo de mala gana.

Cualesquiera que sean sus fallas, Fortran es el único lenguaje diseñado explícitamente para la programación científica. La programación científica es a la vez más sutil (por línea) y menos complicada (en estructura) que, por ejemplo, un servidor web, y solo necesita herramientas diferentes. La recolección de basura, por ejemplo, casi nunca es útil para resolver grandes PDEs 2d/3d donde se arreglan las estructuras de datos principales.

Cualquier lenguaje de programación que ni siquiera tenga matrices multi-d como objetos de primera clase puede descartarse inmediatamente para la programación científica. y eso es todos los lenguajes basados ​​en C. Cualquier lenguaje de programación que sea intrínsecamente espantosamente lento, Java, te estoy mirando, puede descartarse inmediatamente. Cualquier lenguaje de programación que sea propietario y requiera miles de dólares en honorarios de licencia - Matlab - puede ser descartado inmediatamente.

Python y los idiomas relacionados son buenos para la creación de prototipos, y el trazado es fácil, y una vez que tenga las cosas en funcionamiento puede escribir los núcleos numéricos en lenguajes compilados para mayor velocidad; pero nuevamente sufre de la falta de matrices reales (Numpy es bueno, pero no excelente) y es s..l..o ... w.

Por cierto - no siempre por los libros de Recetas Numéricas. Son basura, los algoritmos que lanzan son de fecha, y el código varía de pobre a incorrecto. Tome un curso real de algoritmos numéricos - hay buenos en línea - o compre un libro de algoritmos numéricos reales - y por amor a Dios, no escriba el código de un libro para hacer álgebra lineal o lo que sea; utiliza los trillones de bibliotecas de calidad real y profesional que existen.

0

He trabajado recientemente con una gran cantidad de Matlab, y hoy puedo ver sus beneficios. Sí, es lento porque es un lenguaje interpretado, pero sus algoritmos de matriz son rápidos. Y me gusta exactamente debido a ese comportamiento. La lentitud de los bucles for y el rendimiento de las operaciones de la matriz lo alientan a pensar de una manera más matemática en lugar de atenerse a la programación orientada a bucles. Pero puedo aceptar que Matlab puede ser descartado porque no está abierto.

Actualmente estoy deseando que llegue el idioma Julia. Está fuertemente inspirado por Matlab, excepto que no quiere ser rápido. También tiene tipos estáticos, lo que también es una gran ventaja. Pero Julia todavía es muy joven, así que no esperes que ya cumpla con todos tus requisitos.

Cuestiones relacionadas