Kendi yazılım dilime nasıl derleyici yapabilirim?

İlk derleyici nasıl geliştirildi o zaman.
İlk derleyici diye bir şey yok. C için geliştirilen ilk derleyiciler neredeyse 1970'li yıllara dayanıyor ve o zaman assembly kullanılarak geliştiriliyor. Daha geniş bir araştırma yapabilirsin bu konuda. Asıl soru assembly olmalı. Assembly hakkında detaylı bilgim yok. Bildiğim kadarıyla elle eşleştirilmiş olmaları bu kodların. Yani komutlar doğrudan makine diline çeviri gibi düşünülebilir.
 
Neymiş derleyici gerçekte anlatsana. Bana değil, konudakilere anlat.
Ha sen aslımda bilgim yok diyorsan senin zaten yapacağın şeyi ben senin yerine yapayım, al wiki;


Bir programlama diliyle başka bir programlama dili yapılamaz iddiana da gelelim. Bir programalama dilinin var olabilmesi için çalıştırılabilir olması gerekiyor. Bunun için çeşitli yöntemler var.

Python gibi diller interpreted olarak geçiyor. Interpreter tarafından satır satır okunuyor, yorumlanıyor ve çalıştırılıyor.
C# gibi diller derleyicisi tarafından runtime framework'ü tarafından çalıştırılabilecek arakoda dönüşüyor ve daha sonrasında runtime frameworkü onu JIT olarak çalıştığı makinede makine koduna derliyor ve çalıştırıyor.
C++,Rust gibi diller ise bir derleyici tarafından çalıştırılmak veya bir çıktı üretmek üzere makine koduna dönüşüyorlar.

Mozilla'nın Rust projesini ele alalım. Rust 2015'ten beri var. İlk compiler'ı ocaml diliyle yazılmış. Şuan self maintained bir compiler'ı var ama ilk adımı bu. Bir dilin doğması için başka bir dil kullanmak epey yaygın.

Python'ı ele alalım. Python'ın interpreter implementasyonu C ve Python ile yazılmış. CPython'ın, orijinal interpreter'ın early commitlerine gidersen C'de yazıldığını göreceksin.
Şimdi gelelim başka bir dil kullanarak dil yapılmayacağı iddiana, öyle miymiş sahiden?
Dostum konuda kimse interpreting'den bahsetmedi. Kendi kendine işin içerisine dahil ettin. Kendin çalıp kendin oynuyorsun.
Konumuz derleyiciydi, bende tüm yorumlarımı derleyici üzerinden yaptım.
Çoluk çocuk eyleyecek vaktim yok. Devam et.
 
Dostum konuda kimse interpreting'den bahsetmedi. Kendi kendine işin içerisine dahil ettin. Kendin çalıp kendin oynuyorsun.
Konumuz derleyiciydi, bende tüm yorumlarımı derleyici üzerinden yaptım.
Çoluk çocuk eyleyecek vaktim yok. Devam et.
"Başka dilin derleyicisini kullandığın zaman" diyerek zaten cümlelerimden bir şey anlamadığını belli ediyordun. Bence de, konudan yavaşça uzaklaş sen.
 
Dostum sen derleyicinin mantığını ve gerçekte ne olduğunu anlamamışsın. Neyse bildiğini zannedene öğretmekle uğraşamam. Kolay gelsin.
Interpreterlerin yazılım mantıklarını sıralamak gerekirse doğrudan program ile okunabilir veya bir ara dil yardımıyla daha gelişmiş özelliklerde 2 katmanlı olarak okunabilir. Compiler ile ise makinenin anlayacağı formata çevirirsiniz. Ya da başka bir dile çevirerek de çalıştırabilirsiniz. Örneğin 2 katmanlı dil modelini kullanarak Python ile C++ kütüphanelerini baz alan bir dil yazabilirsiniz. Ya da bambaşka herhangi bir dil de olabilir bu. Derleyicinin amacını doğrudan 01e çevirmek olduğunu düşünmek mantıksız aslında. Programlama dilleri tarihsel süreçte çok gelişti ve bir dil yazılırken başka bir dile çevrilmesi gayet olağan ve mantıklı bir durum. Ayrıca programın tek yapacağı şey işleyip döndürmek olduğu için C++'a çevrilecek bir dil yazarken C++ kullanmak zorunda kalmıyorsunuz.
 
Interpreterlerin yazılım mantıklarını sıralamak gerekirse doğrudan program ile okunabilir veya bir ara dil yardımıyla daha gelişmiş özelliklerde 2 katmanlı olarak okunabilir. Compiler ile ise makinenin anlayacağı formata çevirirsiniz. Ya da başka bir dile çevirerek de çalıştırabilirsiniz. Örneğin 2 katmanlı dil modelini kullanarak Python ile C++ kütüphanelerini baz alan bir dil yazabilirsiniz. Ya da bambaşka herhangi bir dil de olabilir bu. Derleyicinin amacını doğrudan 01e çevirmek olduğunu düşünmek mantıksız aslında. Programlama dilleri tarihsel süreçte çok gelişti ve bir dil yazılırken başka bir dile çevrilmesi gayet olağan ve mantıklı bir durum. Ayrıca programın tek yapacağı şey işleyip döndürmek olduğu için C++'a çevrilecek bir dil yazarken C++ kullanmak zorunda kalmıyorsunuz.
Teknik olarak bu derleyici olmuyor işte. Compiler makine diline çevirir. Anlamadığınız nokta teknik terimler. .Net Framework üzerinden örnek resimleri aşağıya saldım. Gerisini siz halledersiniz.

