Langages à rallonges
Depuis les débuts de l'informatique, des centaines de langages de programmation ont été créés, chacun étant plus ou moins spécialisé. Leurs concepteurs se sont concentrés sur les points qui leur paraissaient les plus importants au moment où ils travaillaient, comme dans le cas du C, défini à l'origine pour écrire le code d'un système d'exploitation devant être portable, Unix. Ils ont une efficacité variable pour résoudre les problèmes dans un ou plusieurs domaines parmi ceux que compte l'informatique - calcul scientifique, gestion, temps réel, systèmes d'exploitation, base de données, intelligence artificielle, etc. - et d'ailleurs seuls quelques-uns se sont largement répandus (darwinisme technique ?) mais ils restent pour la plupart spécialisés. Cela signifie que dès qu'ils sont sortis de leur "terrain de jeu" habituel les choses se compliquent pour obtenir le résultat souhaité, jusqu'à mener à la fabrication d'usines à gaz ou même à l'impossibilité pure et simple d'y arriver, notamment s'il y a des impératifs de performances.
Mais, avec l'innovation que constituait la modularité, certains langages sont entre autre apparus comme des spécialistes de la non-spécialisation. En effet, rien n'empêche de concentrer certaines fonctionnalités "exotiques" dans des modules spécifiques pour n'avoir qu'un seul endroit à consulter en cas de maintenance ou d'évolution (c'est même conseillé). On peut ainsi imaginer des blocs autonomes pour gérer la manipulation d'une extension matérielle réalisant des calculs vectoriels, pour utiliser un DSP (processeur de traitement du signal) ou pour faire de l'intelligence artificielle avec des notations se rapprochant de celles de Prolog. Eventuellement, si un service informatique est suffisamment diversifié, plusieurs équipes s'échangeront des modules en fonction de leurs besoins respectifs. Le polymorphisme de la programmation par objets va encore plus loin puisque l'idée était expressément de pouvoir remplacer de façon transparente une implémentation donnée par une autre présentant simplement la même interface : un modèle de DSP peut se substituer à un premier, devenu moins avantageux pour une raison quelconque, si les fonctions fournies aux programmes utilisateurs restent les mêmes.
Cette adaptabilité est incontestablement un plus pour ceux qui doivent résoudre des problèmes divers (on peut même faire sous-traiter des éléments que l'on ne maîtriserait pas suffisamment) mais une deuxième particularité est nécessaire en plus de la modularité : la faculté du langage de travailler facilement à un bas niveau (pas question de faire du standard au moment de créer une interface pour un circuit spécialisé) et ce sans que la possibilité de gérer une éventuelle complexité d'ensemble soit sacrifiée.