Ну, похоже, суть заявления такова:
Структура данных - это просто ... язык программирования
Что довольно верно, если вы думаете об этом. В конце концов, компиляторы все время полагаются на эту транзитивность; они берут язык программирования, преобразуют его в структуру данных, выполняют некоторые преобразования этих данных, а затем превращают результат в другой язык программирования.
На самом деле, если бы вы захотели, вы могли бы даже создать что-то сумасшедшее, например структуру данных C, которая позволит вам писать код на C, вызывая его различные методы - например (в некотором роде C #, потому что это то, что я сейчас использую):
var C = новый 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 ( "я")
.EndWhile ();
Возвращенная (0)
.EndFunction ();
Теперь, что касается полной цитаты: почему что-то подобное было бы глупо по сравнению с (скажем) написанием на самом C? Должно быть совершенно очевидно, что это многословно и далеко не так разборчиво, как его эквивалент в C (и на практике может не поддерживать весь объем возможностей C - typedefs будет непросто); следовательно, эта структура данных является просто «глупым» языком программирования, встроенным в «настоящий» язык программирования. Та же самая логика может быть обобщена для любой структуры данных, о которой вы только можете подумать; связанные списки - это просто «глупая» версия Lisp, а хэш-карты - это просто «глупая» версия некоторого теоретического языка хэш-программирования (Hasp?).
Дело в том, что мы не всегда хотим писать Hasp для взаимодействия с нашими хэш-картами. Это проблема всех доменных языков - с одной стороны, хорошо реализованный DSL достаточно мощный, чтобы выразить все, что может сделать базовая модель; с другой стороны, вы должны сначала внедрить DSL, а затем другие люди должны изучить его. Это требует времени и усилий, которые они, вероятно, не хотят тратить; в конце концов, я просто хочу поместить вещи в мою хэш-карту и затем проверить, есть ли там другие вещи, я не хочу изучать все тонкости хэш-ориентированного программирования.
Итак, почти не задумываясь об этом, мы берем эти теоретически очень специфичные и очень умные языки программирования и подгоняем их к нескольким глупым операциям, воплощенным в структуре данных. Связанный список имеет одну небольшую коллекцию простых методов; хэш-карта имеет некоторые другие. Мы игнорируем другие, более мощные операции, которые вы могли бы потенциально выполнить над структурой данных (большинство реализаций LinkedList, например, не имеют функции .Map или .ForEach, и я даже не представляю, что вы будете делать в Hasp), в пользу их явной реализации на родительском языке программирования - с этим большинство программистов знакомо.
Структуры данных, по сути, являются глупым расширением их родительского языка в проблемное пространство, которое они концептуально представляют. Достаточно умное расширение потребовало бы нового, специфического языка программирования, и большинство людей не хотят изучать это.