English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

konuk
1 / ?
derslere geri dön

Mutlak İkili Kodda Programlama

İlk programcılar mutlak ikili kodda yazardı: her talimat ve her adres ham ikili rakamlarla. Tek bir talimat 01100101 00001010 gibi görünebilirdi — talimat kodu ve bellek adresi ikili kodda.

Spagetti Kod Sorunu

Bir hata bir yeni talimat eklemeyi gerektirdiğinde, programcılar bir ikilemle karşı karşıya kaldı. Yerinde ekleme, sonraki her talimat adresinin bir kaydırılması anlamına geliyordu — programcı tüm programdaki her adres referansını güncellemeyi gerektirir. Felaket.

Çözüm: ekleme noktasından hemen önceki talimatı boş belleğe bir atlama ile değiştir. O boş konumda: üzerine yazılan talimatı yaz, yeni talimatları ekle, sonra geri atla. Hatalar düzeltmelerde ortaya çıktığında, başka boş bellek kullanarak aynı hileleri uygula.

Sonuç: programdaki yürütme yolu görünüşte rastgele konumlara atladı. Hamming buna 'spagetti tenekesi' dedi. Kontrol akış yolu, kâğıda çizildiğinde, tam olarak karmaşık spagetti gibi görünüyordu.

Kaçış Yolları

