C kullanarak programlama dili oluşturma

Yazılım geliştiricilerinin kullandığı geliştirme ortamları (IDE), programları derleme, debug gibi çeşitli aşamaları içerir ve yönetir. Bu aşamalar sonucunda programlama dili ile yazılmış olan algoritmik kodlar assembly dili ve daha sonra makine kodu adını verdiğimiz şekle dönüştürülür ve o şekilde çalıştırlır. Bir .exe dosyası çalıştırdığımızda da bu şekilde olay gerçekleşir. (Assembly hakkında daha fazla bilgi için şu linki inceleyiniz.)

Assembly dili ile programlama hem haddinden fazla zor, hem de anlaşılabilirlik açısından karmaşıktır. Bu sebeple zaman ilerledikçe mühendislik yaklaşımı gereği programlama dilleri giderek basitleşmiş ve kapsamlarını büyütülmüştür. Şu anda yazılım geliştirdiğimiz IDE'ler ise bir tür arayüz görevi görmektedir. Bu şekilde ilerleyerek programlama dilleri hızlı yazım ve anlaşılabilirlik için kolaylaşarak bu arayüzler üzerine kabaca farklı yazılım dilleri koyularak gelişmiş diye biliriz.

Şu an tamamen uydurma bir örnek yazacağım. Mantığı anlaman için;
Makine Dili -> 010101000101 gibi düşün.
Assembly -> C02A PTR A
Programala dili -> printf diyelim.
Programlama Dilleri de giderek bu şekilde basitleşti.
printf -> print oldu. Fonksiyonel yaklaşımlar daha çok arttı.

Süreç üretilecek olan yazılımların daha hızlı ve anlaşılır olmasını sağlamak, zaman maliyetini düşürmek yaklaşımı ile ilerledi. Buna dair kapsamlıca araştırma yapman gerek. Benim burada yazdıklarım kabaca dışarıdan bir bakış.

İşin özü programlama dillerinin üretilmesi ve oluşturulmasının amacı zaman maliyetini azaltmak, kolay kullanım ve anlaşılabilirlik sağlamaktır. Bu yüzden mühendislik yaklaşımı gereği programla dilleri geliştirilerek yukarıda verdiğim dönüşümün daha verimli, hızlı yapılması hedefleniyor. Yazılım dili oluşturmak bu arayüzü oluşturmak gibi düşünebilirsin.

Umarım yardımcı olabilirmişimdir, sağlıcakla kal.
 
Günümüzde çoğu dil C ile geliştiriliyor ama mesela C#'ın compiler implementasyonu yine C# ile yazılıyor.

Sorunuzu biraz netleştirmeniz lazım, nasıl bir dil geliştirmekten bahsediyorsunuz? Scripting dili mi yoksa native bir dil mi?

İkisi lexical anylsisden sonra çok farklılaşıyor:
* Native bir dilin derleyicisi Assembly çıktısı üretir; bunun için de farklı platformlar için ciddi bir Assembly bilgisi gerekir.
* Scripting runtimeı gliştirmek çok daha farklı bişi; daha kolay diyebilir miyiz? aslında hayır; bu dilin özelliklerine göre değişir.

Assembly çıktısı oluşturmak da çok zor bir iş ama basit bir dil geliştiriliyorsa nispeten basit diyebiliriz. Scripting runtimeı geliştiriliyorsa, yine dilin özellikleri önemli.

Native dil geliştirmenin kabaca aşamaları:
* Lexical analysis
* Parsing
* Compiling > Assembly
* Assembling

Scripting dili geliştirmenin kabaca aşamaları:
* Lexical analysis
* Parsing
* Runtime (VM)
* Binding
* Binding interface
* Abstracted platform functions
* Standart library

Lexerdan çıkan tokenlar parser tarafından iterate edilerek runtimeda işletilir. Binding implementasyonu ile platform-dependent abstractionlar yapılır, sonuç olarak C ile yazılan temel işlevler runtimeda dilin doğası içinde çalışırlar.
 
