Assembly dili kullanmaktan nefret ediyorum, çünkü bazılarımı os kursumda yazdım. Fakat açıkçası, meclis dili soyutlamadan yoksundur, ayrıntılara daha fazla dikkat etmek zorundasınız.
TAOCP yazmak için assembly dili gerçekten gerekli mi?
Assembly dili kullanmaktan nefret ediyorum, çünkü bazılarımı os kursumda yazdım. Fakat açıkçası, meclis dili soyutlamadan yoksundur, ayrıntılara daha fazla dikkat etmek zorundasınız.
TAOCP yazmak için assembly dili gerçekten gerekli mi?
Yanıtlar:
Yalnızca MIX için bir montaj dili olan MIXAL'ı değil, aynı zamanda basit bir bilgisayar için (altmışlarda kullanılan bir model) MIX'i kullanır. Bu, bir dereceye kadar, alanındaki gelişimden bağımsız olduğu öğretimi için bir modeldir.
Başka bir programlama dili kullanmış olsaydı (hangisinin bu arada uygun olacağını düşünürdünüz?), NPL (şık programlama dili), MIX kullanma fikrinden vazgeçmek veya bir bazı bilgisayar dili seçiminin derleyicisi (Cilt 1’de uğraştığından çok daha karmaşık bir şey). Bu şekilde TAOCP değil TAONPLP olacaktı. Birincisi, böyle bir seçimden bağımsızdır ve bu nedenle, programlama hakkında birkaç kitap hiç olmayacak şekilde zamansızdır. İkincisi muhtemelen şimdiye kadar unutulur ...
Ayrıca, bilgisayarlar ilke olarak MIX'in yaptığı gibi çalıştığı sürece, onlarla nasıl çalışılacağını öğrenmekle ilgileniyorsanız, bunu dikkate almak iyi bir şeydir.
Siz genç kırbaçlayanlar bazen beni şaşırtıyor. Hepinizin okula başlamadan önce bir şey olduğu hakkında hiçbir fikriniz yok. (Aynı sorunu yaşıyorum. Yetişkin bir bakış açısından 15 yılın çok kısa bir süre olduğunu kavramam uzun zaman aldı. Hiroşima'dan Küba Füze Krizi'ne kadar bu kabaca bu oldu. Bana göre, II. Dünya Savaşı sadece tarih, ama babam bununla savaştı ve annem bu sırada ortaokuldaydı.)
TAOCP, cilt. 1, "Temel Algoritmalar", 1. baskı, ilk olarak 1968'de basıldı. Bu, 45 yıl önce. Knuth, daha önce seriyi planlamaya başladı.
Başvuru için: Intel 8086 ilk on yıl sonra 1978'de ortaya çıktı. PASCAL dili ilk 1971 yılında ortaya çıktı; Jensen & Wirth kitabı, dilin ikinci versiyonu hakkında, 1974'te çıktı. C'nin ilk gelişimi 1969-1973 idi: K&R, 1978'de yayınlandı.
Knuth, seriyi alanı kaplamayı hedefliyordu. THEN stilini, THEN uygulayıcıları için faydalı olacak şekilde belirledi. Bu dizinin kelimenin tam anlamıyla hayatının çalışması ya da nihayet bittiğinde yarım asırdan daha iyi olacak olanı kapsaması için yazılmasını beklemiyordu.
Assembly dili, bugün olduğu kadar tartışmasız kritik değil, fakat hala Java / C ++ / Javascript / Python / Perl mavens'in hepinizin inanmasını isteyeceğinden çok daha önemlidir.
Şimdi HUKAYIMI GET!
Knuth, akıl yürütmesini Önsöz'de tartışıyor. Birkaç parça ve parçadan alıntı yapacağım:
... ALGOL veya FORTRAN gibi bir cebirsel dil kullanıp kullanmamaya ya da bu amaçla makine odaklı bir dil kullanmaya karar vermem gerekiyordu. Belki de bugünün bilgisayar uzmanlarının çoğu, makine odaklı bir dil kullanma kararıma katılmıyorum, ancak aşağıdaki nedenlerden dolayı kesinlikle doğru seçim olduğuna ikna oldum:
- Cebirsel diller, burada ele alınan sayısal olmayan problemlerden daha çok sayısal problemlere daha uygundur. [...]
- ... Makine odaklı bir dilde yazarak, programcı çok daha verimli bir yöntem kullanma eğiliminde olacaktır; gerçekliğe çok daha yakın.
- İhtiyacımız olan programlar, birkaç istisna dışında, hepsi oldukça kısa ...
- Bilgisayarlarla raslantıya ilgi duymaktan daha fazla ilgilenen bir kişi makine dilinde iyi bir şekilde okutulmalı ...
- Bazı makine dili yine de gerekli olacak ...
Doğrudan işaret etmese de, ALGOL ve FORTRAN'dan bahsetmesinin, daha da önemli olabilecek bir başka sorunu işaret ettiğini düşünüyorum. Algol'u seçtiğini varsayalım (sayısal olmayan programlara zaten Fortran'dan daha uygun). Algol'un muhtemelen daha da fazla olacağını söylerdim bugünün programcılarının çoğunda seçtiği meclis diline göre yabancı .
Üçüncü baskı için, MIX'i modern işlemcilerle daha yakından uyması için yeniden tasarladı ve kodunu yeniden yazmak zorunda kaldı. Bununla birlikte, daha yüksek bir dil kullanmış olsaydı, yeniden yazma büyük ölçüde daha büyük olurdu - ve verdiği bütün sebepler de aynı kalacaktı.
Knuth gerekçesini de güncelledi :
Neden bir makine dili var?
Pek çok okuyucu şüphesiz, '`Knuth neden sadece üst seviye bir programlama diline bağlı kalmak yerine MIX'i başka bir makine ile değiştiriyor? Bugünlerde hiç kimse montajcı kullanıyor. ''
Bu tür insanlar fikirlerini almaya hak kazanırlar ve kitaplarımın makine dili bölümlerini okumayı zorlamazlar. Ancak, önsözde 1960'ların başında yazılan Cilt 1'e verdiğim makine dilinin nedenleri bugün geçerli:
- Kitaplarımın ana amaçlarından biri, üst yapıların makinelerde gerçekte nasıl uygulandığını göstermek değil, sadece nasıl uygulandığını göstermek. Coroutine bağlantıyı, ağaç yapılarını, rasgele sayı üretme, yüksek hassasiyetli aritmetik, radix dönüşümü, verilerin paketlenmesi, kombinasyonel arama, özyineleme vb.
- Kitaplarımda ihtiyaç duyduğum programlar genellikle o kadar kısadır ki ana noktaları kolayca anlaşılabilir.
- Bilgisayarlarla raslantıya ilgi duymaktan daha fazla ilgi çeken insanlar, en azından temel donanımın neye benzediği hakkında fikir sahibi olmalıdır. Aksi takdirde yazdıkları programlar oldukça garip olacaktır.
- Her durumda, açıkladığım yazılım programlarının çıktısı olarak makine dili gereklidir.
- Makine dilinde sıralama ve arama algoritmaları gibi temel yöntemlerin ifade edilmesi, önbellek ve RAM boyutunun ve diğer donanım özelliklerinin (bellek hızı, boru hatları, çok sayıdaki sorun, bakıcı tamponlar, önbellek bloklarının boyutu, vb.) farklı şemaları karşılaştırırken.
Dahası, eğer yüksek seviyeli bir dil kullansaydım, hangi dil olmalı? 1960'larda muhtemelen Algol K; 1970'lerde, kitaplarımı Pascal kullanarak yeniden yazmak zorunda kalırdım; 1980'lerde kesinlikle her şeyi C olarak değiştirirdim; 1990'larda, C ++ 'a ve sonra muhtemelen Java' ya geçmek zorunda kalırdım. 2000'lerde, başka bir dil şüphesiz de katı olacaktır. Dilleri modaya uygun girip çıktıkça kitaplarımı yeniden yazma zamanı gelemez; diller benim kitaplarımın noktası değil, asıl mesele en sevdiğiniz dilde yapabilecekleriniz. Kitaplarım zamansız gerçeklere odaklanıyor.
Bu nedenle İngilizce'yi TAOCP'de üst seviye dil olarak kullanmaya devam edeceğim ve makinelerin gerçekte nasıl hesapladıklarını belirtmek için düşük seviyeli bir dil kullanmaya devam edeceğim. Sadece bir eklentiyle paketlenmiş algoritmaları görmek isteyen, modaya uygun bir dil kullanan okuyucular başkalarının kitaplarını almalıdır.
İyi haber şu ki, RISC makineleri için programlama, RISC makinesi hoş bir tasarıma sahip olduğunda hoş ve basittir. Bu yüzden, ana noktalardan uzaklaştıran, gizli ve küçük detaylara dikkat etmem gerekmiyor. Bu bağlamda, MMIX, MIX'ten önemli ölçüde daha iyi olacaktır.