Що ж, здається, що серце твердження таке:
Структура даних - це просто ... мова програмування
Що цілком вірно, якщо задуматися. Адже компілятори весь час покладаються на цю транзитивність; вони беруть мову програмування, перетворюють її в структуру даних, роблять деякі перетворення на цих даних, а потім перетворюють результат на іншу мову програмування.
Насправді, якщо ви хотіли, ви навіть можете зробити щось божевільне, як структуру даних C, що дозволяє писати код C, викликаючи різні його методи - наприклад (на зразок C #, тому що це я зараз використовую):
var C = новий HorribleCObject ();
C.Function <int> ("головний", typeof (char [] []), typeof (int))
.Variable ("i", typeof (int), 0)
.Доки ("i", Func (i) => i <10))
.Call ("printf", "% d", "i")
.PostIncrement ("i")
.EndWhile ();
. Повернення (0)
.EndFunction ();
А тепер, що стосується повної цитати: чому б щось подібне було дурним порівняно з (скажімо) написанням у самій С? Це повинно бути досить очевидним, що це багатослівно і не настільки розбірливо, як його еквівалент у C (і, на практиці, може не підтримувати повний обсяг того, що може зробити C - typedefs було б хитро); отже, ця структура даних є лише "дурною" мовою програмування, вбудованою в "справжню" мову програмування. Ця ж логіка може бути узагальнена до будь-якої структури даних, про яку ви можете придумати; пов'язані списки - це лише "дурна" версія Lisp, а хеш-карти - просто "дурна" версія якоїсь теоретичної мови програмування Hash (Hasp?).
Річ у тому, що ми не завжди хочемо писати Hasp для того, щоб взаємодіяти з нашими хеш-картами. Це проблема, якою володіють усі мови , що належать до домену - з одного боку, добре реалізований DSL є достатньо потужним, щоб виразити все, що лежить в основі основної моделі; з іншого боку, вам потрібно реалізувати DSL, в першу чергу, а потім інші люди повинні це навчитися. Для цього потрібен час і сили, які вони, мабуть, не хочуть витрачати; врешті-решт, я просто хочу помістити речі в свою хеш-карту, а потім перевірити, чи є там інші речі, я не хочу вивчати всі тонкощі орієнтованого на хеш програмування.
Тож, майже не замислюючись над цим, ми беремо ці теоретичні високоспецифічні та дуже розумні мови програмування та відганяємо їх до кількох дурних операцій, втілених у структурі даних. Зв'язаний список має одну невелику колекцію простих методів; на хеш-карті є деякі інші. Ми ігноруємо інші, більш потужні операції, які ви потенційно могли б виконувати над структурою даних (наприклад, більшість реалізацій LinkedList не мають. на користь чіткої їх реалізації на батьківській мові програмування - з чим збираються ознайомитися більшість програмістів.
Структури даних - це, по суті, нерозумне поширення їхньої батьківської мови на проблемний простір, який вони концептуально представляють. Для досить розумного розширення потрібна нова, конкретна мова програмування, і більшість людей не хочуть цього вивчати.