un

guest
1 / ?
back to lessons

Mutlak İkide Programlama

İlk programcılar mutlak ikide yazıyorlardı: her talimat ve her adres doğrudan ikili sifreler olarak. Bir talimat 01100101 00001010 gibi görünebilir - ikili kod ve bellek adresi.

Spaghetti Kod Sorunu

Bir hata durumunda yeni bir talimat ekleme, programcıların bir soruna düştü. Yerine yerleştirme, her bir sonraki talimat adresini bir kaydırarak - tüm programdaki adres referanslarını güncellemek zorunda kalmalarına neden oldu. Felaket.

Çözüm: Ekleme noktası hemen önce olan talimati boş bellek bir atlama ile değiştirmek. Bu boş alanda: Değiştirilen talimatı yazın, yeni talimatlara ekleyin ve ardından geri atlayın. Hataların ortaya çıkması durumunda, düzeltmeleri yineleyin ve diğer boş bellek alanları kullanarak aynı trik uygulayın.

Sonuç: Programın yürütme yolunu, görünüşe göre rastgele yerlere atladı. Hamming bu durumu 'bir spagetti kavanozu' olarak adlandırdı. Kontrol akışı, kağıt üzerinde çizildiğinde, tam olarak tıralı spagetti gibi görünüyordu.

Kaçış Yolları

