İlk derleyici nasıl yazıldı?


166

Tavuk ve yumurta ve önyükleme duydum. Bir kaç sorum var.

Bir şeyi ikili talimatlara dönüştüren ilk derleyici ne yazdı?

Montaj derlenmiş veya ikili talimatlara çevrilmiş mi?

... ikili bir derleyici yazdıklarına inanmakta zorlanıyordum.



@nawfal, yeni bir programlama dili ve ilk derleyici arasındaki farktır, bu yüzden hayır - bu bir kopya değil

@PauliSudarshanTerho fark nedir? Soruların ruhu aynı. Bir programlama dili yazamazsınız, bu soru ilk derleyiciden bahsediyor.
nawfal

Manevi hayal gücünüzde belki? Gerçekte bu linkteki ilk derleyici hakkında hiçbir şey bulamazsınız. Ve sıfırdan başlamak için yeni bir dil yazan kimseye tavsiye etmemelisiniz. Ve eğer öyleyse, neden yeni bir dil yazmak için önemliyse, ilk derleyicinin nasıl yazıldığına dair cevapları gizlemek istersiniz?

Benden öğren - Bu bir kopya: stackoverflow.com/questions/4772768/…

Yanıtlar:


133

Montaj talimatları (genellikle), doğrudan kodlayıcı tarafından doğrudan yorumlanabilen (çok) bayt makine kod değerleri olan opcodes ile doğrudan eşleştirmedir. Onları eşleşen montaj talimatları ile listeleyen ve bir şeyler için bellek adreslerini / ofsetlerini listeleyen bir tablodan (örneğin , 6039 mikroişlemci için bu gibi) bakarak doğrudan opcode bir program yazmak mümkündür. atlar gibi.

İlk programlar tam olarak bu şekilde yapıldı - elle yazılmış opcodes.

Bununla birlikte, çoğu zaman, bu opcode aramalarını otomatik olarak yapan montaj kodunu "derlemek" için bir montajcı kullanmak ve aynı zamanda adlandırılmış atlama etiketleri, vb.

İlk toplayıcılar elle yazıldı. Bu montajcılar daha sonra, daha üst düzey diller için yazılmış derleyicileri birleştirmek için kullanılabilecek daha karmaşık montajcıları birleştirmek için kullanılabilir. Bir sonraki araç kümesinin oluşturulmasını basitleştirmek için araçları tekrarlı olarak yazma sürecine (cevabında David Rabinowitz tarafından belirtildiği gibi) önyükleme denir .


18
İlk bilgisayarım, ROM monitörünün, işletim sisteminin (CP / M) temellerini getirmek için bir bootstrap yükleyiciyi elle monte etmek zorunda kaldığım Z80 tabanlı bir makineydi, böylece adı geçen işletim sisteminin geri kalanını bir çalışma sistemine monte edebildim , disk tabanlı bir bootstrap yükleyici ile birlikte. Eğlenceli zamanlar. Yani evet, gayet elle monte edebilirsiniz. Yavaş ve acı verici ve hataya açık (bu yüzden işleri otomatikleştirdik) ama mümkün.
SADECE benim doğru GÖRÜŞÜM

İlk bağlantı bozuldu.
Luke

Elle yazılmış. Nasıl? Kartları kablolama veya delme? Sanırım onaltılık tuş takımları vardı.


36

Yumurtalar uzun zaman önce tavuklar. "Tavuk ve yumurta" sorunlarının çoğunun cevabı aynıdır: evrim. Bazı insanlar biyolojik evrime inanmakta zorlanırlar, ancak inançsızlık bir argüman değildir (google argumentum ad cehadanam).

Sorunuzu doğrudan cevaplamak için: ilk derleyici (bir insan tarafından) bir montaj dilinde yazılmıştır - montajcı adı verilen bir program, montaj dilini ikiliye çevirir; Bu, derleme işleminden çok daha basit bir işlemdir çünkü montaj dili, sayılar yerine opcode adlarını kullanan, sembollü adresleri temsil eden makine dilinin sembolik bir şeklidir. Sonraki derleyiciler derleme dilinde de yazılmıştır. Ama ilk önce C Derleyici yazılmış modifiye B derleyici olduğu B . İlk B derleyicisi TMG'de yazılmıştır . B derleyicisinin derlenmesi için kullanılan TMG derleyicisi PDP-7 montaj dilinde yazılmıştır.


24

Woz, kamuoyunda yaptığı görüşmelerden birinde, başladığında bir derleyiciyi karşılayamayacağını, böylece kağıt üzerine elle ikili derleme yaptığını söyledi. Daha vahşi bir şey görmek istiyorsanız, Bill Gates ve Paul Allen'ın Altair 8800 için TEMEL'i yazdığı koşulları okuyun .

