Açıklamanın kalbi şöyle:
Veri yapısı sadece ... bir programlama dilidir
Bunu düşünürseniz oldukça doğrudur. Sonuçta, derleyiciler her zaman bu geçişe güveniyor; bir programlama dili alır, bir veri yapısına dönüştürür, bu veriler üzerinde bazı dönüşümler yapar ve sonucu başka bir programlama diline dönüştürür.
Aslında, eğer bir C veri yapısı gibi deli bir şey bile yapabilirseniz, çeşitli yöntemleri çağırarak C kodu yazmanıza izin verir - örneğin (tür C #, çünkü şu anda kullandığım şey budur):
var C = yeni HorribleCObject ();
C.İşlev <int> ("ana", typeof (char [] []), typeof (int))
Değişken ("i", typeof (int), 0).
("İ", Func (i) => i <10))
Çağrı ("printf", "% d", "i").
.PostIncrement ( "I"),
.EndWhile ();
.Return (0)
.EndFunction ();
Şimdi, tam alıntıya gelince: neden böyle bir şey C'nin kendisinde yazmakla karşılaştırıldığında (aptalca)? Bunun ayrıntılı olduğu ve C'deki eşdeğeri kadar okunaklı olmadığı oldukça açık olmalıdır (ve pratikte, C'nin yapabileceklerinin tam kapsamını desteklemeyebilir - typedefs zor olacaktır); bu nedenle, bu veri yapısı sadece "gerçek" bir programlama diline gömülü bir "aptal" programlama dilidir. Aynı mantık aklınıza gelebilecek herhangi bir veri yapısı için genelleştirilebilir; bağlantılı listeler Lisp'in sadece "aptal" bir versiyonudur ve karma haritalar bazı teorik Karma Programlama Dilinin (Hasp?) sadece "aptal" bir versiyonudur.
Mesele şu ki, hash haritalarımızla etkileşim kurmak için her zaman Hasp yazmak istemiyoruz. Bu, etki alanına özgü tüm dillerin sahip olduğu sorun - bir yandan, iyi uygulanmış bir DSL, temel modelin yapabileceği her şeyi ifade edecek kadar güçlü; Öte yandan, DSL'i ilk etapta uygulamalısınız ve daha sonra diğer insanlar bunu öğrenmelidir. Muhtemelen harcamak istemedikleri zaman ve çaba gerektirir; sonuçta, sadece karma haritama bir şeyler koymak ve daha sonra başka şeylerin orada olduğunu kontrol etmek istiyorum, Karma Odaklı Programlamanın tüm inceliklerini öğrenmek istemiyorum.
Yani, hemen hemen düşünmeden, bu teorik son derece spesifik ve çok akıllı programlama dillerini alıyoruz ve bunları bir veri yapısında bulunan birkaç aptal operasyona indiriyoruz. Bağlantılı bir listede basit yöntemlerin küçük bir koleksiyonu vardır; karma haritanın başkaları da vardır. Veri yapısı üzerinde potansiyel olarak gerçekleştirebileceğiniz diğer daha güçlü işlemleri görmezden geliriz (örneğin, LinkedList uygulamalarının çoğunda .Map veya .ForEach işlevi yoktur ve Hasp'te ne yapacağınızı hayal bile edemiyorum), bunları ana programlama dilinde açıkça uygulamaktan yana - çoğu programcının aşina olacağı şey budur.
Veri yapıları, temel olarak, ana dillerinin kavramsal olarak temsil ettikleri sorun alanına aptalca bir uzantısıdır. Yeterince akıllı bir uzantı, yeni, özel bir programlama dili gerektirir ve çoğu insan bunu öğrenmek istemez.