Langages de programmation - typage et divers

Typage


L'une des premières choses que l'on apprend dans un langage de programmation (après le classique Hello World!) est l'utilisation des variables. Pour le sujet qui nous intéresse les variables nous mènent à leur type et à ce qu'on appelle le typage d'un langage. Celui-ci possède généralement trois caractéristiques binaires [1].

Fort / faible


Cette notion est la plus floue des trois caractéristiques car personne n'a encore été en mesure d'en proposer une définition précise et communément admise. Cette notion regroupe entre autres la capacité du compilateur à déterminer à la compilation et/ou à l'exécution les erreurs de typage (du style affectation d'une chaîne de caractères dans un entier). Plus cette détection est forte et possible plus le typage est fort. De même, de nombreux langages autorisent par exemple l'affectation d'une valeur d'une variable entière dans une variable flottante. Il s'agit donc plus d'une échelle de valeur que d'une notion binaire. Pour ce qui est des exemples, le C est faible (conversions implicites autorisées) tandis que le Java est fort (cast obligatoire dans 99% des cas).

Statique / dynamique


Pour peu que l'on s'intéresse à la compilation, la différence entre statique et dynamique ne pose pas de problème. Le typage statique est effectué lors de la compilation. Le typage dynamique est lui vérifié et déterminé à l'exécution. Ce dernier est souvent associé à la possibilité pour une variable de changer de type en cours d'exécution. Ainsi en PHP (qui par ailleurs possède un typage implicite), il est tout à fait possible d'écrire le code suivant :

$var = 42;
$var = "Un éléPHPant ça trompe énormément";
Cependant, comme tout mécanisme dynamique qui se respecte, cela dégrade les performances.

Explicite / implicite


Cette caractéristique détermine si le programmeur doit préciser explicitement ou non dans le code source le type d'une variable. Par exemple, si le typage est explicite le code dit clairement «voici une variable a, c'est un entier qui vaut 42». C'est la cas notamment du langage C :

int a = 42;
Dans le cas implicite, le code dit plutôt «voici une variable a, sa valeur est l'entier 42». La différence réside dans le fait que le type de a dépend de ce qu'on lui affecte. Par conséquent, si le langage n'a pas de typage dynamique, une déclaration implicite nécessite une initialisation. La plupart des langages à typage implicite utilisent un mécanisme d'inférence de types pour résoudre le type [2], [3]. Exemple en Caml :

let a = 42;;
NB : Le C++ jusqu'à aujourd'hui est un langage à typage explicite. Cependant cela devrait changer avec l'arrivée du prochain standard (C++0x/C++1x) et l'introduction du mot-clé 'auto' [4].

[1] http://fr.wikipedia.org/wiki/Typage#Typage
[2] http://en.wikipedia.org/wiki/Type_inference
[3] http://www.enseignement.polytechnique.fr/informatique/INF544/06/cours.4.pdf
[4] http://fr.wikipedia.org/wiki/C%2B%2B1x#Inf.C3.A9rence_de_types

Divers


Suivent ci-après diverses notions que nous n'aborderons pas plus en détail par manque de temps ou simplement parce qu'elles ne méritent pas plus de quelques lignes. Le prochain article sera consacré à une première ébauche de carte d'identité et probablement d'un exemple.

Code objet


Un signe caractéristique d'un langage est ce que l'on pourrait appeler la nature de son code objet :
- le langage peut être compilé (C, C++, …), dans ce cas le code objet est du binaire,
- il peut être interprété pur (PHP, Ruby, Perl et tous les langages de scripts), dans ce cas le code objet est également le code source,
- finalement, le mélange des deux existe aussi (Java pour ne pas le nommer), dans ce cas le code source est compilé en byte-code et ce dernier est interprété, le code objet est donc du byte-code.

Popularité


Il est très difficile de mesurer précisément la popularité d'un langage faute de définition précise. On peut cependant envisager de prendre en compte :
- le nombre de ligne de code en production,
- le nombre de personnes "sachant programmer",
- le nombre d'offres d'emploi pour ce langage,
- le nombre de livres vendus,
- …

On pourrait envisager une classification simple mais difficile à préciser :
- langages populaires (C, C++, Java, …),
- langages secondaires,
- langages marginaux (nouveaux langages ou langages qui n'ont pas trouvé de public),
- langages exotiques (vive le Brainfuck et le Whitespace \o/).

Langpop [5] semble être un bon site de résultats. Il a en tout cas le mérite d'avoir de nombreuses sources différentes.

Identité pure du langage


On entend par là :
- son nom,
- sa version,
- son logo,
- son créateur.

[5] http://langpop.com/
[6] http://www.tiobe.com/tpci.htm




Comments