İlk önce ne oldu, derleyici mi, kaynak mı?


17

Derleyicinin doğuşunu merak ediyorum. Programlama nasıl başladı? İnsanlar önce belirli bir komut kümesini tanıyan bir donanım mı inşa ettiler, yoksa insanlar bir dil mi tanımladılar ve sonra onun etrafında donanım mı kurdular? Ve ilgili bir notta, ilk programlama dili neydi?



1
Alt sorulardan biri kendi başına bir soruydu: Bilgisayarlar için yazılan ilk programlama dili neydi? .
Mark Booth

Elbette bu bakabileceğiniz bir şey mi ?
Caleb

@Caleb SkyDan'ın cevabındaki yorumları okudu ..
David Cowden

2
@Brian Geçerli varsayım, ancak yanlış olduğu ortaya çıkıyor. Bu bir tavuk yumurtası sorunu değil, çok açık bir cevap var (ipucu: aşağıda en çok oylanan yanlış). Kaynak kodu uzun derleyiciler önce.
Konrad Rudolph

Yanıtlar:


30

Bunun çok net bir cevabı var: Kaynak kodu önce geldi - büyük bir farkla.

Teknik detayları vermeden önce, biraz perspektif:

İlk programlama dilleri edildi tüm makine dili veya assembler çevrilmiş elle . Bu çeviriyi otomatikleştirmek için bir yazılım parçası kullanma fikri (derleyici veya değerlendirici aracılığıyla) her zaman daha sonra geldi ve sezgisel olmaktan çok uzaktı.

FORTRAN hakkındaki isteksizlik derleyicilerinin karşılaşması gereken Wikipedia makalesinin bu alıntısını düşünün :

… İlk FORTRAN derleyicisi [1957] Nisan 1957'de teslim edildi. Bu, ilk optimizasyon derleyicisiydi, çünkü müşteriler, derleyicisi performansı elle kodlanmış montaj diliyle karşılaştırılabilir kod üretemedikçe üst düzey bir programlama dili kullanmak konusunda isteksizdi. . [benimkini vurgula]

=> FORTRAN derleyicisi pazara girdiğinde (1957), insanlar zaten hem montaj dilini hem de FORTRAN'ı mutlu bir şekilde programlıyorlardı.

