Derleyiciler nasıl yazıldı?

Assembly ile. Günümüzde hepsi öyle mi bilmiyorum ama kabaca böyle. O nasıl yazıldı, bu nasıl yazıldı diye gide gide bir yerden sonra o meşhur sıfır ve birlere ulaşacağına eminim. Zaten daha assembly bile bir insanın bakınca zar zor anladığı bir dil.
 
images (2).jpeg
 
Malesef ilk compiler'lar 0 ve 1 lerle yazildi. Malesef diyorum cunku ne kadar zor bir is oldugunu az cok tahmin edebiliyorum. ( Aslinda compiler yerine assembler demek daha dogru )

Uzerinde calisacagi islemcinin spesifikasyonuna bakarak, tek tek elle yazildi.

Ornegin bugun yeniden x64 platformu icin yazacaksaniz bunu, bakacaginiz dokuman bu olacak: https://www.amd.com/system/files/TechDocs/24592.pdf

( 64-bit islemci mimarisinin varliginda aslan payi AMD'nin. Manual o yuzden ona ait )
 
Merhaba sorunuza tam cevap olmayabilir ama bildiğimi aktarayım. Üç çeşit programlama dili vardır. Düşük Seviye Dil (makine dili yani 0 ve 1), Assembly dili(orta seviye diyebilirim galiba), Yüksek seviye(c, c++, phton, java, vs). Derleyiciler sırasıyla : Yüksek seviye dilde yazdığınızı assembly diline çevirir. Assembly dilinden de makine diline çevrilir. Aslında tek satır yazdığınız kod arka planda çok işleme maruz kalır. Örneğin:
c = 4 + 5; => Basit bir kod satırı toplama yapıyor.
Assemnly dilinde
MOV AL,F5
Mov BL,0B
ADD AL,BL
Ardından 0 1 şeklinde cpu işliyor.
8 bit veri = F5 Hex , binary sistemde 1111 0101
8 bit veri = 0B Hex, binary sistemde 0000 1011 karşılık gelmektedir. Yazdığınız kod aslında fiziksel olarak bir durum belirtmektedir. 1 veya 0 ile mantık yapıları kurulmaktadır. Binlerce adreste bilgiler saklanmakta ve işlenmektedir.
İlk derleyiciler makine dilinde yazıldı. Önce makine kodu vardı, sonra assembly çıktı. Hep merak ederim nasıl bir duygu olduğunu. Gerçekleşen her olayın, kontrolünüz ve bilginiz altında gerçekleşmesinin nasıl bir hissiyat olduğunu.
 
Derleyiciler günümüzde başka derleyiciler ile derlenir. Kodları da genelde C/C++ dillerindedir. Eski derleyiciler Assemble ile yazılmıştı çünkü daha az yer kaplıyorlar. Ve eski bilgisayarların hafızaları çok kısıtlıydı.

Mesela GCC derleyicileri yine GCC ile derlenirler. Başka derleyiciler veya diller de kullanılabilinir ama en yaygın bilinen ve elde bulunan derleyiciler C ve C++ derleyicileri olduğundan çoğunlukla onlar tercih edilir.

Yeni nesil derleyiciler o aşamayı da atlayıp, kodları C veya C++ diline çeviriyor ve var olan derleyiciden yararlanıyor. Mesela RUST dili derleyicisi Windows'ta VC++, Linux'ta GCC kullanarak derliyor. GCC de aslında Assemble diline çeviriyor ve GASM (Binutils) ile Assemble dilinde derliyor.

Free Pascal (Delphi'nin kankası) da, kaynak kodları Object Pascal olmasına rağmen yine Assemble aşamasında binutils kullanıyor. Net dillerini kullanan derleyiciler de Net dillerinde (Java/C#) derlenmiş oluyorlar.

Yorumlayıcılarda bu durum yarı yarıya daha kolay, çünkü onlarda derleme aşaması dahili olduğundan, o kısım için bir aktarma gerekmiyor. (Script okunup çalıştırılıyor)

Özet olarak, her şey en eskinin üzerine kurulu. Ve varolandan yararlanılarak, tekerlek her seferinde yeniden keşf edilmiyor.
 
Günümüzde compilerlar kendi dillerinde yazılıyorlar. Bu özelliğe sahip compilerlara self-hosting compilers denir. Örneğin bugün C ve C++ programlama dillerinde yoğun bir şekilde tercih edilen GCC (GNU Compiler Collection) büyük oranda C dilinde yazılmıştır. Benzer şekilde D programlama dilinin official compilerı Digital Mars´ın DMD´si de büyün oranda D dilinde yazılmıştır.

Peki bir compiler kendi dilinde compile edilebiliyorsa ilk compiler nasıl yazıdı? Zaten bilişim literatüründe buna chicken and egg problemi denir. Compilerların ilk sürümü mutlaka bir X dilinde yazılmak zorundadır. Bu bir high-level programlama dili olabileceği gibi Assembly dilleri gibi low-level diller de olabilir. Zira ilk compiler 1952 yılında A-0 programlama dili için Grace Hopper tarafından Assembly dilinde yazılmıştır. Günümüzde bilinen dillerden örnekler vermek gerekirse:

İlk Pascal compilerı Niklaus Wirth tarafından 1969 yılında Fortran dilinde yazılmıştır. İlk Fortran compilerı Assembly dilinde yazılmıştır.

İlk C compilerı Dennis Ritchie ve Ken Thompson tarafından 1970 yılında C´nin atası kabul edilen B ve BCPL dillerinde yazılmıştır. O dillerden de geriye gidildiğinde yine karşınıza Assembly dilleri çıkacaktır. C ve C syntax dilleri bugün yazılım dünyasının yapı taşlarını oluşturmaktadır. Günümüzde kullanılan işletim sistemlerinin tümü C ve C++ dilleri kullanılarak yazılmıştır. Ayrıca meşhur “Hello world!” programı da ilk kez C dilinde yazılmıştır.

İlk BASIC interpreterlarından birisi olan Altair BASIC´i Bill Gates, Paul Allen ve Monte Davidoff tarafından 1975 yılında MITS Altair 8800 bilgisayarı için Assembly dilinde yazılmıştır. Bill Gates´e göre Altair 8800 dünyanın ilk modern bilgisayarıdır. Bill Gates yıllar sonra bu interpreterı yazmak için kullandığı delikli bantlardan birisini asitsiz bir kalem ile imzalayıp (sanırım zarar görmemesi için) Computer History Museum´a hediye etmiştir.

Java ve Ruby gibi modern dillerin yazılımları da C dilinde yazılmıştır.

Özetle programlar günümüz programlama dillerinden önce makine dilinde yazılıyorlardı. Makine dilinin kullanımı çok zor ve hata payı yüksek olduğu için belli başlı komutları temsilen semboller kullanılmaya başlandı ve sembolik makine kodu (Assembly dilleri) doğmuş oldu. İlk compiler da Assembly dilinde yazılmıştır. Ondan sonrasını artık biliyorsunuz zaten. :)

Bilişim tarihi ile ilgileniyorsanız Computer History Museum´un sitesindeki belgeleri ve makaleleri okuyabilirsiniz. Eğer programlama dillerinin çalışma mantıklarını ve compilerların nasıl tasarlanıp yazıldıklarını merak ediyorsanız Sebesta´nın Concepts of Programming Languages kitabını okuyabilirsiniz.
 
Son düzenleme:
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı