Articles : Décès du père du Fortran et de la notation BNF
Posté par Sytoka Modon (page perso, ). Modéré le 23 mars 2007.
John Backus est décédé samedi 17 mars à l'âge de 82 ans. Pionnier de l'informatique, il a forgé les bases de l'informatique dans les années 50-60 au travers de quelques travaux que nous avons tous plus ou moins utilisé :
NdM : les compilateurs libres gfortran et Free Pascal sont disponibles, pas encore Algol dans la GNU_Compiler_Collection ?
- Le Fortran développé entre 1954 et 1957 par lui et son équipe au sein d'IBM. Le Fortran, que l'on aime ou que l'on aime pas, a su par la suite évoluer et sa dernière mouture est toujours très utilisée en calcul intensif.
- La notation BNF (Backus-Naur Form) en 1959 permet de décrire la grammaire d'un langage de programmation indépendamment de ce langage. Cette notation est toujours très utilisée de nos jours. A l'origine, John Backus l'a introduite pour définir l'Algol.
- Il est en effet l'un des membres actif du comité international de l'Algol 58, puis de l'Algol 60 . Ce langage a rapidement été utilisé dans les années 60 par les universitaires pour décrire des algorithmes. Il a, par exemple, été le premier à utiliser la paire : "begin end" pour délimiter les blocs. Aujourd'hui au musée des langages, il a fortement marqué ses successeurs, dont le Pascal.
NdM : les compilateurs libres gfortran et Free Pascal sont disponibles, pas encore Algol dans la GNU_Compiler_Collection ?
John Backus sur Wikipedia (623 hits)
L'annonce de presse du Monde Informatique (240 hits)
Le Fortran (321 hits)
La notation BNF (345 hits)
L'Algol (217 hits)
Le Pascal (173 hits)
> Lire la dépêche (43 commentaires, moyenne: 3,7).
Vous avez demandé le commentaire #824248.




Le Fortran
Le Fortran, que l'on aime ou que l'on aime pas, a su par la suite évoluer et sa dernière mouture est toujours très utilisée en calcul intensif.
J'utilise du fortran 77 tous les jours. Même si on peste des fois, ce langage est très facile à apprendre.
Adieu John...
«La faculté de citer est un substitut commode à l'intelligence» — Sommerset Maugham
[^]Re: Le Fortran
Et puis c'est quand même un des rares langages ou les espaces ne sont pas significatifs, ce qui fait donc que:
DO I=1.42 est une assignation à la variable "DOI"
alors que
DOI=1,42 est une boucle sur I
c'est pas génial ça ?
Au fait, y'a des affreux qui veulent faire mourrir le fortran:
http://www.fortranstatement.com/cgi-bin/petition.pl
[^]Re: Le Fortran
J'ai utilisé le Fortran en 1970, On remplissait des feuilles en écrivant des caractères en majuscules dans des cases, des "perforatrices IBM" (cétait un métier) perforaient les cartes, on les donnait le soir au centre informatique et on les retrouvait le lendemain posées sur le listing plus ou mois épais : c'était le résultat ou le core dump de la machine en hexadécimal.
Je n'arrive plus à relire ce fortan qui est de la programmation spaghetti et qui a forgé la légende du fortran.
J'ai ensuite utilisé le fortran 4x puis 77 de 1979 à 2002.Il est devenu un langage fort pratique, très commode pour gérer les chaines de caractères et surtout, il a inclus l'instruction : "implicit none".
Je me suis aperçu que l'on gagnait toujours du temps avec "implicit none" dès que l'on avait un programme de plus de 100 lignes. Les types implicites du Fortran basés sur le premier caractère de la variable : [i..n]=integer, [c]=complex, [d]=double précision ont conduit à la perte d'une sonde spatiale à cause de ceci :
DO 100 I=1,1000
......
100 CONTINUE
Ce qui signifie, faire 1000 fois la boucle jusqu'à l'étiquette 100.
Il se trouve que la virgule avait été remplacée par un point et le compilateur a compris :
DO100I=1.1000
Il a créé la variable double précision do100i et lui a attribué la valeur 1.1
Après cette affaire la NASA a interdit les déclarations implicites et a lancé un concours qui a abouti à ADA.
[^]Re: Le Fortran
On est tous bien d'accord, c'est bien loin des langages plus haut niveau et plus beaux que l'on peut manipuler de nos jours, c'était le bon vieux temps mais aujourd'hui on peut se reposer sur une syntaxe plus claire et des paradigmes intéressants (OCaml, Ruby, y'a plein de beaux langages sympatiques de nos jours...).
Pour moi John, il a fait un truc bien, c'est la notation BNF, après le Fortran, vite vite tournons la page :-p
[^]Re: Le Fortran
> mais aujourd'hui on peut se reposer sur une syntaxe plus claire et
> des paradigmes intéressants
Tu as lu du Fortran 95 ? Si tu sais lire de l'Ada ou du Pascal, le Fortran est quasiment pareil. Pas d'accolade {} ni de parenthèses () à tour de bras, des beaux "begin ... end".
Ensuite, j'aime beaucoup les langages de scripts mais on ne peut pas comparer le Fortran avec le Ruby. Cela n'a rien à voir. En Fortran, tout a été fait pour programmer en adressage statique, tous les passages de paramêtres se font par adresse, les fonctions ne sont pas récursive par défauts. Ce n'est pas pour se faire plaisir, c'est une question de performance et de parallèlisme.
OCaml est très bien mais un non informaticien arrive-t-il a programmer dans ce langage ? Et quelles sont les performances dOCaml dans le calcul parallèle ?
Fortran est un langage spécialisé dans le calcul scientifique. Si il était si mauvais que cela, il aurait été remplacé depuis longtemps. Or c'est un des rares langages de la préhistoire qui soit encore là et qui a su évoluer en profondeur.
J'ai été il y a quelques temps à un séminaire sur la performance, notament sur la problématique de la machine pétaflop que les constructeurs envisagent pour peu.
Tu fait un programme et tu le fait tourner sur 10 coeurs et tu regarde sa performance par rapport à un coeur. Tu fait de même avec 100 ou 1000 coeurs. D'après le conférencier (et mes souvenirs), les programmes utilisant OpenMP tiennent bien entre 10 et 100 coeurs. Entre 100 et 1000 coeurs, les programmes qui tiennent la charge utilisent généralement MPI. Très peu de programme dépasse les 1000 coeurs sans s'effrondrer. Or il est envisagé bien plus de 1000 coeurs pour une machine pétaflop.
Les constructeurs travaillent énormément pour arriver à faire une machine pétaflop mais, pour qu'une application puisse tirer le maximum d'une telle machine, il faut d'après changer notre manière de coder.
Si tu regardes du coté de Fortran 2008, il y a justement cette problèmatique du calcul matriciel parallèle au coeur des extensions.
Je veux bien, Ruby s'est très bien mais c'est pas avec Ruby que tu calcule la météo du lendemain, ni que tu fait une prédiction pour les 50 ans qui viennent du réchauffement climatique, ou que tu calcule la propagation des ondes sismiques dans un bassin aluvionnaire entouré de montages (cas intéressant car il y a des phénoménes d'amplification du à la géométrie et à la composition des sols).
Bref, il est idiot de vouloir programmer un site web dynamique en Fortran. De même, ne demandons pas aux langages de script de faire tourner un calcul sur une machine Itanium à 4096 coeur.
Je trouve qu'il y a de plus en plus d'offre de compilateur Fortran 90 (95) sur le marché. Ma prédiction est que vu les problèmes écologiques à venir, le Fortran n'est pas près de prendre sa retraite.
[^]Re: Le Fortran
monsieur Sytoka Modon, Merci.
il est sain de rappeler que Fortran ne disparaît _pas_ et qu'il n'existe PAS qu'une seule informatique.
[^]Re: Le Fortran
> Fortran est un langage spécialisé dans le calcul scientifique. Si il était si mauvais que cela, il aurait été remplacé depuis longtemps.
Mouais mouais un peu comme windows, ou Matlab pour rester dans le domaine du calcul scientifique (en voilà un autre langage bien batard que celui de matlab)
A mon sens Fortran est surtout resté parce que ses utilisateurs ne sont pas informaticiens (et ils ne se rendent donc pas compte de l'espèce d'horreur qu'est le mix de f77 et de f90 que pratiquent aujourd'hui la plupart d'entre eux), et qu'ils n'ont pas envie d'apprendre un autre langage. C'est aussi le seul langage qui soit "dédié" au calcul scientifique. Pourtant il n'a pas grand chose à proposer à part un support natif des tableaux multidimensionnels, et le fait que le code compilé par un compilo f77 est vraiment rapide (pour le f90 c'est déjà beaucoup moins clair)
Le f90 est au f77 ce que le c++ est au c ( et même un peu plus). En gros il n'a rien à voir, mis à part qu'on peut encore coller des bouts de f77 au milieu d'un code f90 et ça compilera. Je trouve qu'ils auraient du carrement faire un nouveau langage plutot que cet espèce de frankenstein qui ne gère pas les lignes de plus de 132 caractères (c'était 80 en f77 mais les visionnaires concepteurs de f90 ont décidé que 132 should be enough for everyone. Alors il y des compilateurs qui arrêtent de lire après le 132ème car. Que du bonheur à débugger). f90 a aussi gardé l'espère d'ignominie qu'est le système d'i/o de f77, qui était surement très adapté au temps des cartes perforées, mais le monde a changé depuis. On a aussi inventé la ligne de commande entre temps, mais c'est dommage f90 ne permet pas de lire les arguments de la ligne de commande. Je ne m'étendrais pas sur le support des chaines de caractères, qui est éminement rustique et peu orthodoxe. Petit détail esthétique: l'usage du '%' pour accèder aux membres d'une structures, là où tous les autres langages utilise un '.'
Tout ça pour dire que je trouve que le cas du fortran est desespéré. Que la bête meure! et vive Fortress!
[^]Re: Le Fortran
j'ai eu la chance de participer à un workshop pour du calcul scientifique avec des experts de Sun. Résultat des courses, si vous voulez vraiment tirer le maximum des serveurs avec 72 procs, mangez du Fortran.
Bien propre, les compilateurs de Sun font des merveilles pour paraleliser le tout. Et pour répondre à la critique sur les problèmes d'I/O etc... on interface notre code avec du Python...
[^]Re: Le Fortran
Tu critiques le Fortran mais tu dis aussi qu'il est irremplacable...
Pour les entrées sorties, cela ne m'a jamais géné. Ce n'est pas du printf à la C mais les printf du C sont parait-il soumis au buffer overflow...
Au niveau de la ligne de commande, tu peux avoir les arguments depuis tous les compilateurs que j'ai croisé. Certes, cela n'était pas normalisé . Justement, ce manque est résolu avec le F2003. A ce sujet là, Java est contre la ligne de commande...
Quand au %, certes c'est pas très beau mais il ne pouvait pas prendre le . car celui-ci est déjà pris pour les opérateurs. En effet, tu peux définir autant d'opérateur que tu veux en fortran avec des petits noms, par exemple un opérateur 'scalar' qui serait le prodiut scalaire de deux vecteurs ou de deux tenseurs. En gros un opérateur qui te donne le résulta d'une mesure sur un objet. Tu l'utilise ensuite en écrivant :
m = X .scalar. Y
Et lorsque tu programme un code de cacul avec plein de formule, c'est hyper pratique de coder ainsi. Dans les autres langages, je ne connais pas d'équivalent aussi pratique et parlant. Je ne parle pas de la surcharge de l'operateur * qui représente un produit mais lequel ?
Bref, surcharger * rend souvent le code illisible, il est bien plus pratique de définir ses propres opérateurs.
Tiens un truc bien, en Fortran 90, pas de ses fichiers d'en tête à la Ada ou tu dupliques tout ou à la C qui fait des inclusions récusives qu'il faut bidouiller avec des #define... Non, c'est le complateur qui en analysant ton code te génère ton fichier d'en tête !
Comme quoi, la diversité n'est pas plus mal.
[^]Re: Le Fortran
En ocaml on peut déclarer des opérateurs infixes de la même façon.
OCaml, l'avenir du fortran ? :-) non non je ne trollerai pas là dessus,
mais ça méritait d'être signalé.
[^]Re: Le Fortran
Etant donné que les affreux en question ont écrit leur site en Perl, on peut soupçonner quelques fanatiques de ce language. Ceci dit à propos de Fortran, je citerais quelqu'un qui avait une avie très nette sur la question:
*tousse* *tousse*
``Whatever it is, I'm against it'' -- Marx Groucho
[^]Re: Le Fortran
Le Fortran 90 a changé beaucoup de chose et le Fortran 2003 amène la programmation objet, 8 ans après Ada95 mais plus de 40 ans après sa création. Pas si mal pour un langage qui a vu un nombre impressionant de cadavre sur sa route.
J'avais remarqué qu'il y avait des personnes qui étaient à la fois dans le comité Ada et dans celui de Fortran. Cela n'empêche pas Fortran de ne pas suivre bêtement Ada mais d'avoir sa propre trace. Par exemple, les pointeurs introduits en Fortran 90 sont petits à petits éliminés au profit d'objet "allocatable" bien plus facile à gérer pour un compilateur en terme de ressource.
Je te conseille d'aller voir du coté de la norme Fortran 2003 pour te rendre compte par toi même. Si tu veux développer un client de courriel ou un traitement de texte, passe cependant ton chemin. Le Fortran est clairement orienté calcul scientifique et malgré mes réticences au début, il faut avouer qu'il remplit pas mal son rôle.
http://en.wikipedia.org/wiki/Fortran
Un présentation faites par l'IDRIS
http://www.idris.fr/data/cours/lang/fortran/f2003/Fortran_20(...)
[^]Re: Le Fortran
Mmmmh, franchement, autant je vois beaucoup de code F77 et un peu de F90 autour de moi, autant F2003 m'a l'air un chouilla mort-né.
[^]Re: Le Fortran
Un peu comme COBOL 2002 ? ...
http://en.wikipedia.org/wiki/Cobol#COBOL_2002_and_object-ori(...)
[^]Re: Le Fortran
En quoi il serait mort-né ? Il faut pas mal de temps pour intégrer les améliorations dans le compilateur, ça ne se fait pas du jour au lendemain. Pour autant que je me souvienne il y a quelques fonctionnalités de fortran 2003 qui sont en cours d'intégration dans gfortran. Peut-être que le google SoC permettra d'en apporter un peu plus. Cependant ce serait bien que gfortran implémente complètement fortran 2003 avant la sortie de fortran 2008.
[^]Re: Le Fortran
En pratique, on code en F95 et peu en F90. On dit F90 car c'est le gros changement.
Le F2003 permet de faire de la programmation objet simple. Pour les projets auquels j'ai participé, c'est suffisant et cela permet d'éviter d'émuler l'objet.
Il faut bien voir que programmer en objet n'est pas toujours bon pour la performance. La programmation objet a un peu trop tendance a crée trop d'objet intermédiaire avec de l'allocation et de la dé-allocation de la mémoire.
Encore une fois, le Fortran est un langage spécialisé conçu pour la performance, pas pour le "Desktop".
[^]Re: Le Fortran
On est bien d'accord. Lorsqu'on parle de programmation pour le HPC, rajouter tout un tas de machins à Fortran n'est pas très intéressant. Cela dit, FORTRAN (77|90), malgré toutes les qualités qu'on peut bien vouloir lui trouver, c'est moche. Même le C fait figure de langage moderne à côté.
[^]Re: Le Fortran
C'est sur que la gestion des pointeurs du C est génial, notament celle des pointeurs de pointeurs ;-)
Soyons honnête, le Fortran 95 et maintenant 2003 sont bien plus lisible que du C. Evidement, je ne parle pas pour une personne qui fait du C toute la journée !
Regardes un peu le pdf que propose l'IDRIS sur le Fortran 2003 et tu verras qu'il n'a pas à rougir du C pour son objectif à lui, c'est à dire le calcul intensif.
[^]Re: Le Fortran
quand on travaille en fortran, on est pas là pour adopter les dernières nouveautés
à la mode par plaisir.
il faut du temps pour que les outils de calculs, les projets et les gens intègrent les évolutions.
mais je confirme que fortran est toujours d'actualité, qu'il est dans le milieu industriel et académique et non on ne fait pas de migration pour s'en débarrasser, j'ai encore pléthore de progiciels conçus et pensés pour travailler avec fortran, et ils évoluent régulièrement.
[^]Re: Le Fortran
Ah ça, c'est bien vrai. Lorsqu'on code en FORTRAN, on a tellement peur de retoucher à certains codes (BLAS, LaPACK, etc) qu'on laisse souvent les vieilles implémentations telles quelles, alors qu'elles ne sont pas forcément programmées dans une optique parallèle.
Et je ne parle pas du combo magique FORTRAN + MPI, avec des gens qui utilisent les I/O asynchrones pour aller plus vite (ce qui est bien) mais en pratique font des MPI_send(...) ; MPI_wait(...); (pas bien, gérer les I/O async en synchrone, faut le faire quand même).
Et justement, FORTRAN permet peut-être la performance, mais dans le cadre du HPC, si t'es pas foutu d'optimiser ton code correctement (et c'est le problème de beaucoup de scientifiques non informaticien, et oui c'est normal, puisqu'ils ne sont pas infoteux), tu perds tellement de temps lors de l'exécution qu'on se demande bien à quoi peuvent servir tous ces mécanismes faits pour rendre le calcul efficace.
[^]Re: Le Fortran
Je suis d'accord, Fortran n'est pas parfait pour faire du code parallèle mais la concurrence ?
Aujourd'hui, en Fortran, on s'en sort plus ou moins bien et c'est exactement ce que j'ai dis dasn un post. Pour pouvoir profiter de la future machine pétaflop, il faut modifier notre manière de programmer, la machine ne peux pas complètement s'adapter malleureusement à notre manière actuelle.
Le langage que j'ai beaucoup aimé était Sather avec une version pSather. L'objetif de ce langage était clairement de faire un langage objet à la Effeil mais très orienté calcul intensif et parallèle. Malheureusement, il est mort.
Pour ce qui est des bibliothèques de base comme BLAS ou Lapack, cela évolue, lentement mais surement. Je connais des gens qui ont leur propres versions moins optimisé mais qui ne veulent pas en changer car leur bibliothèque est validé depuis des années. Il faut dire que tu veux éliminer toutes erreurs possibles lorsque tu lances un calcul qui dure plusieurs semaines sur une machine SMP. Un des problèmes ici est que les chercheurs manquent de ressources de calculs (et aussi de bras) et qu'ils ne peuvent pas par exemple se permettent d'utiliser 40 coeurs pendant 3 semaines de la machine NEC SX8 de l'IDRIS pour rien.
Il faut bien voir que ce ne sont toujours pas des chercheurs en informatique qui font du Fortran mais plutôt des chercheurs du domaine des études faites. Les contrats de recherche qu'ils obtiennent ne sont pas destinés à financer l'amélioration de BLAS par exemple.
[^]Re: Le Fortran
Je suis d'accord, Fortran n'est pas parfait pour faire du code parallèle mais la concurrence ?
Ben justement. La concurrence n'est pas meilleure du point de vue langage. Du point de vue des bibliothèques qui vont bien, le C est muni depuis un bout de temps de machins types threads, de bibliothèques à deux niveaux pour les threads, etc.
Pour ce qui est des bibliothèques de base comme BLAS ou Lapack, cela évolue, lentement mais surement.
Mouais. Pour ne prendre qu'une bibliothèque ultra-utilisée, à savoir hypre, peut-être bien que les préconditionneurs sont vraiment géniaux, mais en ce qui concerne les BLAS, ils ont fait un simple f2c d'une implémentation « libre » qui date de ... 1977. Ça fait peur, vraiment.
Pour ce qui est de l'argument des bibliothèques moins bonnes mais qui au moins n'ont pas de bugs, pour ne reprendre que des briques de base (oui, encore les BLAS ;-)), on se retrouve à la fin avec des gens qui ont des algorithmes qui ne passent pas du tout à l'échelle (parce que passer sur 16 ou 32 processeurs n'assure pas du tout que ça pourra passer au-delà), et qui vont être tout content de quadrupler le prix de leur calculateur, en doublant les processeurs ainsi que le système de refroidissement qui va avec, pour finalement obtenir une accélération de ... deux (je parle de machines qui sont déjà équipées d'au moins 16 ou 32 processeurs, justement).
Il faut bien voir que ce ne sont toujours pas des chercheurs en informatique qui font du Fortran mais plutôt des chercheurs du domaine des études faites. Les contrats de recherche qu'ils obtiennent ne sont pas destinés à financer l'amélioration de BLAS par exemple.
Et c'est bien ce que je leur reproche -- silencieusement, parce que le sismologue qui explique qu'il n'est pas informaticien, mais qu'il a codé tout son machin de maillage adaptatif en FORTRAN/MPI a quand même tout mon respect, optimisation ou pas optimisation.
Je sais bien qu'il s'agit de scientifiques autres que des infoteux qui codent tout ça (ce qui explique aussi pourquoi ils font toujours du FORTRAN). N'empêche : embaucher quelqu'un (un ingé de recherche) pour reprendre les bibliothèques fondamentales et les optimiser pour des architectures d'aujourd'hui (parce que le NUMA, avec l'hypertransport et le futur CSI d'Intel, c'est vraiment aujourd'hui) ne serait pas du luxe. D'ailleurs, certains labos l'ont compris, et commencent à prendre des gens compétents dans le domaine de l'optimisation.
[^]Re: Le Fortran
Je connais aussi un code utilisé dans le génie-civil qui a entièrement été recodé en C++ par une personne embauchée en CDD par l'INRIA je crois. Depuis, cette personne est partis et le code doit continuer à vivre... sans informaticien à plein temps.
Pour avoir fait du C++, c'est facile et rapide de transformer un code bien écrit en une soupe horrible et peu performante...
Il est clair qu'il manque d'ingénieur de développement (et aussi d'ingénieur système pour pas que le dev fasse du système) dans les laboratoires non liés à l'informatique directement et hors grand équipement de type physique (l'IN2P3 a quand même des moyens que les autres n'ont pas).
Pour être positif, il y a quand même des bibliothèques qui bougent, par exemple, en prenant la bonne version de la fftw, on a facilement un facteur 2 à 3 sur un code, et cela, qu'on soit en Fortran ou en C ;-)
Par contre, ce qui est pénible en Fortran, c'est que le mapping des fonctions dans les .o n'est pas normalisé donc il faut se tapper de recompiler les bibliothèques pour chaque version de compilateur. Lorsqu'on fait un nouveau langage, cela devrait être dans les spécifications de base.
[^]Re: Le Fortran
Personnellement je trouve le fortan 77 insupportable et bourré d'archaïsmes. En revanche la fortan 90 a apporté une véritable révolution. Écriture vectorielle, liberté de mise en forme du code source, pointeurs, objets, etc. Je connais un certain nombre de numériciens dont la plupart utilisent fortran, mais aucun n'utilise encore le fortran 77.
[^]Re: Le Fortran
Je suis d'accord avec toi, le F77, c'est du passé aujourd'hui. D'ailleurs cela à plus de trente ans ! Tous les codes que je vois développé aujourd'hui sont en F90 minimum, en pratique, assez souvent du F98.
Je vais me faire incendier, mais le C, c'est un peu pareil, insupportable et bourré d'archaïsmes ;-) D'ailleurs, comparativement au Fortran, le C a vachement evolué !
[^]Re: Le Fortran
aucune raison d'être incendié
le C n'est pas l'alpha et l'omega de la programmation (et encore heureux) même si je vous recommande de l'apprendre, hein (je dis ca aux petits jeunes qui lisent linuxfr :) )
[^]Re: Le Fortran
Surtout, fortran c'est je crois le premier language compile. A l'epoque les gens etaient pas convaincu du concept de compilateur par rapport a coder en assembleur a la main. Donc beaucoup de techniques pionnieres dans la compilation sont issues de cette premiere version de Fortran.
Les premieres versions de fortran n'avaient pas de if then else qui a ete invente plus tard avec Lisp, c'est dire l'etat de l'art en langage de prog de l'epoque.