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

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.
Diğer tüm derleyiciler, yapılmadı o zaman? Rust'ın self maintained olmadan önce compiler'ını falan yazmadılar. Python'ında yazmadılar. Kendi kendine oldu hepsi?
 
Diğer tüm derleyiciler, yapılmadı o zaman? Rust'ın self maintained olmadan önce compiler'ını falan yazmadılar. Python'ında yazmadılar. Kendi kendine oldu hepsi?
Dostum kafanız mı güzel sizin? Derleyicinin ne olduğunu öğren istersen önce.
 
Dostum kafanız mı güzel sizin? Derleyicinin ne olduğunu öğren istersen önce.
Bence bunu senin öğrenmeye ihtiyacın var. Tüm derleyiciler bir noktada başka bir dil tarafından geliştirilmiş belirli bir hedef platforma binary üreten yazılımlar. Python ile yazılım dili yazılmaz diye bir şey yok. Python ile yazılan şey illa interpreted olacak diye bir şey de yok. Python'la parse edecek sonrasında da binary üretecek. Niye mantıksız olsun ki? Python ile yazılmış bir compiler yavaş olur ayrı mesele, ama yazılamaz değil.
 
Bence bunu senin öğrenmeye ihtiyacın var. Tüm derleyiciler bir noktada başka bir dil tarafından geliştirilmiş belirli bir hedef platforma binary üreten yazılımlar. Python ile yazılım dili yazılmaz diye bir şey yok. Python ile yazılan şey illa interpreted olacak diye bir şey de yok. Python'la parse edecek sonrasında da binary üretecek. Niye mantıksız olsun ki? Python ile yazılmış bir compiler yavaş olur ayrı mesele, ama yazılamaz değil.
Dostum sen derleyicinin mantığını ve gerçekte ne olduğunu anlamamışsın. Neyse bildiğini zannedene öğretmekle uğraşamam. Kolay gelsin.
 
Dostum sen derleyicinin mantığını ve gerçekte ne olduğunu anlamamışsın. Neyse bildiğini zannedene öğretmekle uğraşamam. Kolay gelsin.
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;
Derleyiciler kaynak kodları makine koduna derleme görevine hizmet eden yazılımlardır. Bir programlama dilinin derleyicisi, o programlama dili kullanılarak yazılmış olan kodu hedef işlemci mimarisine göre uygun şekilde makine koduna derler ve genellikle çıktı olarak yürütülebilir dosyasının elde edilmesini sağlar.
Python'la parse edecek sonrasında da binary üretecek.
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 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.
 
Yani kendi dilini yapmaktan önce bence başkasının yaptığı daha basit dillerin parser'larını yazmak bence çok daha mantıklı. Örneğin, basit bir "regex parser" yaparak işe başlamak mantıklı olabilir; sonlu durum makinelerini, regex kullanmayı vs. öğretir bu sana.

Bence kendi dilini yapmak için çok erken. Kendi dilinin kullanışlı olması için belleği programcıya düzgün bir şekilde yönettirmelisin ki bu da tecrübe ile yapılabilecek bir şey; sonuçta yapacağın dilin derlenmiş veya yorumlanmış mı olacağını, nasıl derleneceğini/yorumlanacağını, nasıl optimizasyonlar yapacağını falan da buna göre seçeceksin.

Velhasıl kelam, tıpkı her İngilizce bilenin tutup da sözlük yazmaya kalkmasının saçma olacağı gibi bu da çok kullanışlı bir dil ortaya çıkartmayacaktır, en azından şimdiki teorik altyapın ile.
 
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?
Öncelikle bir programlama diliyle başka bir programlama dili yapılmaz diye bir iddiam olmadı. Fakat python ile 14 yaşında bir gencin programlama dili yaptım zannederek python içerisinde komutları karar yapıları yönlendirerek buna bir derleyici yazmayı amaçlamasından bahsettim.

İkinci olarak python gibi dillerle yaptığın her iş yine bu dil için oluşturulan derleyiciden geçer. Yani senin yeni bir derleyiciye ihtiyacın yok. Derleyici dediğin şey geliştirilen kodları, makine diline çevirir.

Yani yeni bir dil oluşturmak için sadece python bilerek yapılacak işler değil bunlar. 14 yaşındaki arkadaşımızın rust dilini geliştireceğini hayal ederek kendini tatmin etmeye devam et.