İki acil gelişme: sekizli gösterim (ikili rakamları üçlü setlerde gruplandır) ve onaltılı (dörde gruplandır, 9'un üzerindeki değerler için A–F kullan). Bunlar yazma hatalarını azalttı ancak temel adres sorununu çözmedi.

Sembolik assemblye (örneğin IBM'in SAP — Sembolik Montaj Programı ve SOAP — Sembolik Optimizasyon Montaj Programı IBM 650'de) programcılara talimat adları (ADD, MOVE) ve sembolik adres etiketleri yerine ikili yazmasına izin verdi. Assembler, giriş zamanında ikiliye tercüme etti ve adres atamalarını otomatik olarak yönetti.

SOAP, ek bir optimizasyon gerçekleştirdi: talimatları dönen tamburda düzenleyerek bir sonraki talimat öncekinin tamamlanması ile okuma kafasında gelmesini sağladı — minimum gecikme kodlaması. SOAP hatta kendini derledi: A programı B üretmek için veri olarak işlendi, B'yi ölçmek için A'da çalıştırıldı & öz derlemenin ne kadar iyileştirdiği.

Parse Tree & Language Hierarchy

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

Hamming, yeniden kullanılabilir yazılım fikrinin (matematiksel kütüphaneler) çok erken geldiğini belirtti — Babbage bunu tasarlamıştı. Sorun: mutlak adres kütüphanesi, her kullanıldığında her rutini aynı bellek konumlarını işgal etmesini gerektirdi. Toplam kütüphane büyüdükçe, programlar aynı adresler için rekabet ettiler.

Çözüm: yer değiştirilebilir kod. Assembler, mutlak adresler yerine belleğe göreceli olarak başvuran talimatlar oluşturur — bir temel adresinden uzaklıklar. Bir bağlayıcı, yükleme zamanında nihai adresleri çözer.

Von Neumann'ın yayınlanmamış raporları (geniş çapta dolaştırılan) gerekli programlama hilelerini açıklamıştı. İlk yayınlanan programlama kitabı (Wilkes, Wheeler & Gill, EDSAC, 1951) bu teknikleri kodifiye etmişti.

Mutlak adres kütüphanelerinin neden ölçeklenebilirlik sorununa yol açtığını ve yer değiştirilebilir kodun bunu nasıl çözdüğünü açıklayın. Mutlak adreslerin hangi spesifik özelliği çatışmaya neden oldu ve 'yer değiştirilebilir' teknik olarak ne anlama gelir?

Dil Tasarımı Çatallaşması

FORTRAN (1957, IBM) ve ALGOL (1958, uluslararası komite) iki tasarım felsefesini temsil eder ve radikal derecede farklı sonuçlar üretti.

FORTRAN

John Backus, IBM'de FORTRAN (FORmula TRANslation) projesine liderlik etti. Tasarım hedefi: dili bilim insanları ve mühendisler için kullanması kolay hale getirmek. FORTRAN, kullanıcıları için doğal hissettiren matematiksel gösterimi kabul etti: ADD B, C; STORE T; MULTIPLY T, D; STORE A yerine A = B + C * D.

FORTRAN 60+ yıl boyunca hayatta kaldı. Bilimsel hesaplama, akışkan dinamiği, iklim modellemesi ve hesaplamalı fizikte aktif kullanımda kalır. Hamming bu dayanıklılığı başarılı tasarımın kanıtı olarak belirtti.

ALGOL

ALGOL (ALGOrithmic Language), matematiksel titizlik ve biçimsel tanımlanabilirlik için mantık bilimci ve bilgisayar bilimciler tarafından tasarlandı: mantıksal olarak temiz, biçimsel olarak tanımlanabilir bir dil. Backus-Naur Form (BNF) gösterimi ALGOL'u belirtmek için dilbilgisi tanımlama için icat edildi.

ALGOL uygulamada başarısız oldu. Mantıksal zarafeti ve sonraki dil tasarımında muazzam etkisine rağmen (Pascal, C & hemen hemen her modern dil ALGOL'un dilbilgisi konseptlerinden türetilir), ALGOL kendisi geniş çapta dağıtılmadı. Hamming'in kararı: mantıksal tasarlanmış, insan tarafından kullanılamaz.

Dillerin Hiyerarşisi

Hamming, makine kodundan montaj, daha üst düzey diller & nihayet bir 'problem yönelimli dil' kadar doğal bir hiyerarşi tanımladı — uygulayıcıların problem alanı hakkında düşündüğü şeklidir. Her seviye, makine verimliliği pahasına insan okunabilirliğini ekler.

Hamming'in Dört Dil Tasarımı Kriteri

Hamming, FORTRAN vs ALGOL dersini başarılı bir programlama dilinin dört kriterine damıttı:

1. Öğrenmesi kolay — acemi hızlı üretken olabilir

2. Kullanması kolay — rutin görevler minimum seremoni gerektirir

3. Hataları ayıklaması kolay — hatalar anlamlı, konumlandırılabilir mesajlar üretir

4. Alt rutinleri kullanması kolay — yeniden kullanım & soyutlama kahraman çabası gerektirmez

Ek olarak yapısal bir gözlem eklemişti: İnsan dili yaklaşık %60 artıklık içerir; yazılı dil yaklaşık %40. Düşük artıklık dilleri (APL gibi) uzmanların güzel bulduğu ve yeni başlayanların opak bulduğu şık tek satırlık programlar üretir — ve tek bir karakter anlamı değiştirdiğinde algılanmayan hatalar içerir.

Çıkarım: mantıksal zarafet için tasarlanan bir dil, yanlış okuyucu için optimize eder. Programcı insandır; insanlar hataları yakalamak ve niyeti iletişim kurmak için artıklığa ihtiyaç duyarlar.

Hamming'in dört kriterini iyi bildiğiniz bir programlama diline uygulayın. Her kriteri 1–5 olarak puanlayın (5=mükemmel). Ardından, hangi kriteri güçlendirecek en çok iyileştirecek — ve ne kadar spesifik bir değişikliğin ne gibi görüneceğini açıklayın.

Psikolojik vs Mantıksal Dil Tasarımı

Hamming, FORTRAN/ALGOL karşıtlığına dil tasarımı değil, kurumsal ve insan dinamikleri dersi olarak geri döndü.

FORTRAN psikolojik olarak tasarlandı — onu kullanan insanlar için, özellikle matematiksel gösterimi düşünen bilim insanları. ALGOL mantıksal olarak tasarlandı — biçimsel doğruluk & teorik zarafet için.

Hamming'in belirlediği paradoks: insanların dirençle karşılaştığı mantıksal olarak doğru bir dil başarısız olur; insanların benimsediği pragmatik tasarlanmış bir dil başarılı olur, hatta mantıksal olarak daha dağınık olsa bile.

APL'yi aşırı durum olarak belirtti: mantıksal olarak zarafetli, tek satırda ifade edilebilir, kendi özel karakter seti ile. Uzmanlar sevdi. Normal programcılar bunu okunamaz buldu. Tek bir karakter değişikliği programın anlamını sessizce dönüştürebilirdi. APL'nin küçük bir adanmış topluluğu & neredeyse sıfır ana akım kullanımı var.

İnsan artıklığı argümanı: konuşulan dil ~%60 artıklık içerir (tekrarlanan içerik, açıklayan kelimeler, tahmin edilebilir yapı). Yazılı dil ~%40 artıklık. Bu artıklık hata tespitine hizmet eder — insanlar güvenilmez olduğundan, dil hataları yakalamak & düzeltmek için yeterli tekrarlanan bilgi taşımak için gelişti. Düşük artıklık dili bu güvenlik ağını kaldırır.

Derleyici Hiyerarşisi

Hamming, derleyici/yorumlayıcı katmanlanması açıkladı: bir program daha yüksek seviye bir dilde okuyup bunu daha düşük seviye bir dile tercüme edebilir. Bu katmanları istifle — her biri bir seviye aşağı tercüme eder. En üstte: bir alan uzmanları (biyoloji, finans, fizik) doğal olarak yazarların etki alanına özgü bir dil. En altta: makine kodu. Her geçiş bir derleyici veya yorumlayıcıdır.

Dil Hayatta Kalmasını Tahmin Etmek

1993'e kadar Hamming birçok dili başarılı ve başarısız olurken gözlemlemişti. FORTRAN (1957) hayatta kaldı. ALGOL (1958) başarısız oldu. COBOL (1959) iş bilişiminde onlarca yıl hayatta kaldı. LISP (1958) yapay zeka araştırmasında hayatta kaldı. PL/I (1964) her şeyi birleştirmeyi denedi & başarısız oldu.

Hamming'in psikolojik vs mantıksal tasarım ayrımını ve dört kriterini kullarak, bildiğiniz bir dilin neden gelişti ve biri neden başarısız oldu (veya başarısız oluyor) açıklayın. Açıklamanız, sadece teknik özellikleri değil, benimsemeyi veya reddi yönlendiren spesifik insan faktörlerini belirlemelidir.

Tekrarlanan Desen

Hamming'in yazılım tarihi bölümü tekrarlayan bir yapı içerir:

1. Acı verici bir sınırlama vardır (mutlak adresler, ikili gösterim, sürdürülemez kod)

2. Birisi sınırlamayı gizleyen bir soyutlama katmanı icat eder

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

4. Tekrarla

İkili → sekizli/onaltılı → sembolik montaj → FORTRAN → yapılandırılmış programlama → nesne yönelimli diller → etki alanına özgü diller. Her katman öncül'ün en akut ağrısını çözer ve yeni sorun sınıfı sunar.

Spagetti kod sorunu (mutlak adresler) sembolik monaja yol açtı. Büyük montaj programları FORTRAN'a yol açtı. Büyük FORTRAN programları yapılandırılmış programlama & sonra nesne yönelimlilik'e yol açtı. Hamming'in dersi bu sonraki geçişler olmadan bitti, ancak desen devam eder.

Mühendisler için dersi: her zaman önceki soyutlama tarafından açıklanan acıyı çözüyorsunuz. Şu anda bulunduğunuz katmanı anlamak, altındaki katmanın neden vardığını bilmesini gerektirir.

Düzenli olarak çalıştığınız bir yazılım soyutlama katmanını belirleyin. Altındaki katmanında hangi acı verici sınırlama gizler? & mevcut katmanınız ne yeni sorun sınıfı sunar — hangi ağrıyı sonraki katmanın çözmesine ihtiyaç duyacağı?