2011-04-04 11 views

Respuesta

2

Fortran tiene algunas propiedades que permiten a los programas más rápidos. Los punteros Esp evitan que el compilador optimice el código (y las matrices se pasan como punteros en C, y las matrices son LA estructura de datos en HPC). El problema aquí es que dos punteros pueden alias, en fortán esto no puede suceder. En el nuevo C99 este problema se reduce, cuando está bien escrito, como sugiere el compilador con restrict, ese alias no puede suceder.

Pero como hay mucho código FORTRAN de edad en las empresas Fortran nunca va a conseguir obsoleta en un futuro próximo.

+6

Me resulta divertido cada vez que un estándar de 12 años se llama nuevo. –

+0

¿entonces diría que fortran es aún más rápido? – James

+1

No es tanto acerca de que fortran vs C sea más rápido, se trata de que el código ya escrito sea más rápido. Se requerirá un esfuerzo considerable para que la gente reescriba su código fortran finamente ajustado en C. – nos

2

Fortran no va a desaparecer pronto. Hay demasiado código Fortran: rutinas rápidas, confiables y bien probadas para hacer todo tipo de cosas, y programas que pueden estar menos bien diseñados pero que funcionan y serían difíciles de reescribir en C.

Además, Fortran como un lenguaje diseñado en torno a la computación de alto rendimiento, y no tiene barreras para la optimización, y los compiladores de Fortran generalmente están diseñados para la informática de alto rendimiento.

+0

No creo que la pregunta sea sobre la reescritura del código Fortran existente en C. La pregunta que veo es, ¿qué beneficios potenciales de rendimiento ofrece el último estándar Fortran sobre el último estándar C, para el nuevo código? –

+0

Sí exactamente a Matthew – James

+1

Las bibliotecas disponibles son una razón muy válida para elegir un idioma sobre otro, de hecho, suelen tener en cuenta la decisión más que el rendimiento en bruto. Cuando es probable que las bibliotecas sean las de mejor rendimiento, tiene una situación en la que todos ganan. –

1

Dos palabras. Código heredado Todavía habrá abundancia de Fortran en 20 años, así como habrá mucho COBOL. Y mi corazón está con aquellos que tienen que mantenerlo.

2

Fortran 90/95/2003/2008 son lenguajes de alto nivel que C. le escogería C de programación integrado o dispositivo, y Fortran moderna para la programación científica.

11

Argh! No, no, no. Y en las noticias relacionadas, Fortran crece algo de OOP/materia polimórfica que no deja obsoleto a C++, Erlang no vuelve superfluo a Haskell, Python no ha matado a bash scripting, PHP no obvia la necesidad de javascript, y misteriosamente, nada ha matado fuera de Java, etc., etc., hay un bazillion de lenguajes de programación por un motivo: hay un conjunto de programadores que los encuentran como buenas herramientas para trabajos específicos. No es necesario que te agraden para que eso sea cierto.

C es, fundamentalmente, un lenguaje de programación de sistemas. Es terriblemente doloroso escribir algo así como cosas de ciencia computacional en él. C++ es mejor porque es más rico, pero sufre críticamente por el hecho de que no tiene matrices multidimensionales como un tipo de primera clase (no, simplemente no, ¿vale?), Y toda la informática técnica se basa críticamente en matrices multidimensionales . La falta de un único paquete de matriz multidimensional estándar para C/C++ hace que sea muy difícil escribir bibliotecas optimizadas para ese idioma, y ​​una vez que se compromete con un paquete, debe usar sus estructuras de datos en todo momento. Python sufre del mismo problema, y ​​lo hará hasta que Numpy se convierta en parte del núcleo de Python.

Fortran, por todos sus defectos, es el único lenguaje diseñado específicamente para la programación científica. Permite operadores y arreglos de arreglos tipo python o matlab, y eso puede facilitar la vida de los programadores científicos. Incluso entonces, a muchos programadores científicos no les gusta fortran; ellos prefieren los juegos de herramientas o las bibliotecas disponibles en otros idiomas. Y eso está bien.

Y para defenderse de su próxima pregunta, no, tampoco tenemos que estar de acuerdo con los editores.

+0

"[C++] sufre críticamente por el hecho de que no tiene matrices multidimensionales como un tipo de primera clase". Lo último es cierto, pero ¿cuáles son las consecuencias? Tampoco es 'std :: complex <>' (también un tipo de biblioteca), y nadie se queja de eso tampoco. – MSalters

+2

@MSalters: El problema es que en un proyecto no trivial en el que desee utilizar un puñado de bibliotecas de terceros, tendrá que lidiar con un puñado de clases de matrices multidimensionales mutuamente incompatibles y mezclar datos entre ellas de alguna manera . std :: complex, OTOH, está en la biblioteca estándar, por lo que World + Dog no reinventa todo el tiempo. Por otra parte, si necesita, por ejemplo, matrices dispersas, Fortran no lo ayuda, y tiene el mismo problema; en ese caso, C++ podría ser una mejor opción debido a las plantillas y la sobrecarga del operador que hacen que las clases de matriz definidas por el usuario sean más fáciles que Fortran – janneb

+0

... y ahora fortran tiene sobrecarga de operadores y tipos parametrizados (no plantillas, pero el principal uso de ellas sería para diferentes tipos de reales) por lo que puede hacer esto también. Pero sí, estoy de acuerdo en que las cosas dispersas son más difíciles y ves lo mismo (por ejemplo, Petsc). La ausencia de matriciales incluso densas en C/C++ también surge en otras cosas: en casi todas las preguntas MPI para C on SO que tratan arreglos multidimensionales, parte de la respuesta siempre se reduce a mostrarle al programador C cómo crear contigua matrices multidireccionales Eso debería ser algo que tu lenguaje de programación hace por ti. –

Cuestiones relacionadas