Eh bien, il semble que le cœur de la déclaration soit:
Une structure de données n'est qu'un ... langage de programmation
Ce qui est tout à fait vrai si vous y réfléchissez. Après tout, les compilateurs comptent tout le temps sur cette transitivité; ils prennent un langage de programmation, le convertissent en une structure de données, effectuent des transformations sur ces données, puis transforment le résultat en un autre langage de programmation.
En fait, si vous le vouliez, vous pourriez même rendre quelque chose de fou comme une structure de données C, qui vous permet d'écrire du code C en appelant ses différentes méthodes - par exemple (en quelque sorte en C #, car c'est ce que j'utilise en ce moment):
var C = nouveau HorribleCObject ();
C.Fonction <int> ("main", typeof (char [] []), typeof (int))
.Variable ("i", typeof (int), 0)
.Pendant ("i", Func (i) => i <10))
.Call ("printf", "% d", "i")
.PostIncrement ("i")
.EndWhile ();
.Retour (0)
.EndFunction ();
Maintenant, en ce qui concerne la citation complète: pourquoi quelque chose comme ça serait stupide par rapport à (disons) écrire en C lui-même? Il devrait être assez évident que c'est verbeux et pas aussi lisible que son équivalent en C (et, dans la pratique, pourrait ne pas prendre en charge toute l'étendue de ce que C peut faire - typedefs serait délicat); par conséquent, cette structure de données n'est qu'un langage de programmation "stupide", intégré dans un "vrai" langage de programmation. Cette même logique peut être généralisée à n'importe quelle structure de données à laquelle vous pouvez penser; les listes chaînées ne sont qu'une version "stupide" de Lisp, et les cartes de hachage ne sont qu'une version "stupide" d'un langage de programmation Hash théorique (Hasp?).
Le fait est que nous ne voulons pas toujours écrire Hasp pour interagir avec nos cartes de hachage. C'est le problème que rencontrent toutes les langues spécifiques à un domaine - d'une part, un DSL bien implémenté est suffisamment puissant pour exprimer tout ce que le modèle sous-jacent peut faire; d'autre part, vous devez implémenter la DSL en premier lieu, puis d'autres personnes doivent l'apprendre. Cela prend du temps et des efforts qu'ils ne veulent probablement pas dépenser; après tout, je veux juste mettre des choses dans ma carte de hachage et ensuite vérifier que d'autres choses s'y trouvent, je ne veux pas apprendre toutes les subtilités de la programmation orientée hachage.
Donc, à peu près sans y penser, nous prenons ces langages de programmation théoriques très spécifiques et très intelligents et les distillons jusqu'aux quelques opérations stupides incorporées dans une structure de données. Une liste chaînée contient une petite collection de méthodes simples; une carte de hachage en a d'autres. Nous ignorons les autres opérations plus puissantes que vous pourriez potentiellement effectuer sur la structure de données (la plupart des implémentations LinkedList n'ont pas de fonction .Map ou .ForEach, par exemple, et je ne peux même pas imaginer ce que vous feriez dans Hasp), en faveur de leur implémentation explicite dans le langage de programmation parent - ce que la plupart des programmeurs vont connaître.
Les structures de données sont, pour l'essentiel, une stupide extension de leur langage parent dans l'espace du problème qu'elles représentent conceptuellement. Une extension suffisamment intelligente nécessiterait un nouveau langage de programmation spécifique, et la plupart des gens ne voudront pas l'apprendre.