quand on voit le nombre de failles de
sécurité auxquelles il est liéevii.
Quand au langage Python, il est le
fruit d'un projet en solitaire de langage
haut niveau qui accélère grandement la
vitesse de développement tout en restant
proche du langage naturel. Tout d'abord
propagé dans le milieu de la recherche,
il a ensuite été porté par des entreprises
phares comme Google (le premier
crawler de Google aurait été codé en
Python) ce qui lui permet aujourd'hui de
sortir de la sphère purement
scientifique. La lisibilité de sa syntaxe,
le nombre de bibliothèques disponibles,
les outils de haut niveau qu'il présente
et l'aspect multi-paradigme sont les
raisons fréquemment citées de son
succès.
Un exemple d'échec
Le projet Python a démarré suite à
l'échec de ABC, langage devant
permettre de programmer sans se
soucier de l'aspect informatique. Le
projet mobilisait tout un groupe de
chercheurs au CWI, mais fut abandonné
au bout de 5 ans faute de succèsviii.
Ce qu'avance Guido Van Rossum
comme raisons de cet échec est l'aspect
figé de ABC : « ABC avait été conçu
sans l'idée d'évoluer [...]. C'était un
système clos, conçu aussi parfait que
possible »ix. Or autant le C, en tant que
langage bas niveau qui au final ne
définit que peu de concepts, n'a pas un
besoin intense d'évoluer pour se
maintenir (d'autant plus qu'il a été
enrichi par le C++ et le C#), autant un
langage haut niveau comme ABC n'a
pas le choix : sur le grand nombre de
concepts qu'il introduit, il est peu
probable que les développeurs
aboutissent à quelque chose de parfait
dès le premier coup, et il est impossible
que de nouvelles exigences ou visions
des choses, provenant des mutations du
monde de l'informatique et de la société
en général, ne demandent pas une
adaptation de la part de la technologie
pour ne pas devenir obsolète. Ce défaut
a donc sans doute joué un rôle majeur
dans l'échec d' ABC.
Processus de
développement
Quand vient l'envie ou le besoin de
créer un nouveau langage, se pose la
question du comment : Objectifs à
définir, choix à prendre, ressources à
gérer, compromis à faire, c'est une
entreprise qui mobilise toutes les
composantes de la gestion de projet.
Concept et exigences, une
alchimie délicate
Le dilemme du niveau
Une des premières caractéristiques
du langage est son niveau. La notion de
niveau n'est pas définie avec une grande
précision, c'est à dire qu'on peut
seulement distinguer des différences
significatives de niveau entre deux
langages, cependant c'est un aspect qui
va avoir une incidence majeure sur le
reste.
Grossièrement le dilemme est le
suivant : ce qui est bas niveau est facile
à construire (peu de concepts à
implémenter), a une grande portée (on
agit au plus proche du système, on est
moins restreint par les limites
d'implémentation du langage), et rapide
à l'exécution (peu de différence entre le
nombre d'instructions en langage de
programmation et en langage machine) ;
ce qui est haut niveau permet de
programmer des choses plus rapidement
(outils pré-existants comme la gestion
de mémoire, expressions puissantes,
protocoles ou aspects technologiques
déjà gérés …), est moins risqué sur des
aspects auto-gérés comme la gestion de
mémoire qui fait faire de nombreuses
erreurs aux programmeurs en bas
niveau, permet d'introduire des concepts
nouveaux comme l'indépendance face à
la machine physique (avec une machine
virtuelle).
Au sein même du langage, on peut
trouver des outils ou des notions de
niveau plus ou moins haut. Par exemple
en Java le type boolean et le type
Boolean servent tous les deux à
représenter un booléen (une variable de
valeur Vrai ou Faux), mais le premier
est un type dit primitif, de bas niveau, et
le second est un Objet du langage, soit
un concept haut niveau. Le premier est
très simple d'utilisation et peut être
utilisé en dehors de la notion de
programmation orienté objet (qui peut
ne pas être supportée dans un échange
avec d'autre technologies), mais le
deuxième fournit un nombre d'outils
très appréciables lors de la
programmation, la conversion de et vers
une chaîne de texte par exemple.
Il peut donc paraître intéressant de
faire cohabiter au sein d'un langage (ou
plus généralement d'une technologie)
des notions de différents niveau, afin de
laisser la possibilité à l'utilisateur de
travailler au niveau qu'il désire. On peut
alors profiter à la fois des avantages du
haut niveau et de ceux du bas niveau.
En vérité ce mélange peut avoir l'effet
inverse, c'est à dire d'accumuler les
défauts des divers approches. Par
exemple si dans un programme Java on
se met à utiliser une notion bas niveau
qui va introduire une dépendance au
système comme le besoin d'être exécuté
sous une architecture à 64 bit, le
programme tout entier perd son
indépendance à la machine. Il y a
contamination.
Il semble que les langages naissants
soient plutôt de haut niveau. On pourrait
avancer que le peu de concepts définis
ne laisse que peu de place à
l'innovation, que le champ est plus
grand dans le domaine du haut niveau.
Pour Philipe Dax, Directeur d'Études à
Télécom ParisTech, dans ces travaux
dans l'administration système « Le C est
suffisant », quand pour Claude
Chaudet, « Il y a de la place pour
quelques DSL (langages spécifiques à
un domaine) et sans doute des
améliorations à faire au niveau des
langages "visuels" (i.e. Graphiques) »,
des langages typiquement haut-niveau.
Cependant de l'innovation dans le
domaine du bas niveau resterait
envisageable ; le prix en serait un
changement radical du fonctionnement
fondamental de la machine : sa façon de
stocker ses données, de représenter les
choses, d'effectuer les tâches ... ce qui
demanderait un grand effort
d'adaptation de la part des utilisateurs. Il
serait possible que ce genre de
contraintes soit un frein à l'apparition de
nouveaux langages bas niveau.
Python est typiquement un langage
de haut niveau : outre la présence d'une
machine virtuelle, certaines structures
Cédric Van Rompay – Naissance et vie des langages de programmation 5