Bem, parece que o cerne da afirmação é:
Uma estrutura de dados é apenas uma ... linguagem de programação
O que é bem verdade se você pensar sobre isso. Afinal, os compiladores dependem dessa transitividade o tempo todo; eles pegam uma linguagem de programação, convertem em uma estrutura de dados, fazem algumas transformações nesses dados e depois transformam o resultado em outra linguagem de programação.
De fato, se você quiser, pode até enlouquecer algo como uma estrutura de dados C, que permite escrever código C chamando seus vários métodos - por exemplo (em um tipo de C #, porque é isso que estou usando agora):
var C = novo HorribleCObject ();
Função C. <int> ("main", typeof (char [] []), typeof (int))
.Variável ("i", tipo de (int), 0)
. Enquanto ("i", Func (i) => i <10))
.Call ("printf", "% d", "i")
.PostIncrement ("i")
.EndWhile ();
Retorno (0)
.EndFunction ();
Agora, quanto à citação completa: por que algo assim seria estúpido em comparação com (digamos) a escrita em C? Deveria ser bastante óbvio que isso é detalhado e não é tão legível quanto seu equivalente em C (e, na prática, pode não suportar o escopo completo do que C pode fazer - typedefs seria complicado); portanto, essa estrutura de dados é apenas uma linguagem de programação "estúpida", incorporada a uma linguagem de programação "real". Essa mesma lógica pode ser generalizada para qualquer estrutura de dados que você possa imaginar; listas vinculadas são apenas uma versão "estúpida" do Lisp, e mapas de hash são apenas uma versão "estúpida" de alguma Linguagem de Programação Hash teórica (Hasp?).
O problema é que nem sempre queremos escrever Hasp para interagir com nossos mapas de hash. É o problema que todas as linguagens específicas de domínio têm - por um lado, uma DSL bem implementada é poderosa o suficiente para expressar tudo o que o modelo subjacente pode fazer; por outro lado, você precisa implementar o DSL em primeiro lugar e, em seguida, outras pessoas precisam aprender. Isso leva tempo e esforço que eles provavelmente não querem gastar; afinal, eu só quero colocar as coisas no meu mapa de hash e depois verificar se há outras coisas lá, não quero aprender todos os meandros da programação orientada a hash.
Portanto, praticamente sem pensar nisso, pegamos essas linguagens de programação teóricas altamente específicas e muito inteligentes e as destilamos para as poucas operações estúpidas incorporadas em uma estrutura de dados. Uma lista vinculada possui uma pequena coleção de métodos simples; um mapa de hash tem alguns outros. Ignoramos as outras operações mais poderosas que você poderia executar potencialmente sobre a estrutura de dados (a maioria das implementações do LinkedList não possui uma função .Map ou .ForEach, por exemplo, e eu nem consigo imaginar o que você faria no Hasp), a favor de implementá-los explicitamente na linguagem de programação pai - que é com a qual a maioria dos programadores se familiarizará.
As estruturas de dados são, essencialmente, uma extensão estúpida de sua língua-mãe no espaço de problemas que elas representam conceitualmente. Uma extensão suficientemente inteligente exigiria uma nova linguagem de programação específica, e a maioria das pessoas não vai querer aprender isso.