Wydaje się, że sednem tego stwierdzenia jest:
Struktura danych to tylko ... język programowania
Co jest całkiem prawdą, jeśli się nad tym zastanowić. W końcu kompilatory cały czas polegają na tej przechodniości; biorą język programowania, przekształcają go w strukturę danych, wykonują pewne przekształcenia tych danych, a następnie przekształcają wynik w inny język programowania.
W rzeczywistości, jeśli chcesz, możesz nawet zrobić coś szalonego, na przykład strukturę danych C, która pozwala pisać kod C, wywołując jego różne metody - na przykład (w pewnym sensie C #, ponieważ właśnie tego właśnie używam):
var C = new HorribleCObject ();
C.Funkcja <int> („main”, typeof (char [] []), typeof (int))
.Variable („i”, typeof (int), 0)
.While („i”, Func (i) => i <10))
.Call („printf”, „% d”, „i”)
.PostIncrement („i”)
.EndWhile ();
. Zwrot (0)
.EndFunction ();
Co do pełnego cytatu: dlaczego coś takiego byłoby głupie w porównaniu do (powiedzmy) pisania w samym C? Powinno być całkiem oczywiste, że jest to pełne i nie tak czytelne jak jego odpowiednik w C (i w praktyce może nie obsługiwać pełnego zakresu możliwości C - typedefy byłyby trudne); stąd ta struktura danych jest po prostu „głupim” językiem programowania, osadzonym w „prawdziwym” języku programowania. Tę samą logikę można uogólnić na dowolną strukturę danych, o której myślisz; połączone listy są po prostu „głupią” wersją Lisp, a mapy skrótów są po prostu „głupią” wersją jakiegoś teoretycznego języka programowania hash (Hasp?).
Chodzi o to, że nie zawsze chcemy pisać Hasp w celu interakcji z naszymi mapami skrótów. Jest to problem wszystkich języków specyficznych dla domeny - z jednej strony dobrze zaimplementowana DSL jest wystarczająco potężna, aby wyrazić wszystko, co może zrobić podstawowy model; z drugiej strony musisz wdrożyć DSL, a następnie inni ludzie muszą się go nauczyć. To wymaga czasu i wysiłku, którego prawdopodobnie nie chcą wydać; w końcu chcę po prostu umieścić rzeczy na mojej mapie skrótów, a następnie sprawdzić, czy tam są inne rzeczy, nie chcę uczyć się wszystkich zawiłości programowania zorientowanego na skróty.
Tak więc, prawie o tym nie myśląc, bierzemy te teoretyczne, bardzo specyficzne i bardzo inteligentne języki programowania i destylujemy je do kilku głupich operacji zawartych w strukturze danych. Połączona lista ma jeden mały zbiór prostych metod; mapa hash ma kilka innych. Ignorujemy inne, bardziej wydajne operacje, które potencjalnie możesz wykonać na strukturze danych (na przykład większość implementacji LinkedList nie ma funkcji .Map ani .ForEach, a nawet nie wyobrażam sobie, co byś zrobił w Hasp), na rzecz ich wyraźnego wdrożenia w nadrzędnym języku programowania - z czym większość programistów się zapozna.
Struktury danych są w gruncie rzeczy głupim rozszerzeniem ich języka ojczystego na przestrzeń problemową, którą reprezentują koncepcyjnie. Wystarczająco inteligentne rozszerzenie wymagałoby nowego, określonego języka programowania, a większość ludzi nie będzie chciała się tego uczyć.