Chà, có vẻ như trung tâm của tuyên bố là:
Cấu trúc dữ liệu chỉ là một ... ngôn ngữ lập trình
Điều này khá đúng nếu bạn nghĩ về nó. Rốt cuộc, trình biên dịch dựa vào tính siêu việt này mọi lúc; họ lấy ngôn ngữ lập trình, chuyển đổi nó thành cấu trúc dữ liệu, thực hiện một số biến đổi trên dữ liệu đó và sau đó biến kết quả thành ngôn ngữ lập trình khác.
Trên thực tế, nếu bạn muốn, bạn thậm chí có thể tạo ra thứ gì đó điên rồ như cấu trúc dữ liệu C, cho phép bạn viết mã C bằng cách gọi các phương thức khác nhau của nó - ví dụ (trong loại C #, vì đó là những gì tôi đang sử dụng ngay bây giờ):
var C = new Hor khiếpCObject ();
C.Chức năng <int> ("chính", typeof (char [] []), typeof (int))
.Variable ("i", typeof (int), 0)
.While ("i", Func (i) => i <10))
.Call ("printf", "% d", "i")
.PostIncrement ("i")
.EndWhile ();
. Trả về (0)
.EndFactor ();
Bây giờ, như trích dẫn đầy đủ: tại sao một cái gì đó như thế lại ngu ngốc so với (nói) viết bằng chính C? Một điều khá rõ ràng là đây là dài dòng và không dễ đọc như tương đương với C (và, trong thực tế, có thể không hỗ trợ toàn bộ phạm vi của những gì C có thể làm - typedefs sẽ khó khăn); do đó, cấu trúc dữ liệu này chỉ là một ngôn ngữ lập trình "ngu ngốc", được nhúng trong một ngôn ngữ lập trình "thực". Logic tương tự có thể được khái quát cho bất kỳ cấu trúc dữ liệu nào bạn có thể nghĩ đến; danh sách được liên kết chỉ là phiên bản "ngu ngốc" của Lisp và bản đồ băm chỉ là phiên bản "ngu ngốc" của một số Ngôn ngữ lập trình Hash lý thuyết (Hasp?).
Mặc dù vậy, vấn đề là chúng ta không luôn muốn viết Hasp để tương tác với các bản đồ băm của mình. Đó là vấn đề mà tất cả các ngôn ngữ cụ thể của miền đều có - một mặt, DSL được triển khai tốt đủ mạnh để thể hiện mọi thứ mà mô hình cơ bản có thể làm; mặt khác, bạn phải triển khai DSL ngay từ đầu và sau đó những người khác phải học nó. Điều đó làm mất thời gian và công sức mà có lẽ họ không muốn bỏ ra; Rốt cuộc, tôi chỉ muốn đặt mọi thứ vào bản đồ băm của mình và sau đó kiểm tra những thứ khác có trong đó, tôi không muốn tìm hiểu tất cả những điều phức tạp của Lập trình định hướng Hash.
Vì vậy, gần như không nghĩ về nó, chúng tôi sử dụng các ngôn ngữ lập trình rất thông minh và rất cụ thể về mặt lý thuyết này và chắt lọc chúng thành một số ít, các hoạt động ngu ngốc được thể hiện trong cấu trúc dữ liệu. Một danh sách liên kết có một bộ sưu tập nhỏ các phương thức đơn giản; một bản đồ băm có một số người khác. Chúng tôi bỏ qua các hoạt động mạnh mẽ khác mà bạn có thể thực hiện trên cấu trúc dữ liệu (hầu hết các triển khai LinkedList không có chức năng .Map hoặc .ororach, và tôi thậm chí không thể tưởng tượng bạn sẽ làm gì trong Hasp), ủng hộ việc thực hiện chúng một cách rõ ràng bằng ngôn ngữ lập trình cha mẹ - đó là điều mà hầu hết các lập trình viên sẽ quen thuộc.
Các cấu trúc dữ liệu về cơ bản là một phần mở rộng ngu ngốc của ngôn ngữ gốc của chúng vào không gian vấn đề mà chúng đại diện về mặt khái niệm. Một tiện ích mở rộng đủ thông minh sẽ yêu cầu ngôn ngữ lập trình mới, cụ thể và hầu hết mọi người sẽ không muốn học điều đó.