Bene, sembra che il cuore dell'affermazione sia:
A data structure is just a ... programming language
Il che è del tutto vero se ci pensi. Dopo tutto, i compilatori fanno affidamento su questa transitività tutto il tempo; prendono un linguaggio di programmazione, lo convertono in una struttura dati, eseguono alcune trasformazioni su quei dati e quindi trasformano il risultato in un altro linguaggio di programmazione.
In effetti, se volessi, potresti persino creare qualcosa di pazzo come una struttura dati C, che ti permette di scrivere codice C chiamando i suoi vari metodi - per esempio (in kinda C #, perché è quello che sto usando in questo momento ):
var C = new HorribleCObject();
C.Function<int>("main", typeof(char[][]), typeof(int))
.Variable("i", typeof(int), 0)
.While("i", Func(i) => i < 10))
.Call("printf", "%d", "i")
.PostIncrement("i")
.EndWhile();
.Return(0)
.EndFunction();
Ora, per quanto riguarda la citazione completa: perché una cosa del genere sarebbe stupida rispetto a (diciamo) scrivendo in C? Dovrebbe essere abbastanza ovvio che questo è prolisso e non quasi leggibile quanto il suo equivalente in C (e, in pratica, potrebbe non supportare l'intero ambito di ciò che C può fare - typedefs sarebbe difficile); quindi, questa struttura dati è solo un linguaggio di programmazione "stupido", incorporato in un linguaggio di programmazione "reale". Quella stessa logica può essere generalizzata a qualsiasi struttura di dati che si possa pensare; le liste concatenate sono solo una versione "stupida" di Lisp e le mappe di hash sono solo una versione "stupida" di alcuni Hash Programming Language (Hasp?) teorici.
Il fatto è, tuttavia, che non vogliamo sempre scrivere Hasp per interagire con le nostre mappe di hash. È il problema che tutti i lingue specifiche del dominio hanno - da un lato, un DSL ben implementato è abbastanza potente da esprimere tutto il il modello sottostante può fare; d'altra parte, devi implementare il DSL in primo luogo e poi le altre persone devono impararlo. Ciò richiede tempo e fatica che probabilmente non vogliono spendere; dopotutto, voglio solo mettere le cose nella mia mappa di hash e poi controllare che ci siano altre cose lì dentro, non voglio imparare tutte le complessità di Hash Oriented Programming.
Quindi, praticamente senza pensarci, prendiamo questi linguaggi di programmazione teorici altamente specifici e molto intelligenti e li distilliamo nelle poche e stupide operazioni incorporate in una struttura dati. Una lista collegata ha una piccola raccolta di metodi semplici; una mappa hash ne ha altre. Ignoriamo le altre operazioni più potenti che potreste potenzialmente eseguire sulla struttura dei dati (la maggior parte delle implementazioni di LinkedList non ha una funzione .Map o .ForEach, ad esempio, e non riesco nemmeno a immaginare cosa fareste in Hasp), a favore di implementarle esplicitamente nel linguaggio di programmazione principale, che è ciò che la maggior parte dei programmatori avrà familiarità con.
Le strutture dati sono, in sostanza, un'estensione stupida del loro linguaggio genitore nello spazio del problema che rappresentano concettualmente. Un'estensione sufficientemente intelligente richiederebbe un nuovo linguaggio di programmazione specifico e molte persone non vorranno apprenderlo.