Dava LISP için benzerdi ( Hackerlar ve Ressamlar'dan ):

Steve Russell, bak, neden bu değerlendirmeyi programlamıyorum… ve ona dedim, ho, ho, teoriyi pratikle karıştırıyorsun, bu değerlendirme bilgisayar için değil, okumak için tasarlanmıştır. Ama devam etti ve yaptı. Yani, makalemdeki değerlendirmeyi IBM 704 makine koduna derledi, hatayı düzeltti ve daha sonra bunu kesinlikle bir Lisp yorumlayıcısı olarak ilan etti. İşte bu noktada Lisp aslında bugün sahip olduğu biçime sahipti ... "

Bir kez daha, kaynak kodu (LISP'de) yorumlayıcıdan önce gelmekle kalmaz, ikincisi de öncekinde örtük değildir.

Ancak bu gelişmeler nispeten geç. Charles Babbage'ın Analitik Motoru ve Ada Lovelace'ın ilgili ilk programını düşünmese bile , 20. yüzyılda derleyicileri önceden programlayan programlama dilleri vardı:

Konrad Zuse's Plankalkül ve Alonzo Kilisesi tarafından tanıtılan λ-hesabının matematiksel yapısı . Bunların her ikisi de şüphesiz resmi olarak belirlenmiş programlama dilleri olmakla birlikte, ikisi de derleyici içermiyordu.

Bunu perspektife sokmak için, λ-hesabı 1930'lardan kalmadır ve Plankalkül 1945 civarında geliştirilmiştir. Buna karşılık, ilk FORTRAN derleyicisi 1957'de çıktı (ancak yine FORTRAN belirtildikten üç yıl sonra ).


Mükemmel cevap! Eskiden elle derlenmiş kod bilmiyordum, ama bu mantıklı.
ckb

10

Programlama, makine kodunu doğrudan belleğe, delikli kartlara ve kağıt kasete veya hatta bir patch paneldeki kısa devre bağlantılarına yazarak başladı. Donanımın yazılımın ihtiyaçları üzerine inşa edilmiş olup olmadığını ya da tam tersini söylemek zor. Kesinlikle bir turing tam programlanabilir bilgisayar için en eski tasarım , Babbage Analitik motoru , Ada Lovelace'ın ilk belgelenmiş programından önce .

İlk programlama diline gelince , bunun Babbage'ın analitik motorunun makine dili olduğunu tartıştım ( bilgisayarlar için yazılan ilk programlama dili neydi? Sorusundan ).

Beri, sorunuz başlığında soruya cevap vermek için montaj dili olan kaynak kod ve montaj dilleri öncesi tarih yüksek seviyeli diller assembler derlenmiş olabilir, kaynak kod birinci oldu.

Ayrıca, bir derleyici hiçbir zaman gerekli değildi , sadece uygun.

Uygun op-kod tablolarını ezberlediyseniz, yazılımı doğrudan belleğe yazmak mükemmel bir şekilde mümkündür . Aslında, bazı erken bilgisayarlar, önyükleme yapmak için ön panel onaltılık tuş takımındaki önyükleme kodunu delmeyi gerektirir , ancak istediğiniz herhangi bir koda dokunabilirsiniz ve çalıştırılabilir.

İşlemci daha karmaşık olsun Kuşkusuz olarak, bu daha da zorlaşır, ancak basit bir komut kümesi gibi 6809 veya Z80 (garip endeksli modları görmezden) bile olmadan nispeten kolay programa olan assembler yalnız bir üst düzey dilden bir derleyici izin.

Babbage'nin analitik motoru daha önce inşa edilmiş olsaydı, eminim bir steampunk Mel olacak ve optimize edilmiş programları doğrudan tezgah kartlarına yazacaktı.


1
Yayınladığınız wikipedia bağlantısında kaynak kodun tanımını gerçekten okudunuz mu? Yukarıda belirtildiği gibi, makine kodu kaynak kodu değildir. Ve makine kodu! = Montaj. Önce makine kodu vardı.
okülüs

@MarkBooth Bence MIPS ve AVR daha da basit ..
David Cowden

4
@occulus - Derleme dili kaynak kodu değil hangi yolla ? Assembly dili bir makine koduna bir dil komut haritalar ve trivially edilebilir monte , kafanın içinde eğer size op kod tablolarını biliyorum. Dürüst olmak gerekirse, çocuklar bugünlerde ... * 8 ')
Mark Booth

1
Bana göre, çevirici dili olduğunu movl $0, -20(%rbp), oysa makine kodu olan C745EC00000000ve ikincisiyse (iyi, hiç böyle bir şey) ilk manuel olarak girilen veya kağıt bant okundu. Makine kodunun kaynak kodu olarak kabul edilip edilmediğine gelince , "teknenizde ne olursa olsun" demeye meyilliyim. Manuel olarak değiştiriyorsanız, evet, önemli olduğunu söyleyebilirim.
John Bode

@JohnBode - Oh, katılıyorum, ancak montaj talimatları ve makine kodu talimatları arasındaki 1: 1 yazışma göz önüne alındığında, montaj sadece mekanik çeviri meselesidir (montaj), mantık aynıdır. Derleme çok daha karmaşık bir çok şeyi ifade eder: birçok çeviri ( Occam üst düzey bir dildir ve çoğu Occam ifadesi MISC mimarisi nedeniyle Transputer komutlarına 1: 1 eşleştirilmiştir . * 8 ').
Mark Booth

6

Derleyici oldu ilk . Kaynak derleyici olmadan derlenemediği için doğrudan makine koduyla yazılmıştır.

Gibi Wikipedia makalelerini bu bir soruların çoğunu cevap verebilir Bilgisayar Diller hakkında. Değilse, Tanenbaum'un Yapılandırılmış Bilgisayar Organizasyonu gibi kitaplarından birini seçin , ki bu sorudan bile daha fazla soruyu cevaplayabilir :)

Daha spesifik bir şey söyleyemem, çünkü sorunuz çok geniş.


20
Kaynağın ilk olduğu da iddia edilebilir, çünkü ilk "bilgisayarlar" için kaynak ikiliye eşdeğerdir (yani doğrudan makinede okunabilen dilde programlanmışlardır).
Joachim Sauer

5
@Joachim Tanımı gereği, kaynak kodu derleyici tarafından makine koduna çevrilen, insan tarafından okunabilir bir metindir. Dolayısıyla makine kodunun kendisi kaynak kodu değildir.
hellodanylo

11
Derleyici ilk sıradaydı, ancak biyolojik sinir ağlarında uygulandı.
Den

8
Bu neden bu kadar yüksek oy alıyor? Yanlış. Üst düzey dillerdeki kaynak kodu (özellikle λ-calculus, Plankalkül ve LISP) hem derleyicilerden hem de tercümanlardan çok daha eskidir. Ada Lovelace'ın yazdığı yarı resmi programlar bile hesaba katılmıyor.
Konrad Rudolph

4
@SkyDan O zaman tanımınız nedir? Cevabınızın doğru olduğu mantıklı bir tanım bilmiyorum (hem "derleyici" hem de "üst düzey bir dilde kaynak kodu" - düşük seviyede olsun).
Konrad Rudolph

4

Tercümanlar derleyicilerden önce vardı, bu yüzden kaynak kodu derleyicilerden önce vardı.

Burada bilgi işlem tarihi ile ilgili çok ilginç makaleler var . FORTRAN II derleyicisinin kaynak kodunun kullanılabilir olması gerekiyor, ancak bu bağlantılar bozuk.

1954'ten bu makalede Whirlwhind tercümanı açıklanmaktadır.


1

Bu soru, 'kaynak kodunu' anlamsal yorumlamamıza dayanmaktadır. Bunu 'derlenen metin tabanlı bilgisayar talimatları' olarak tanımlarsak, muhtemelen bir derleyici önce gelirdi.

Onuncu IEEE Kaynak Kodu Analizi ve Manipülasyonu Uluslararası Çalışma Konferansı'nda sunulan Mark Harman'ın "Kaynak Kod Analizi ve Manipülasyonu Neden Her Zaman Önemli Olacak" gibi daha yetkili bir şeye gitmeye daha meyilliyim.

Tanım 1 (Kaynak Kodu): Açıklık amacıyla, bir yazılım sisteminin tamamen yürütülebilir bir tanımı anlamına gelen 'kaynak kodu' alınmıştır. Bu nedenle, makine kodunu, çok yüksek seviyeli dilleri ve sistemlerin yürütülebilir grafik temsillerini içerecek şekilde yorumlanmıştır.

Ve cevabınızın bu tanımda örtük olduğunu düşünüyorum - kaynak kodu kesinlikle önce geldi.


“Muhtemelen bir derleyici önce geldi” - yalnızca “makine koduna elle çevrildi” yerine “derlenmiş” kelimesini “otomatik bir araçla çevrildi” olarak tanımlarsanız.
Konrad Rudolph

Çok ilginç bir kağıt. Kaynak kodun tanımını beğendim - her ne kadar sorumu soru olmayan bir şey yapıyor olsa da
David Cowden

@KonradRudolph derleme yapan birim değil, ister makine, ister insan, ister ilahi müdahale olsun, 'derleyici' denir mi?
Kirk Broadhurst

0

Algoritmalar kağıt üzerinde dizildi, daha sonra alus fiziksel / mekanik olarak (hareketli teller) bağlandı. programı değiştirmek için kabloları hareket ettirin ve tekrar çalıştırın.

Daha sonra montaj dili kağıda ayrıldı, makine koduna elle çevrildi, daha sonra koçu beslemek için anahtarlar vb. Veya yumruk kartları, vb. Sonunda bir montajcı yapabilir, daha sonra montajda makine kodunu değil programlayabilirsiniz, sonra bir derleyici yapabilirsiniz. Sonunda bu derleyiciyi bootstrap edebilirsiniz. Ve yeni diller ve yeni derleyiciler vb.

İlk dil bir dil değildi, daha sonra ilk dil birleştirme diliydi. her işlemci için ilk dil montaj dilidir (makine kodundan türetilir). Komut seti önce onu, sonra montajcıyı, daha sonra derleyicileri uygulayacak donanımı tasarlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.