İki hemen iyileşme: oktal notasyon (ikili sifreleri 3'lü gruplarda) ve onaltılı (4'lü gruplar, 9'dan fazla değer için A-F kullanılır). Bu, yazma hatalarını azaltmasına rağmen, temel adres sorununu çözmeye yetmedi.

Sembolik asamblye (ör. IBM'nin SAP - Sembolik Asamblye Programı - ve SOAP - Sembolik Optimize Asamblye Programı, IBM 650 üzerinde) programcıların ikili yerine talimat adlarını (ADD, MOVE) ve sembolik adres etiketlerini yazmalarına izin verdi. Assembler, girişte ikiliye çeviri sağladı ve adres atamalarını otomatik olarak yönetti.

SOAP ayrıca bir optimizasyon gerçekleştirdi: Drum üzerinde talimatlara düzenleme sağladı - okuma başlığından önce, önceki talimat tamamlanırken, bir sonraki talimat dövme başlığından geldi - minimum gecikme süresi kodlama. SOAP, kendisini bile derdi: Veri olarak A olarak işleme, B'yi oluşturacak ve B'yi A üzerinde çalıştırarak, özelleştirme ile ne kadar iyileşme sağladığını ölçecek.

Çözümleme Ağacı & Dil Sınıflandırması

Kütüphaneler ve Yer Değiştirilebilir Kod

Hamming, Hamming notu ederek, yeniden kullanılabilir yazılımın (matematik kütüphaneleri) fikrinin çok erken ortaya çıktığını belirtti - Babbage bunu kavramıştı. Sorun: Tam adresli bir kütüphane, her zaman aynı bellek konumlarını işgal etmek zorunda olan her düzenlemede gerekiyordu. Kütüphane'nin büyümesi çok büyük olduğunda, programlar aynı adresleri için rekabet etti.

Çözüm: Yerel değiştirilebilir kod. Asembler, mutlak adresler yerine, bir base adresinden bir offset olan bellek adreslerini referans gösteren talimatlar oluşturur. Bir bağlayıcı, yüklenme zamanında son adresleri çözümler.

Von Neumann'ın yayımlanmamış raporları (geniş olarak dağıtılıyordu), gerekli programlama triklerini açıkladı. İlk yayınlanan programlama kitabı (Wilkes, Wheeler & Gill, EDSAC, 1951), bu teknikleri kodluyor ve belgeliyordu.

Mutlak adresli kütüphaneler neden ölçeklenebilirlik sorununa yol açtı ve nasıl çözüldü? Mutlak adreslerin neden kesiştiği ve 'yer değiştirilebilir' teriminin teknik olarak ne anlama geldiği açıklanmalıdır.

Dil Tasarım Ayrımı

FORTRAN (1957, IBM) ve ALGOL (1958, uluslararası komite) iki tasarım felsefesini temsil ediyor ve bu, büyük ölçüde farklı sonuçlar üretti.

FORTRAN

John Backus, FORTRAN (FORmula TRANslation) projesini IBM'de yönetti. Tasarım hedefi: bilim adamları ve mühendisler için dilin kolay kullanılabilir olmasını sağlamaktı. FORTRAN, kullanıcılarına doğal gelen matematik notasyonu kabul etti: A = B + C * D yerine ADD B, C; STORE T; MULTIPLY T, D; STORE A.

FORTRAN 60 yılı aşkın süreyle hayatta kaldı. Bilimsel hesaplamalar, sıvı dinamiği, iklim modellenmesi ve hesaplamalı fizik alanlarında aktif olarak kullanılmaya devam etmektedir. Hamming, bu dayanıklılığı başarılı bir tasarım kanıtı olarak nitelendirdi.

ALGOL

ALGOL (ALGOrithmic Language), logisyenler ve bilgisayar bilimcileri tarafından bir komite tarafından oluşturuldu ve matematiksel kesinlik ve resmi bir şekilde tanımlanabilir bir dil olarak tasarlandı: mantıklı bir temizlik ve formel bir dil olarak. Gramerleri belirtmek için Backus-Naur Formu (BNF) notasyonu ALGOL'a uygulandı.

ALGOL pratiğe uygundu. Büyük bir etkisi olan sonraki dil tasarımı üzerinde (Pascal, C ve neredeyse her modern dil ALGOL'ün dil bilgisi kavramlarından türemiştir) rağmen, ALGOL kendisi yaygın olarak kullanılmadı. Hamming'in kararı: mantıklı olarak tasarlanmış, insanca kullanılamamış.

Dillerin İriğesi

Hamming, makinelerin dilinden, assembly'ye, daha yüksek seviyeli dillere ve sonunda uygulamaya yakın bir dil olan 'sorun odaklı dil'e kadar doğal bir hiyerarşi tanımladı. Her seviye, makineler verimliliği için insan okunabilirliği ekler.

Hamming'in Dilde Tasarım Kriterleri

Hamming, FORTRAN'ın ALGOL'den öğrendiği dersi dört kriter olarak programlama dilleri için başarılı olma ölçütü olarak ifade etti:

1. Hızla üretken hale gelmek kolay — yeni başlayanlar kısa sürede verimlilik sağlar

2. Kullanmak kolay — rutin görevler az törenle gerçekleştirilir

3. Hata ayıklamak kolay — hatalar anlamlı ve bulunabilir mesajlar üretir

4. Alt modülleri kullanmak kolay — yeniden kullanım ve soyutlama büyük bir çaba gerektirmeden yapılır

O ayrıca yapısal bir gözlem ekledi: insan dili %60 oranında gereksizlik taşır; yazılı dil %40 oranında gereksizlik taşır. Az gereksizlikli diller (gibi APL) uzmanlar için ince çizgiler içeren şık birleçeler üretir ve başlangıçta karanlık olan ve tek bir karakterin anlamını değiştirdiğinde görünür hatalar içerir.

İpucu: mantıklı güzellik için tasarlanmış bir dil, yanlış okuyan okuyucuya optimize edilir. Programcı insan; insanlar hataları yakalamak ve niyeti iletişim kurmak için gereksizlik gerektirir.

Hamming'in dört kriterini, iyi bildiğiniz bir programlama diline uygulayın. Her kriteri 1-5 (5=üstad) puanlayın. Ardından, dilin en çok hangi kriterin güçlendirilmesi gerektiği üzerinde durun ve ne tür bir değişiklik görüntüsüne sahip olduğunu açıklayın.

Psikolojik vs. Mantıksal Dil Tasarımı

Hamming, FORTRAN/ALGOL karşılaştırmasını kurumsal ve insan dinamiklerinin değil, sadece dil tasarımı hakkında bir ders olarak geri döndü.

FORTRAN, psikolojik olarak — onu kullanan insanları, özellikle matematiksel nota düşünen bilim insanlarını dikkate alarak tasarlandı. ALGOL, mantıksal olarak — teorik güzellik ve kuramsal düzgünlik için tasarlandı.

Hamming tanımladığı paradoks: mantıksal olarak doğru bir dil, insanlar tarafından direnilir ve başarısız olur; insanların kabul ettiği, mantıksal olarak daha karmaşık olsa bile başarılı olur ve yaygın olarak kullanılır.

O, APL'yi örnek olarak gösterdi: mantıksal olarak güzel, tek satırlı ifade edilebilir, kendi özel karakter setine sahip. Uzmanlar onu seviyordu. Normal programcılar onu okunamaz buluyordu. Bir karakter değişikliği, programın anlamını sessizce değiştirebilirdi. APL, az sayıda bağlı topluluk ve neredeyse sıfır ana akım kullanımına sahip.

İnsan gereklilik argumenti: konuşma dili %60 oranında gereksiz (tekrar eden bağlam, açıklama kelimeleri, öngörülebilir yapı). Yazılı dil %40 oranında gereksiz. Bu gereksizlik, hataları tespit etmek için evrimleşti — insanlar güvensizdir, bu nedenle dil, hataları tespit ve düzeltmek için yeterli tekrarlanan bilgi taşıdı. Düşük gereksizlik dili, bu güvenlik ağını kaldırır.

Derleyici İrişimi

Hamming, derleyici/uygulator katmanını anlattı: bir program, daha yüksek seviyeli bir dili okuyup onu daha düşük seviyeli birine çevirebilir. Bu katmanları sırala - her birini bir seviye aşağıya çevirir. En üstte: bir alan özel dili, bir alanda (biyoloji, finans, fizik) uzmanlar tarafından doğal olarak yazılan. En altında: makine kodu. Her geçiş, bir derleyici veya uygulatordur.

Dil Yaşam Süresi Tahmini

1993 yılına kadar Hamming, birçok dili görmüştü. FORTRAN (1957) hayatta kalmıştı. ALGOL (1958) başarısız olmuştu. COBOL (1959) decades in business computing'de hayatta kalmıştı. LISP (1958) AI research'de hayatta kalmıştı. PL/I (1964) her şeyi birleştirmeye çalışmış ve başarısız olmuştu.

Hamming'nin psikolojik tasarım karşıtı mantıklı tasarım ayrımını ve dört kriterini kullanarak, bildiğiniz bir dilin neden yaşadığına ve birinin başarısız olduğu (veya başarısız olduğunu) açıklayın. Açıklamanız, teknik özelliklerden ziyade, dili benimseten veya reddeden özel insan faktörlerini tanımlamalıdır.

Tekrar Eden Örüntü

Hamming'nin yazılım tarihi bölümü, tekrar eden bir yapı içerir:

1. Bir acılı sınırlama mevcuttur (tam adresler, ikili nota...

2. Birisi bir soyutlama katmanı icat eder ve sınırlılığı gizler

3. Soyutlama, yeni ölçek sağlar ve bu yeni acılı sınırlamalar yaratır

4. Tekrar et

Binary → oktal/hexadecimal → sembolik makine dili → FORTRAN → yapılandırılmış programlama → nesne yönelimli diller → alan özelindeki diller. Her katman, önceki katmanın en şiddetli acısını çözerken, yeni bir sorun sınıfı tanıtır.

Spagetti kodu sorunu (tam adresler) sembolik makine diline yol açtı. Büyük makine programları FORTRAN'a yol açtı. Büyük FORTRAN programları yapılandırılmış programlamaya ve ardından nesne yönelimliliğe yol açtı. Hamming'in dersi bu daha sonraki geçişlere kadar devam etmedi, ancak desen devam etti.

Mühendisler için dersi: her zaman önceki abstraksiyonun ortaya çıkardığı acıyı çözmeye çalışıyorsunuz. Şu anda olduğunuz katmanı anlamak için, altında olduğunu bildiğiniz katmanın neden var olduğunu bilmek gerekir.

Sıklıkla çalıştığınız bir yazılım soyutlama katmanını tanımlayın. Alt katmanda olan acılı bir sınırlamanın ne olduğunu gizler ve şu anki katmanınızın sunduğu yeni bir sorun sınıfı nedir - üst katmanın çözmesi gereken ne tür bir ağrı olacak?