CSI 3525 - Groupe de discussion #2

Questions generales


Je remercie a nouveau ce qui etaient presents pour leurs presentations. Les reponses donnees ici sont plutot basees sur ce que j'avais prepare avant le cours parce que je n'ai pas pu prendre en note tout ce que vous avez dit dans vos exposes. Cela dit, la plupart du temps, vous retrouverez a peu pres le contenu des presentations de lundi meme si, dans des questions de ce type, la bonne reponse absolue n'existe pas car la subjectivite de chacun est en cause. Enfin, il est evident que les reponses donnees ici sont tres sommaires. Dans un devoir, il conviendrait d'expliquer chaque terme employe et de situer un peu plus chaque reponse.

1.    Lister les différents domaines d’applications des langages de programmation. Pour chaque domaine, expliquer quels avantages doivent posséder les langages et citer un langage typique.

    Dans le domaine scientifique, on recherche l'efficacite (les programmes ne sont pas destines au grand public) et on veut un langage qui soit performant dans l'arithmetique des reels (flottants). Un langage typique est Fortran.
    Dans le domaine commercial, on recherche la facilite d'ecriture et la lisibilite et plus generalement la simplicite pour reduire les couts de maintenance et de formation des programmeurs. Les applications commerciales doivent bien entendu presenter egalement un minimum de fiabilite. Un langage typique est Cobol.
    En Intelligence Artificielle, on apprecie le calcul symbolique et les langages permettant facilement de manipuler des listes. Ces langages doivent etre flexibles et logiques. Un langage typique est Lisp.
    Dans le domaine de la conception de systemes, on recherche la rapidite et l'efficacite. Les langages sont assez bas niveau et si possible portables. Un langage typique est C (utilise pour ecrire Unix).
    Dans l'ecriture des scripts, on apprecie la facilite d'ecriture et la portabilite. Un langage typique est Perl.

2.    Expliquer l’importance de la facilite d’écriture (writability) dans un langage de programmation. Donner (en justifiant) quelques caractéristiques ameliorant la facilite écriture.

    La facilite d'ecriture rend compte du caractere pratique d'un langage. Il s'agit donc de faciliter la programmation (et par la meme de reduire le temps de developpement) et l'adaptation des programmeurs a des nouveaux langages. La facilite d'ecriture n'est pas absolue puisqu'elle est egalement fonction de l'adaptabilite du langage aux besoins (d'ou la necessite de connaitre plusieurs langages et de savoir quels sont leurs points faibles et points forts). Enfin, la facilite d'ecriture est aussi importance dans la phase de maintenance d'un logiciel (aujourd'hui la plus importante : il est rare que les projets de developpement partent de zero).
    Les caracteristiques qui rendent un langage facile a ecrire sont la simplicite et l'orthogonalite, les principes d'abstraction et de modularite et la facilite d'expression offerte au programmeur (un aspect intuitif entre ici en ligne de compte).

3.    Quelles sont les différentes catégories de langages ? Laquelle est prédominante ? Expliquer pourquoi.

    Les differentes categories de langages sont :
    Comme on me l'a fait remarque en cours, la question est ambigue puisqu'il est difficile de distinguer une categorie predominante entre imperatifs et orientes objets. En fait, la question sous-entendait que les langages orientes objets appartiennent plus ou moins a la categorie imperative (et ils n'ont jamais ete vraiment en concurrence avec les langages fonctionnels et logiques) qui est effectivement dominante sur les autres. Ceci est du a l'architecture des ordinateurs decrite par Von Neumann (cf livre p. 21). La necessite de concevoir la memoire comme separee du processeur a amene a considerer (meme a haut niveau) les echanges entre ces deux blocs et a les definir explicitement. C'est pourquoi les langages imperatifs utilisent des pointeurs, des variables (avec instanciation, allocation, desallocation, etc).

4.    Exposer les différentes méthodes d’implémentation en vous appuyant sur des schémas. (non traitee en cours)

    Les differentes methodes sont :

5.    Dresser un court historique des différentes versions de FORTRAN, en présentant les avantages et nouveautés de chacune.

  1. Fortran 0 (1954) n'a pas ete implemente.
  2. Fortran 1 (1956) introduit un formatage entree/sortie ainsi que les notions de variables, branchements et boucles desormais classiques dans les langages imperatifs.
  3. Fortran 2 (1958) permet de compiler separement differents sous-programmes et par la-meme d'etendre la taille des projets developpes.
  4. Fortran 4 (1962) apporte la declaration de types et une structure if un peu plus facile a utiliser que celle de Fortran 1.
  5. Fortran 77 (1978) generalise le type chaine de caracteres et affine les structures de boucles et de if-else.
  6. Fortran 90 (1992) represente un changement complet avec l'introdution de notions utilisees dans d'autres langages comme l'utilisation de pointeurs, de matrices ou de la recursion. Cependant, il est probable que les jours de gloire de Fortran soient plutot derriere lui avec l'utilisation massive des langages orientes objets.

6.    Quelles caractéristiques font de LISP un langage particulier ? Quelles sont ses avantages et applications ?

    LISP est un langage symbolique qui utilise beaucoup les mecanismes de recursion (beaucoup plus que les autres langages) et la manipulation de listes auxquelles il doit son nom (LISt Processing). Les listes sont representes en memoire par un pointeur sur le premier element et un pointeur sur le reste de la liste, structure tres favorable a la recursion. Son caractere particulier vient essentiellement du fait qu'il ne soit pas imperatif : les aspects de declaration des variables ou de gestion de memoire ne sont pas au centre de la programmation.
    Ses capacites d'abstraction en font un langage tres utilise en Intelligence Artificielle et particulierement efficaces dans un certain nombre de domaines, notamment celui des systemes experts.

7.    Quels étaient les objectifs initiaux d’ALGOL ? Qu’a-t-il apporte a l’histoire des Langages de Programmation ?

    Cette question etant assez proche d'une de celles qui est posee dans le devoir, je ne detaillerai pas beaucoup la reponse. Donnons simplement les elements fondamentaux.
    Algol est fonde sur l'utilisation d'une notation mathematique et ses objectifs etaient de fournir un moyen repandu d'ecrire les algorithmes dans les publications et de pouvoir etre implemente sur differentes machines. Il a apporte plusieurs concepts de base (structures par bloc, passage par valeur/reference, etc) et a ete relativement utilise dans la diffusion des algorithmes.

rigouste@site.uottawa.ca