Bene, sembra che il cuore della frase sia:
Una struttura di dati è solo un ... linguaggio di programmazione
Il che è abbastanza vero se ci pensi. Dopotutto, i compilatori si affidano sempre a questa transitività; prendono un linguaggio di programmazione, lo convertono in una struttura di dati, fanno alcune trasformazioni su quei dati e poi trasformano il risultato in un altro linguaggio di programmazione.
In effetti, se lo volessi, potresti persino far impazzire qualcosa come una struttura di dati C, che ti consente di scrivere il codice C chiamando i suoi vari metodi - ad esempio (in genere 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é qualcosa del genere dovrebbe essere stupido rispetto a (diciamo) scrivere in C stesso? Dovrebbe essere abbastanza ovvio che questo è dettagliato e non così leggibile come il suo equivalente in C (e, in pratica, potrebbe non supportare l'intera portata di ciò che C può fare - i typedef sarebbero difficili); quindi, questa struttura di dati è solo uno "stupido" linguaggio di programmazione, incorporato in un "vero" linguaggio di programmazione. Quella stessa logica può essere generalizzata a qualsiasi struttura di dati ti venga in mente; le liste collegate sono solo una versione "stupida" di Lisp, e le mappe hash sono solo una versione "stupida" di alcuni teorici Hash Programming Language (Hasp?).
Il fatto è, tuttavia, che non vogliamo sempre scrivere Hasp per interagire con le nostre mappe hash. È il problema che hanno tutte le lingue specifiche del dominio : da un lato, un DSL ben implementato è abbastanza potente da esprimere tutto ciò che il modello sottostante può fare; d'altra parte, devi implementare il DSL in primo luogo, e poi altre persone devono impararlo. Ciò richiede tempo e sforzi che probabilmente non vogliono spendere; dopo tutto, voglio solo mettere le cose nella mia mappa hash e poi controllare che ci siano altre cose lì dentro, non voglio imparare tutte le complessità della programmazione orientata all'hash.
Quindi, praticamente senza pensarci, prendiamo questi linguaggi di programmazione teorici altamente specifici e molto intelligenti e li distilliamo nelle poche, stupide operazioni incorporate in una struttura di dati. Un elenco collegato ha una piccola raccolta di metodi semplici; una mappa hash ne ha altre. Ignoriamo le altre operazioni più potenti che potresti potenzialmente eseguire sulla struttura dei dati (la maggior parte delle implementazioni di LinkedList non hanno una funzione .Map o .ForEach, per esempio, e non riesco nemmeno a immaginare cosa faresti in Hasp), a favore di implementarli esplicitamente nel linguaggio di programmazione principale, che è ciò con cui la maggior parte dei programmatori avrà familiarità.
Le strutture di dati sono essenzialmente una stupida estensione della loro lingua madre nello spazio problematico che rappresentano concettualmente. Un'estensione sufficientemente intelligente richiederebbe un nuovo linguaggio di programmazione specifico e la maggior parte delle persone non vorrà impararlo.