Gerçek anlamda bir programlama dili ve onun derleyicisini yapmak için öncelikle mikro denetleyici ile iletişime geçecek derleyiciyi yapman gerekir. Bu derleyiciyi (örneğin python'ı alabilirsin) başka bir dilin derleyicisi olarak kullandığında sen programlama dili yapmış olmuyorsun. Sadece giriş komutlarını değiştirmiş oluyorsun. Ayrıca dil dediğin şey sadece bir framework'e dönüşmüş olur.

Neyse dediğim gibi teknik terimlerden uzak insanlarla tartışacağım konular değil bunlar. Sen devam et.
 
Bence bunu senin öğrenmeye ihtiyacın var. Tüm derleyiciler bir noktada başka bir dil tarafından geliştirilmiş belirli bir hedef platforma binary üreten yazılımlar. Python ile yazılım dili yazılmaz diye bir şey yok. Python ile yazılan şey illa interpreted olacak diye bir şey de yok. Python'la parse edecek sonrasında da binary üretecek. Niye mantıksız olsun ki? Python ile yazılmış bir compiler yavaş olur ayrı mesele, ama yazılamaz değil.

İlk derleyici nasıl geliştirildi o zaman.
 
Yani yeni bir dil oluşturmak için sadece python bilerek yapılacak işler değil bunlar. 14 yaşındaki arkadaşımızın rust dilini geliştireceğini hayal ederek kendini tatmin etmeye devam et.
Hiç bir mesajımda böyle bir şey söylemedim. Yanlış bilgi veriyorsun, onu düzeltiyorum.
Gerçek anlamda bir programlama dili ve onun derleyicisini yapmak için öncelikle mikro denetleyici ile iletişime geçecek derleyiciyi yapman gerekir. Bu derleyiciyi (örneğin python'ı alabilirsin) başka bir dilin derleyicisi olarak kullandığında sen programlama dili yapmış olmuyorsun. Sadece giriş komutlarını değiştirmiş oluyorsun. Ayrıca dil dediğin şey sadece bir framework'e dönüşmüş olur.
Hayır, gerekmez. Python kullanarak interpreting yapacaksın demedim. Derleyeceksin dedim. Daha interpreting ve compiling arasındaki farkı bilmiyorsun sanırım. Kodu execute etmek için python kullanacağız demiyorum, kodu makine diline python kullanarak derleyeceğiz. Rustc yada Gcc tarafından derlenmiş kodlar, rustc yada gcc tarafından execute edilmiyor. Makine execute ediyor.
Neyse dediğim gibi teknik terimlerden uzak insanlarla tartışacağım konular değil bunlar. Sen devam et.
Teknik terimlerden uzak insanlar derken bir tane teknik terim kurdun, mikro denetleyici. Framework deyince teknik terim konuştuğunu mu sanıyorsun? Öyleyse al bak bende demişim. :D
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.
İkinci olarak python gibi dillerle yaptığın her iş yine bu dil için oluşturulan derleyiciden geçer. Yani senin yeni bir derleyiciye ihtiyacın yok. Derleyici dediğin şey geliştirilen kodları, makine diline çevirir.
Anlamadığın nokta bu zaten. Muhtemelen bilgin yetmediği için anlamıyorsun burayı. OCaml ile yazılmış early rust compiler'ı mesela mikro denetleyiciyle çalışmıyordu. OCaml derleyicisi tarafından derlenen bir yazılımdı. Derleyici dediğimiz şeyde bir program. Kompleks bir program, ama bir program sonuç itibariyle. Daha sonrasında rust kodları compile edilebilir hale geldikten ve iyice oturduktan sonra, sonraki compilerlar rust kullanarak yazılmaya başlandı ve early rust compilerları - OCaml ile yazılmış ve OCaml derleyicileri ile derlenmiş compilerlar - tarafından derlendi.
 
İlk derleyici nasıl geliştirildi o zaman.
Elle 1 ve 0'ları programlayarak. İşlemcinin referans dokümantasyonunda "opcode" denilen, işlemcinin anladığı 1 ve 0 kodları bulunur. Yazılan kelimeleri bu şekilde anlamlı 1 ve 0'lara dönüştürecek ilk derleyici geliştirildi.
 

Yeni konular

Geri
Yukarı