Günümüzde çoğu dil C ile geliştiriliyor ama mesela C#'ın compiler implementasyonu yine C# ile yazılıyor.

Sorunuzu biraz netleştirmeniz lazım, nasıl bir dil geliştirmekten bahsediyorsunuz? Scripting dili mi yoksa native bir dil mi?

İkisi lexical anylsisden sonra çok farklılaşıyor:
* Native bir dilin derleyicisi Assembly çıktısı üretir; bunun için de farklı platformlar için ciddi bir Assembly bilgisi gerekir.
* Scripting runtimeı gliştirmek çok daha farklı bişi; daha kolay diyebilir miyiz? aslında hayır; bu dilin özelliklerine göre değişir.

Assembly çıktısı oluşturmak da çok zor bir iş ama basit bir dil geliştiriliyorsa nispeten basit diyebiliriz. Scripting runtimeı geliştiriliyorsa, yine dilin özellikleri önemli.

Native dil geliştirmenin kabaca aşamaları:
* Lexical analysis
* Parsing
* Compiling > Assembly
* Assembling

Scripting dili geliştirmenin kabaca aşamaları:
* Lexical analysis
* Parsing
* Runtime (VM)
* Binding
* Binding interface
* Abstracted platform functions
* Standart library

Lexerdan çıkan tokenlar parser tarafından iterate edilerek runtimeda işletilir. Binding implementasyonu ile platform-dependent abstractionlar yapılır, sonuç olarak C ile yazılan temel işlevler runtimeda dilin doğası içinde çalışırlar.
Sadece bir kaç fonksiyonu yerine getiren, basit bir dil oluşturmak istiyorum.
 
Yazılım geliştiricilerinin kullandığı geliştirme ortamları (IDE), programları derleme, debug gibi çeşitli aşamaları içerir ve yönetir. Bu aşamalar sonucunda programlama dili ile yazılmış olan algoritmik kodlar assembly dili ve daha sonra makine kodu adını verdiğimiz şekle dönüştürülür ve o şekilde çalıştırlır. Bir .exe dosyası çalıştırdığımızda da bu şekilde olay gerçekleşir. (Assembly hakkında daha fazla bilgi için şu linki inceleyiniz.)

Assembly dili ile programlama hem haddinden fazla zor, hem de anlaşılabilirlik açısından karmaşıktır. Bu sebeple zaman ilerledikçe mühendislik yaklaşımı gereği programlama dilleri giderek basitleşmiş ve kapsamlarını büyütülmüştür. Şu anda yazılım geliştirdiğimiz IDE'ler ise bir tür arayüz görevi görmektedir. Bu şekilde ilerleyerek programlama dilleri hızlı yazım ve anlaşılabilirlik için kolaylaşarak bu arayüzler üzerine kabaca farklı yazılım dilleri koyularak gelişmiş diye biliriz.

Şu an tamamen uydurma bir örnek yazacağım. Mantığı anlaman için;
Makine Dili -> 010101000101 gibi düşün.
Assembly -> C02A PTR A
Programala dili -> printf diyelim.
Programlama Dilleri de giderek bu şekilde basitleşti.
printf -> print oldu. Fonksiyonel yaklaşımlar daha çok arttı.

Süreç üretilecek olan yazılımların daha hızlı ve anlaşılır olmasını sağlamak, zaman maliyetini düşürmek yaklaşımı ile ilerledi. Buna dair kapsamlıca araştırma yapman gerek. Benim burada yazdıklarım kabaca dışarıdan bir bakış.

İşin özü programlama dillerinin üretilmesi ve oluşturulmasının amacı zaman maliyetini azaltmak, kolay kullanım ve anlaşılabilirlik sağlamaktır. Bu yüzden mühendislik yaklaşımı gereği programla dilleri geliştirilerek yukarıda verdiğim dönüşümün daha verimli, hızlı yapılması hedefleniyor. Yazılım dili oluşturmak bu arayüzü oluşturmak gibi düşünebilirsin.

Umarım yardımcı olabilirmişimdir, sağlıcakla kal.
Teşekkür ederim.
 

Yeni mesajlar

Geri
Yukarı