Örneğin;
CLR.jpg


net-common-language-runtime2.png
 
Teknik olarak bu derleyici olmuyor işte. Compiler makine diline çevirir. Anlamadığınız nokta teknik terimler. .Net Framework üzerinden örnek resimleri aşağıya saldım. Gerisini siz halledersiniz.

Örneğin;
Eki Görüntüle 1932159

Eki Görüntüle 1932160
Ya bak bilmezsin anlarım. Araştırır öğrenirsin sıkıntı değil derim. Araştırdığından yanlış sonuç çıkarmayı başarmak muazzam bir beceri. Verdiğin .NET şemalarında Managed Assembly diye bir şey var görüyor musun? Hemen üstünde ne yazıyor? Bi oku nolur ya. Bi oku ya. Bi altındaki fotoğrafları da bi oku ya. Okumayı öğren ya. Gerçekten acı verici senin şu mesajlarını okumak bana.

Çoluk çocuk diye konuşmaya gelince epey iddialısında, okumaya gelince gram okumuyorsun, çok üzüyor bu beni.
 
Dostum python zaten bir programlama dili. Python diliyle nasıl bir programlama dili yapıyorsun. :) Ayrıca derleyici yazılan kodları makine diline çeviren aracı bir programdır. Python zaten bir dil ve kendi derleyicisi var.
Python'un derleyicisi yok, yorumlayıcısı var. C#'ın derleyicisi var ancak makine diline çevirmez, ara dil denilen byte koduna derler, program çalıştırıldığında ise byte kodu JIT tarafından anlık olarak yürütülme esnasında makine diline çevrilir. C++ ise derleyicisi tarafından doğrudan makine koduna derlenir.

Neyin ne olduğunu bilmeden yorum yapmayın.
 
Yahu C# compiled bi dil mesela. Ama C#'ın compiler'ı ilk yazıldığında C++ ile yazıldı. Bak gerçekten kasti yaptığını düşünmeye başlayacağım. TÜM derleyiciler ilk aşamada başka bir dilde yazılmış programlardır. Assembler ve C++ compiler'ı bir istisna. Assembler yanılmıyorsam hand coded. C++ ise C için hazırlanmış dialect olan C with classes kullanarak preprocesser'ı hazırlıyor. C++'ın kendi özellikleri için derleyici kendi becerilerini kullanırken kalan C becerileri için C'nin compilerlarından yararlanıyor. Bkz.

Bunun dışında, C (Assembly), C# (C++), Rust (OCaml), Python (C), Go (C), Swift (C++), Java (C), Haskell (LML), Fortran, Forth, OCaml... Her birinin derleyicisi ilk aşamada başka bir dilde yazılmış programlardan biri.

Python'un derleyicisi yok, yorumlayıcısı var.
Wiki her zaman doğru değil ancak bu konu hakkında doğru olduğunu düşünüyor ve aynı fikri paylaşıyorum wikiyle.
1693923947690.png
 
Python'un derleyicisi yok, yorumlayıcısı var. C#'ın derleyicisi var ancak makine diline çevirmez, ara dil denilen byte koduna derler, program çalıştırıldığında ise byte kodu JIT tarafından anlık olarak yürütülme esnasında makine diline çevrilir. C++ ise derleyicisi tarafından doğrudan makine koduna derlenir.

Neyin ne olduğunu bilmeden yorum yapmayın.

Bende bu söylediğin şeyden bahsediyorum işte. Fakat konuyu önceki arkadaş farklı noktaya çekti. Ben diyorum ki çevirici dediğin şey (compiler) makine diline dönüştürür. Bunun dil ile alakası yok. Python ile derleyici yapamazsın. Derleyici yapabilmen için kodunun karşılığını makine diline çevirmesi gerekiyor.

Eğer sen bir dil oluşturup, bu kodları başka bir programlama dilinin derleyicisinde makine diline çeviriyorsan bu senin yaptığın derleyici olmaz.

Bilal'e anlatır gibi anlattım umarım bu sefer anlamışsınızdır.
 
Wiki her zaman doğru değil ancak bu konu hakkında doğru olduğunu düşünüyor ve aynı fikri paylaşıyorum wikiyle.
Eki Görüntüle 1932225
Python bunu interpreting esnasında yapıyor, kaynak kod'u çalıştırdığın an eş zamanlı olarak aksi halde derleniyor diyebilirdik.
Bende bu söylediğin şeyden bahsediyorum işte. Fakat konuyu önceki arkadaş farklı noktaya çekti. Ben diyorum ki çevirici dediğin şey (compiler) makine diline dönüştürür. Bunun dil ile alakası yok. Python ile derleyici yapamazsın. Derleyici yapabilmen için kodunun karşılığını makine diline çevirmesi gerekiyor.

Eğer sen bir dil oluşturup, bu kodları başka bir programlama dilinin derleyicisinde makine diline çeviriyorsan bu senin yaptığın derleyici olmaz.

Bilal'e anlatır gibi anlattım umarım bu sefer anlamışsınızdır.
Derleyici dediğimiz şey bir otomasyon yazılımı ve bunu hangi programlama diliyle yazdığının bir önemi yok.
 

Yeni konular

Geri
Yukarı