Je suis d'accord avec vous : utiliser le COMMON aujourd'hui dans un code est une honte. C'est un vieil héritage qui n'a rien à faire dans le language aujourd'hui. Il est seulement là pour garder la compatibilité avec les vieilles versions du language. Il y a aussi le GOTO calculé qui est toujours présent et qui est aussi une honte aujourd'hui.
C'est pourquoi, il ne faut surtout pas apprendre le Fortran sur les sites internet ou en lisant du code produit par une personne qui code comme un cochon (l'essentiel des codes en Fortran malheureusement) mais plutôt par un bon bouquin comme http://www.amazon.com/Explained-Numerical-Mathematics-Scientific-Computation/dp/0199601429/ref=sr_1_1?ie=UTF8&qid=1330902466&sr=8-1 . Vous avez tout à fait raison de dire que ce sont des langages. Je dirai qu'il y a le Fortran 77 (et ses horreurs) et le Fortran tel qu'il est pensé depuis la version 90 et qui est devenu ensuite le Fortran 2003 (ajout des objets) puis Fortran 2008 (Ajout des coarray). C'est un fabuleux language pour le calcul scientifique. Pour éviter la confusion, certaines personnes utilisent le mot "Modern Fortran" pour le Fortran >= 90.
Pour revenir au problème de l'aliasing, ce qui est important est que le compilateur sache lorsqu'il n'y en a pas pour pouvoir optimiser le code. En Fortran, le compilateur a beaucoup plus d'informations qu'en C car :
- Les pointeurs sont très rarement utilisés
- L'arithmétique des pointeurs n'existe pas
- Un pointeur ne peut pas pointer vers n'importe quelle variable. Pour qu'un pointeur pointe vers l'adresse mémoire occupée par la variable x, il faut que x soit déclarée comme target. Cela limite drastiquement les cibles d'un pointeur et le compilateur peut optimiser le code en sachant que le pointeur ne peut pas pointer vers certaines cases mémoires.
Je n'ai plus le lien ici, mais lorsque j'ai fais le choix du Fortran pour mon projet, j'ai comparé le C++ et le Fortran et j'ai été amené à poser quelques questions sur les forums des compilateurs Intel. Je donnais des exemples qui étaient optimisés par le compilateur Fortran mais qui ne l'était pas par le compilateur C++. Un développeur d'Intel m'avait d'ailleurs dit qu'on ne pouvait pas espérer le même niveau d'optimisation qu'en Fortran en C/C++ sans donner des directives aux compilateurs assez complexes.
PS: Désolé pour le COMMON. Je comprends qu'on en fasse des cauchemards. Je souhaite juste faire partager le fait que le Fortran moderne est un excellent language et qu'il est malheureusement injustement dénigré car beaucoup pensent que le Fortran est bloqué au Fortran 77, ce qui est très loin d'être le cas.
[^] # Re: Surprenant que le Fortran ne soit pas mentionné
Posté par magnolia . En réponse à la dépêche Version 1.0 de Julia. Évalué à 5.
Je suis d'accord avec vous : utiliser le COMMON aujourd'hui dans un code est une honte. C'est un vieil héritage qui n'a rien à faire dans le language aujourd'hui. Il est seulement là pour garder la compatibilité avec les vieilles versions du language. Il y a aussi le GOTO calculé qui est toujours présent et qui est aussi une honte aujourd'hui.
C'est pourquoi, il ne faut surtout pas apprendre le Fortran sur les sites internet ou en lisant du code produit par une personne qui code comme un cochon (l'essentiel des codes en Fortran malheureusement) mais plutôt par un bon bouquin comme http://www.amazon.com/Explained-Numerical-Mathematics-Scientific-Computation/dp/0199601429/ref=sr_1_1?ie=UTF8&qid=1330902466&sr=8-1 . Vous avez tout à fait raison de dire que ce sont des langages. Je dirai qu'il y a le Fortran 77 (et ses horreurs) et le Fortran tel qu'il est pensé depuis la version 90 et qui est devenu ensuite le Fortran 2003 (ajout des objets) puis Fortran 2008 (Ajout des coarray). C'est un fabuleux language pour le calcul scientifique. Pour éviter la confusion, certaines personnes utilisent le mot "Modern Fortran" pour le Fortran >= 90.
Pour revenir au problème de l'aliasing, ce qui est important est que le compilateur sache lorsqu'il n'y en a pas pour pouvoir optimiser le code. En Fortran, le compilateur a beaucoup plus d'informations qu'en C car :
- Les pointeurs sont très rarement utilisés
- L'arithmétique des pointeurs n'existe pas
- Un pointeur ne peut pas pointer vers n'importe quelle variable. Pour qu'un pointeur pointe vers l'adresse mémoire occupée par la variable x, il faut que x soit déclarée comme target. Cela limite drastiquement les cibles d'un pointeur et le compilateur peut optimiser le code en sachant que le pointeur ne peut pas pointer vers certaines cases mémoires.
Je n'ai plus le lien ici, mais lorsque j'ai fais le choix du Fortran pour mon projet, j'ai comparé le C++ et le Fortran et j'ai été amené à poser quelques questions sur les forums des compilateurs Intel. Je donnais des exemples qui étaient optimisés par le compilateur Fortran mais qui ne l'était pas par le compilateur C++. Un développeur d'Intel m'avait d'ailleurs dit qu'on ne pouvait pas espérer le même niveau d'optimisation qu'en Fortran en C/C++ sans donner des directives aux compilateurs assez complexes.
PS: Désolé pour le COMMON. Je comprends qu'on en fasse des cauchemards. Je souhaite juste faire partager le fait que le Fortran moderne est un excellent language et qu'il est malheureusement injustement dénigré car beaucoup pensent que le Fortran est bloqué au Fortran 77, ce qui est très loin d'être le cas.