"Bir bilgisayarda ikili yazma" ile ilgili olarak - bir programcı olmaktan geri adım atın ve ilk bilgisayarların ne olduğunu düşünün. Üst düzey şeyler henüz yoktu - düşük seviyedeki her şeyi düşündünüz, çünkü hepsi bu. Makine kodu ile manipüle ettiğiniz temel mantık ve aritmetik yapabilen bir donanımınız vardı (bu sadece derlenmiş montaj - Amber, bu parçanın neden elle yapılmasının zor olmadığını açıklar) ve bu donanımın belirli matematiksel özellikleri gerçekleştirmesini istediniz. Var olmayan işletim sistemi hakkında endişelenmediniz, donanıma (montajda) onu beslediğiniz sayıları nasıl değiştireceğinizi söylediniz. Sadece büyük bir hesap makinesiydi. Bugünün bilgisayarı her seferinde bir soyutlama yapıldı.

Bilgisayarları sihir gibi hissettiren bariyeri yıkmak istiyorsanız, Charles Petzold ve / veya The Computing Systems Elements tarafından CODE okunmasını şiddetle tavsiye ederim . Sadece temel bir programlama bilgisiyle, bu harika erişilebilir kitaplar, bilgisayarları yukarıdan aşağıya anlamanıza yardımcı olacaktır. Açıkçası, bir comp elde edemezsiniz. sci. ya da EE derecesi sadece 2 kitaptan sonra, ama resmi eğitimi kaçırmış, kendi kendini yetiştirmiş bir programcı olarak söyleyebilirim: bu kitaplar dünyamı sarstı!


2
Satış konuşmasını yaptıktan sonra Altair BASIC yorumlayıcısını mı yazıyorsunuz? Albuquerque'ye uçak yolculuğundaki bootstrapper kodlanıyor mu? Kulağa saçma geliyor. Ve eğlence.
Ehtesh Choudhury

2
@Shurane: ha! Bu nokta benim için de önemli ama benim için BASIC yorumlayıcısını nasıl oluşturduklarının ve grubun onu küçük alana nasıl sıkıştırdığı konusundaki iddialı bir güzellik ve şaşırtıcı programlama yeteneği / hackery.
Dinah

10

Bir şeyi ikili talimatlara dönüştüren ilk derleyici ne yazdı?

Bir insan yaptı. A-0 sistemi hakkında bilgi edinin :

1952'de Grace Hopper, A-0 olarak bilinen Sperry için ilk derleyicisini tamamladı. A-0 Sistemi, sembolik matematiksel kodu makine diline çevirebilecek bir talimatlar dizisidir. A-0'ı üretirken, yıllar boyunca topladığı tüm altyordamları aldı ve kasete koydu. Her rutine bir çağrı numarası verildi, böylece makine onu bantta bulabildi. Grace tarafından anlatıldığı gibi, "Tek yapmam gereken bir dizi telefon numarası yazmak, bilgisayarın onları bantta bulmasına, getirmek ve eklemeleri yapmaktı. Bu ilk derleyiciydi."


1
Bağlantı şu anda 404 gibi görünüyor, her durumda, yukarıdaki "Grace" Grace Hopper.
Volker Stolz

2
Hopper'ın ilk derleyiciyi yazdığını duydum, ancak yukarıdaki açıklama bir derleyiciden daha bağlayıcı gibi görünmesini sağlıyor. Yine de iyi bir hikaye. Bilgisayar bilimcilerinin derleyici fikri hakkında şüpheci oldukları bir zaman olduğunu düşünmek şaşırtıcı ...
Mark E. Haase

1
@mehaase buna "derleyici" denir. her biri (potansiyel olarak) doğrudan makine dilinde yazılmış rutinlerin bir derlemesini yapar.
Elazar

@ MarkE.Haase Hopper'ın bahsettiği insanlar, belirli hesaplama görevleri için bilgisayar kullanan uygulama mühendisleri ve bilim adamlarıydı; "bilgisayar bilimcisi" değildiler. 1952'de bir avuç sibernetikçi vardı, ama bunlardan herhangi biriyle konuştuğundan şüpheliyim.
Jim Balter

9

İlk programlar makine kodunda yazılmıştır (montaj dili değil) - anahtarlar kullanılarak bilgisayar belleğine bağlanan gerçek sayılar. Uzun bir yol kat ettik ...

Bazen bu hala küçük bir miktar olur - küçük kod parçalarını yamalamak veya thunks oluşturmak. Daha sonra ilk mikrolarda küçük, hızlı altyordamlar olarak yürütülen Basic dizelerine sayıları delmeyi hatırlıyorum. Ayrıca, bir üniversite kursu için önyükleme programına girmek üzere PDP-11'in ön panelindeki anahtarları değiştirmeyi de hatırlıyorum.

Bu programlar bazen başka programlar oluşturmak için metin dosyalarını işlemek için kullanılır ve voila programlama dilleri oluşturulur.


Soru, bazen derleyici olmasına rağmen, genel olarak ilk programlar değil, ilk derleyici hakkındadır; ikisinin tarihi aynı değil. (Bir benzetme: İlk hayvanlar yeryüzünde ortaya çıktığında sorusunun cevabı kediler hayvanlar olmasına rağmen ilk kediler yeryüzündeki ortaya çıktığında sorusunun cevabı değildir.)
Jim Balter
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.