Quelques langages particuliers
Qu'appelle-t-on langage ?
Un langage de programmation doit permettre de définir un modèle de données et des traitements s'effectuant sur ces données.
Les données doivent pouvoir être organisées selon le désir de l'utilisateur, mais pas forcément structurées. Il doit y avoir la notion de mémoire, même la plus simple qu'il soit (un registre).
Egalement, ces traitements doivent pouvoir être organisés selon le désir de l'utilisateur, mais pas forcément structurés. Il doit y avoir la notion de test, de débranchement, d'entrée, de sortie et de factorisation de code.
Ainsi, l'assembleur, C, Java, Pascal, Lisp, Postcript, Prolog, Structured Query Language (SQL), le shell Unix sont des langages de programmation.
En revanche, Pcl n'en est pas un. Il ne permet pas de programmer mais de décrire.
Classification des langages
Les langages de programmation peuvent être classés selon cinq familles :
Langages à objets
Ces langages reposent sur le concept d'entité autonome appelée objet liant intimement les données aux traitements les manipulant. Un objet possède des caractéristiques communes à son semblable. Ils sont donc regroupés en classe définissant les caractéristiques et le comportement d'un d'objet particulier. Les classes peuvent se définir hiérarchiquement.
Les traitements propres à un objet sont appelés méthodes. Les données sont rarement accessibles directement étant donnée qu'elles sont cachées à l'intérieur de l'objet i.e. encapsulées. L'accès aux données est contrôlé par des méthodes spécialisées.
Certains langages objets sont procéduraux. D'autres, puristes, ne permettent pas la définition de procédure ou de fonction en dehors des méthodes. Factoriser le code revient à créer un classe sans signification. Une nouvelle brique de traitement est alors uniquement créée lors d'un débranchement (les tests ou les boucles).
Langages ensemblistes
Ces langages reposent sur le concept de la théorie des ensembles. Ils permettent de définir des ensembles d'entité, de créer des sous-ensembles, de faire des intersections d'ensembles, etc.
Ces langages modélisent uniquement les traitements. Les données proviennent d'un monde externe au langage et généralement d'un base de données relationnelle.
Sans quelques notions procédurales, ils sont inutilisables. Pour cela, la plupart incorpore la notion de test dans la manipulation ensembliste.
Langages à liste
Ces langages reposent sur le concept d'éléments appartenant à une liste. Un élément peut être n'importe quoi : un élément du langage, un traitement, une donnée ou une liste. Une liste sert à définir la liste des instructions, un appel de procédure (les éléments de la liste sont la procédure puis les paramètres de l'appel), un test (les éléments de la liste sont l'expression à tester, une liste d'instructions à exécuter si le test est vrai et une liste d'instructions à exécuter si le test est faux).
Ces langages mélangent les données et les traitements : les traitements sont des données particulières et les données sont vues comme autant de fonctions sans paramètre. Ils permettent de faire aisément de l'auto programmation et sont donc utilisés en intelligence artificielle.
Langages cognitifs
Ces langages reposent sont fait pour modéliser le raisonnement humain. Les données sont uniquement atomiques. Elles sont organisées sous forme de faits valués ou non : Température=12 °C
(fait valué), il pleut
(fait non valué). Les traitements sont uniquement constitués de règles de déduction analogues à Si Condition Alors Action. L'action de ces règles est soit l'établissement d'un fait ou sa valuation. La condition est une expression booléenne portant sur ces faits : existence, valeur, etc.
Un programme réalisé dans un de ces langages s'utilisent de deux manières : soit la base de faits est alimentée extérieurement au programme et, par déduction, de nouveaux faits sont déduits (utilisation de la règle dans le sens Si j'ai cela Alors j'ai ceci
.) ; soit des faits hypothétiques sont induits à partir de faits constatés en vue de connaître des hypothèses ou tout simplement de valider les faits constatés (utilisation de la règle dans le sens Comme j'ai ceci Alors il me faut cela
.)
Ces langages sont particulièrement utilisés dans l'aide à la décision et servent à construire une base de raisonnement en intelligence artificielle.
Classification des modes d'exécution des langages
Il existe trois types de mode d'exécution :
Les langages compilés
Les instructions du source du programme sont converties en une suite d'instructions écrites en langage machine directement compréhensible par l'ordinateur. Ils nécessitent donc une phase de compilation qui peut être assez longue si le programme est gros ou s'il comporte beaucoup de bibliothèques à lier.
Ils sont rapides à l'exécution mais lourds en développement et assez rigides concernant l'interopérabilité des composants des programmes.
Les langages interprétés
Les instructions du source du programme sont analysées lors de l'exécution du programme par un interpréteur. Ce dernier reconnaît les instructions une à une et en déduit les fonctions à appeler dans des bibliothèques. Ces bibliothèques peuvent être constituées de code compilé ou de code à interpréter.
Ils sont lents à l'exécution, souples concernant l'interopérabilité des composants des programmes, mais rapides en développement.
Les langages semi-compilés
Les instructions du source du programme sont converties en une suite d'instructions écrites en langage machine pour une machine imaginaire appelée machine virtuelle. Ils nécessitent donc une phase de pseudo-compilation mais qui est légère quand bien même le programme est gros. (Les bibliothèques ne sont pas liées.)
Ils sont moyennement rapides à l'exécution, souple concernant l'interopérabilité des composants des programmes et assez rapides en développement.
Langages usuels
Voici les langages les plus usuels
Ada
Ada est un langage très sûr, permettant de réaliser des programmes fiables et bien organisés. Il permet notamment prévu pour réaliser des applications dans lesquelles la communication entre les programmes à de l'importance. En revanche, il ne dispose pas de fonction pour créer aisément des interfaces hommes-machines.
Basic
Basic est un langage très aisé à apprendre. Il permet à des informaticiens non avertis de réaliser de petites applications de façon autonome. Décliné par la majorité des éditeurs de logiciel (Visual Basic de Microsoft), il permet généralement de créer aisément des interfaces hommes-machines. En revanche, il est généralement moins performant que les autres langages et permet de structurer faiblement les programmes.
C
C est le langage à tout faire. Il est très ouvert, ce qui fait qu'il est complexe à maîtriser dans sa totalité, d'autant plus que d'une plate-forme à l'autre, soit il ne se comporte pas de la manière, soit ses extensions ne sont pas forcément disponibles. Ce langage à tout faire permet de maîtriser tous les sujets et le plus en profondeur : modélisation des traitements, modélisations données ; interfaçage avec l'utilisateur, avec les autres programmes avec les autres ordinateurs. Il permet de réaliser des programmes des plus performants.
Généralement, les autres langages sont écrits en langage C. Le langage C est écrit pour partie en lui-même et pour partie en assembleur, une sur-couche logique du langage machine. La majorité des systèmes d'exploitation est écrite en langage C. La majorité des interfaces hommes-machines est écrite en C.
Cobol
Cobol est dédié à la gestion des données. Il est fiable mais n'est pas très ouvert. Concernant les interfaces hommes-machines, il permet généralement d'en créer des simplistes soit en mode caractère soit en mode graphique émulant un mode caractère (méthode de revamping graphique). Il ne comporte aucune fonction de communication entre les programmes, si ce n'est l'appel de sous-programme, et ni de fonction de communication entre les ordinateurs.
Pour la petite histoire, il s'agit du seul langage inventé par une femme. Est-ce pour cela qu'il est le plus représenté aujourd'hui ?
Langage Java
Java est le langage dédié à Internet dérivé en langage à priori à tout faire. Il est le plus récent. Il permet de réaliser des programmes rapidement qui seront 100 % portables d'un ordinateur à l'autre. Il est très complet sauf en ce qui concerne les interfaces hommes-machines au regard du Basic et du C.
Fortran
Fortran est le langage dédié au calcul scientifique. Il est fiable et permet de réaliser des programmes fiables. Seulement, il est retard sur d'autres langages concernant la structuration des programmes, la création des interfaces hommes-machines et la communication entre les programmes ou entre les ordinateurs.
Lisp
Ce langage à listes (list processing) est un langage à tout faire très particulier. Il permet de travailler avec les interfaces hommes machines, notamment Motif, et possède des extensions permettent d'effectuer des appels système, etc. Cependant les programmes écrits en Lisp sont gourmands en mémoire et peu performants.
Le fait qu'il soit très différent des langages usuels (i.e. procédural) le rend difficile d'accès pour un non initié. Cependant Lisp s'avère incontournable lorsqu'il s'agit des programmes d'intelligence artificielle.
Prolog
Prolog est uniquement dédié à modéliser le raisonnement humain concernant la déduction de faits et l'induction d'hypothèses. Son mode de programmation est très particulier. Il permet de modéliser un raisonnement en très peut de lignes de code, le tout est de les écrire !
Ce langage est fiable et produit des programmes peu performants.
Smalltalk
Smalltalk est le langage dédié à l'organisation des traitements, des données. Il est sur et permet de réaliser des programmes fiables. Il permet aisément d'interfacer des programmes et des ordinateurs. Seulement, il est difficile à maîtriser, permet difficilement de créer des interfaces hommes-machine et est peu diffusé.
Ce langage, qui était en avance sur son temps, est aujourd'hui dépassé.
Sql
Structured Query Language (SQL) et ses extensions propriétaires telles Pl/Sql d'Oracle est dédié l'interrogation des bases de données relationnelles. Il est sûr et simpliste. Loin d'être complet, il ne permet pas de créer des interfaces hommes-machine. Il permet au plus de créer des portions de programme, portions dédiées justement à l'interrogation des bases de données relationnelles.
Synthèse sur les langages de programmation
Voici une synthèse comparative des différents langages énoncés dans les sections précédentes. Les titres des lignes de ce tableau ont les significations suivantes :
- Interprété
Vrai s'il existe une version interprétée du langage.
- Semi-compilé
Vrai s'il existe une version semi-compilée du langage.
- Compilé
Vrai s'il existe une version compilée du langage produisant des exécutables natif pour la plate-forme cible.
- Performant
Vrai si les programmes écrits avec ce langage seront performants par rapports à un autre programme réalisant les mêmes traitements sur les mêmes données mais écris dans un autre langage. (Performance relative à la moyenne.)
- Econome
Vrai si les programmes écrits avec ce langage seront économes en ressources (mémoire, CPU, disques, ) par rapports à un autre programme réalisant les mêmes traitements sur les mêmes données mais écrit dans un autre langage. (Economie relative à la moyenne.)
- Fiable
Vrai si le langage permet d'écrire des programmes qui seront résistants aux erreurs de programmation.
- Maîtrisable
Vrai si le langage est compréhensible par un informaticien peu chevronné et ne nécessite pas de spécialisation particulière.
- Date de création
décennie de la création du langage.
- Evolution
Evolution de la côte du langage auprès des informaticiens vis-à-vis des nouvelles applications développées.
- Part de marché
Part de marché de ce langage en fonction du nombre de programmes écrits dans le monde.
- Est intéropérable avec
Liste des langages qui peuvent utilisés pour réaliser des parties de l'application, ces parties pouvant être reliées avec les programmes développés avec ce langage.
- Données
Vrai si le langage offre des primitives pour modéliser les données de façon élaborée.
- Traitements
Vrai si le langage offre des primitives pour modéliser les traitements de façon élaborée.
- IHM
Vrai si le langage permet d'écrire des programmes utilisants aisément les IHM.
- Réseau
Vrai si le langage permet d'écrire des programmes utilisants aisément les réseaux.
Sujet | Ada | Basic | C | Cobol | Fortran | Java | Lisp | Prolog | Smalltalk | Sql |
Interprété | N | O | N | N | N | O | O | O | N | O |
Semi-compilé | N | O | N | N | N | O | O | O | O | O |
Compilé | O | N | O | O | O | N | N | N | N | N |
Performant | O | N | O | O | O | O | N | N | N | O |
Econome | O | N | O | O | O | N | N | N | N | O |
Portable | O | N | N | O | O | O | N | O | O | N |
Fiable | O | O | N | N | O | O | O | O | O | O |
Maîtrisable | O | O | N | O | O | O | N | N | N | O |
Date de création | 1980 | 1970 | 1970 | 1970 | 1970 | 1990 | 1970 | 1980 | 1980 | 1980 |
Evolution | = | + | + | - | = | + | = | = | = | = |
Part de maché | Faible | Faible | Forte | Forte | Forte | Faible | Faible | Faible | Faible | Moyenne |
Est intéropérable | Sql | Sql, C | Java, Sql, Fortran | Néant | C | C, Sql | C | Lisp, C | Néant | Néant |
Données | O | N | O | N | N | O | N | N | O | N |
Traitements | O | N | O | N | N | O | O | N | O | N |
IHM | N | O | O | N | N | O | O | N | N | N |
Réseau | O | N | O | N | N | O | N | N | N | N |