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 :
- imperatifs (serie d'instructions)
- fonctionnels (recours systematique a des fonctions)
- logiques (bases sur les regles de Logique Fondamentale, notamment les
clauses de Horn et le Modus Ponens)
- orientes objets (derives des langages imperatifs, ils facilitent l'independance
des modules, en adoptant une vision classe/methode)
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 :
- compilation (de loin la plus utilisee et celle qui permet l'ecriture
des programmes les plus importants car le temps consacre a la compilation
est gagne au niveau de la phase d'execution). Voir schema et explications
p 28.
- interpreteur (plus agreable pour le programmeur car permet de verifier
tout de suite la validite des instructions mais execution lente). Voir schema
et explications p 30.
- mixte (represente un compromis entre les precedentes). Voir schema
et explications p 31.
5. Dresser un court historique des différentes
versions de FORTRAN, en présentant les avantages et nouveautés
de chacune.
- Fortran 0 (1954) n'a pas ete implemente.
- Fortran 1 (1956) introduit un formatage entree/sortie ainsi que les
notions de variables, branchements et boucles desormais classiques dans les
langages imperatifs.
- Fortran 2 (1958) permet de compiler separement differents sous-programmes
et par la-meme d'etendre la taille des projets developpes.
- Fortran 4 (1962) apporte la declaration de types et une structure if
un peu plus facile a utiliser que celle de Fortran 1.
- Fortran 77 (1978) generalise le type chaine de caracteres et affine
les structures de boucles et de if-else.
- 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