Şimdi Ara

Kendi Postmodern Static Typed Programlama Dilimi Nasıl Yaparım? (Ciddiyim)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
13
Cevap
2
Favori
959
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
1 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar arkadaşlar. 8 yıllık programalma tecrübemden sonra kendi postmodern static typed programlama dilimi yapmaya karar verdim. Sizden bilmek istediklerimden önce nasıl bu noktaya vardığımı açıklamak istiyroum. Öncelikle bazı seviyesiz insanların bu konuya gelip saçma sapan şeyler yazmasını kesinlikle istemiyorum. Her neyse bi anlatayım. Arkadaşlar programlaya önce Python ile başladım ozamanlar çok amatördüm sonra C öğrendim ve bu sayede bilgisayarın yapısını daha iyi kavramaya başladım sonra da Java öğrendıkten sonra OOP hakkında çok şey öğrendim sonra da C# öğrenip OOP'de kendımı önemli ölçüde gelistirdim. Bana göre C# Java'dan çok daha gelişmiş bir dildir. Fakat arkadaşlar C# nekadar gelişmiş bir OOP dili olursa olsun yine de dil de birsürü olmayan eksik özellik gördüm. Ve bende bu özellikleri içeren gelişmiş, postmodern bir static typed programlama dili yapmak istiyorum.


    Şimdi gelelim nasıl sorularına


    Hangi dil ile yazmak istiyorum: Şu zaten açıkca ortada ki static typed dillerinin native hali C++ ile yazılıyor. Mesela JNI (Java Native Interface) bu yuzden dilimi C++ ile yazmaya karar verdim. (Bunun için nekadar vaktimi alırsa alsın C++ öğreneceğim)


    IDE: işte bu konu da çok az bilgim var CLION diye sağlam bir ide var ama o da ücretli ama eğer onunla yapmak en uygunuysa olsun o ücreti bir şekilde öderim veya bir yolunu bulurum. Dolayısıyla hangı IDE ile yapmalıyım konusunu sizden öğrenmek istiyorum.


    Compıler: Benim tercihim GCC, G++ sızın oneriniz nedir?


    Bytecode'mu yoksa binary code mu?: Benim tercihim bu programlama dili ile yazılmış programların rahat crash vermeden çalışabilmesi için binary code evet farklı işletim sistemleri için farklı binary code üretse de yıne binary code. fakat bytecode'da olabilir eğer bytecode ise neden?


    Okadar Librar'yi nasıl yapacaksın sorusu: Çok klişe bir soru. Python'ı yapan kişi nasıl sadece Python'u yaptı ve sonrasında diğerleri o dil için library'ler yazarak o dilin güçlenmesini sağladıysa bende sadece en temel yanı dilin çalışması için gerekli library'leri yazacağım. Ve sonra kendi ihtiyacıma ve ihtiyaçlara göre zamanla library ekleyeceğim. Diğer birçok kişi de tıpkı Python'da olduğu gibi benım dili me library yazarak dilimin güçlenmesini sağlayacaklar. Sonuçta gerçekten sağlam bir dilse neden olmasın?


    Evet benden bukdar. Tekrar söylüyorum eğer amacınız benımle dalga geçmekse boşu boşuna yazmayın. Ben çok ciddiyim isterse 5-6 yılımı hatta 10 yılımı alsın yine de yapmaya kararlıyım.


    Teşekkürler.








  • Bu iş için c++ öğrenmek kesinlike hatalı bir başlangıç olur. En iyi hangi dili biliyorsan onunla yaz. Native kod falan şimdilik unut bunları.

    Öncelikle çok basit bir dil oluştur. Dilin kurallarını en ince ayrıntısına kadar belirle. Sonra bu dil için parser yazacaksın. Bu gibi işler için parser generator denilen araçlar kullanılır. Dilin dilbilgisi kurallarını içeren bir dosya hazırlıyorsun ve bu araç sana bir kaynak kod oluşturuyor. Bu kaynak kod ile o dilde yazılan kodu okuyabilirsin.

    İşin eğlenceli kısmı bundan sonra başlar. İster direkt kaynak kodu yorumlayan bir script motoru yazarsın. İster javadaki gibi bir bytecode tasarlayıp kodu buna dönüştürürsün. Eğer standart bir bytecode kullanırsan bunun için bir motor yazmana gerek kalmaz. Mesela programını java bytecode'a dönüştürdün, JVM altında çalışabilir. Kotlin bu mantıkla çalışır örneğin.

    Peki native kod nasıl olacak dersen bunun için de LLVM var. Kaynak kodunu llvm ir denilen bir ara koda çeviriyorsun (bunun için gerekli araçlar var) ve kodun llvm derleyicisinin desteklediği tüm cpu komut setlerine derlenebiliyor. C++ bu noktada gerekebilir.




  • quote:

    Orijinalden alıntı: EmuDev

    Bu iş için c++ öğrenmek kesinlike hatalı bir başlangıç olur. En iyi hangi dili biliyorsan onunla yaz. Native kod falan şimdilik unut bunları.

    Öncelikle çok basit bir dil oluştur. Dilin kurallarını en ince ayrıntısına kadar belirle. Sonra bu dil için parser yazacaksın. Bu gibi işler için parser generator denilen araçlar kullanılır. Dilin dilbilgisi kurallarını içeren bir dosya hazırlıyorsun ve bu araç sana bir kaynak kod oluşturuyor. Bu kaynak kod ile o dilde yazılan kodu okuyabilirsin.

    İşin eğlenceli kısmı bundan sonra başlar. İster direkt kaynak kodu yorumlayan bir script motoru yazarsın. İster javadaki gibi bir bytecode tasarlayıp kodu buna dönüştürürsün. Eğer standart bir bytecode kullanırsan bunun için bir motor yazmana gerek kalmaz. Mesela programını java bytecode'a dönüştürdün, JVM altında çalışabilir. Kotlin bu mantıkla çalışır örneğin.

    Peki native kod nasıl olacak dersen bunun için de LLVM var. Kaynak kodunu llvm ir denilen bir ara koda çeviriyorsun (bunun için gerekli araçlar var) ve kodun llvm derleyicisinin desteklediği tüm cpu komut setlerine derlenebiliyor. C++ bu noktada gerekebilir.

    Hocam öncelikle bilgilendirdiğiniz için teşekkür ederim. Yazdıklarınızın hepsini yüzde kaç oranda uygularım bilmiyorum ama kendi kafamda çizdiğim ufak bir harıtayı açıklamak istiyorum.


    İnternetten OpenJDK'in ve C#'ın open soruce projesi olan C# Mono'nun kaynak kodlarını indirdim ve ikisini de CLion idesiyle açtım. İlkönce bu iki büyük projeyi incelyebildiğim kadar incelemek sonra ikisinin karışımından kendi dilimi yapmak istiyorum. Sizin bu konu hakkındaki düşünceleriniz nedir?





  • Onu bilemem, kişiden kişiye değişir. Şahsen bana kaynak kod okumak zor geliyor. En azından işin temeli hakkında bilgi sahibi olmadan o koddan birşey anlamak pek olası değil.


    Ancak sen olayın hangi tarafı ile ilgilisin öncelikle bunu belirle. Sadece yeni bir dil tasarlamak istiyorsan o zaman yanlış şeylere odaklanıyorsun. Openjdk ve Mono birer yorumlayıcıdır. Verirsin kaynak kodunu çalıştırırlar. Sen yeni bir tasarlamak istediğini söyledin. Dolayısıyla bunlarla işin olmamalı, en azından şimdilik.


    Şu anlık bakman gerekenler dilin grammarını en ince ayrıntısına kadar belirlemek, bnf notasyonu ile grammarı yazmak, parser generator ile parser üretmek ve kaynak kodunu doğru şekilde okutabilmek. Piyasadaki prog. dillerinin %90'ı olayın sadece bu kadarı ile ilgilidir. Ne derleyici ne yorumlayıcı ne VM ile uğraşmazlar. Sadece dilin grammarını yazarlar, gerisini hazır araçlarla hallederler. Hatta bazı diller sadece başka bir dile dönüşerek işi kotarırlar. Örneğin Nim dili C'ye derlenir. C zaten seviyesinden dolayı arakod gibidir.





  • Alıntı

    metni:
    Fakat arkadaşlar C# nekadar gelişmiş bir OOP dili olursa olsun yine de dil de birsürü olmayan eksik özellik gördüm. Ve bende bu özellikleri içeren gelişmiş, postmodern bir static typed programlama dili yapmak istiyorum.


    @psikolojikSorunlu.insan öncelikle şu gördüğün eksikleri bir listeleyebilirsen bizde bakalım. Belkide hepsi halihazırda vardır ve yeni bir dil icat etmene gerek kalmaz.

  • EmuDev E kullanıcısına yanıt

    Hocam piyasadaki hazır araçların benim yapacağım dili hazırlayabileceklerini sanmıyorum çünkü çok fazla advanced, postmodern bir dil oalcak olacak. Ben dili direk assembly'e çevirmek istiyorum. Ve işletim sistemindeki .dll library ve önemli dosyaların dilde kullanımı içinde bu dosyaları benım dilime çeviren bir loader yazmak istiyorum. tıpkı Python'da Pythonnet library'si gibi. Yani zaten amacım başından beri böyle birçok dilde olan özelliği içeren pek bir fark yaratmayan bir dil yapmak olsaydı dediğinizi yapardım fakat benim amacım tüm bunların ötesine geçmek.

  • controller_ kullanıcısına yanıt

    Onların hepsini şuan yazmak istemiyorum ama iyice bazı şeyleri netleştirdikten sonra burada yazarım.


    Yine de kısaca bir bilgi vereyim: "Generic Names for Name Conflıct", "Names in Name String (n"Multi-Line and Every Possible Characters in UTF-8 Name")", "Strings in String String (s"Every Possible String")", "Numbers in Number String (r"12345", r"3.14")", "Types in Type String (t"Multi-Line and Every Possible Characters in UTF-8 Type Name")", "Keywords in Keywords String (k"keyworda, keywordb, ...")", "Generic Numbers", "Generic Strings", "Generic Objects", "Generic Booleans", "Multi Parametered Consturctors for Generic Type Parameters like new(TpyeX, TypeY, ...) Instead only new() in C#"


    Ve daha aklıma gelen ve gelecek olan birsürü özellik. Şuan aklıma gelenlerin hepsini yazmadım bile, birde gelecek olanlar var.


    Ben şuan Unity ile oyun geliştiriyorum ve C# kullanırken çok fazla yakınıyıroum. Çünkü C# bile bana çok ilkel geliyor. Bu arayışlarım sonucu kendi dili mi yapmaya karar verdim. Ha oyun yapmayı yine bırakmadım ama vaktimin bir kısmını da bu dili yapmak için geçiriyorum. Yapmak istediğim oyunları bitirince zaten çok büyük ihtimal dilin tasarımını da bitirmiş olacağım. Ve o zamandan sonra artık oyun yapmakla meşgul olmayacağım için tasarımı hayata geçirmek için gerekli adımları atmayı düşünüyorum.




    < Bu mesaj bu kişi tarafından değiştirildi psikolojikSorunlu.insan -- 23 Temmuz 2023; 1:53:54 >




  • Abi çoban salta yapacağım, ama pazardaki hıyarları beğenmiyorum, çoban salatam düzgün olmuyor, dolayısı ile kafama göre hıyar yetiştirmek için, önce seranın iskeleti için özel metal alaşımı, sonra hıyarın serada mükemmel olması için ihtiyacı olan %73 geçirgenliğe sahip camı icad edip sonrada bunları üretecek fabrikayı yapmak istiyorum ayrıca fabrikanın iyi üretim yapması için torosların tepesindeki özel suyu kullanması gerekiyor.


    Sebep ? Mükemmel çoban salatası için... Evet.

  • Delifisek.Tux kullanıcısına yanıt

    :D Eğer yapabilme imkanım olursa neden olamsın? En azından o güzel lezzetli çoban salatasından sadece ben yemeyeceğim birçok kişi yiyecek.

  • Aldığım son karar: Programlama dilimi belirli programlama dillerinde çalışan bir alt dil olarak yapmaya karar verdim. Örneğin programlama dilimin adı diyelimki Norman olsun normanın Python versıyonu NormanPy olacak ve tıpkı bir libarary gibi Python'a yüklenecek ve Python'da bir alt dil olarak çalışacak. C# versiyonu da Norman# olacak, C++ versıyonu Norman++ olacak, Java versıyonu NormanJ olacak, C versiyonu da NormanC olacak.


    Pekı okadar library ne oalcak sorusunun cevabı da çok basit bir loader yazacağım ve Norman dili ana dildeki tüm class'ları ve şeyleri load edecek. Bu sayede Norman dili içerisinde ana dilin tüm library'lerini kullanabileceksin.




    < Bu mesaj bu kişi tarafından değiştirildi psikolojikSorunlu.insan -- 30 Temmuz 2023; 19:30:40 >
  • Piyasada bu kadar çok dil varken neden yeni bir dil yapmakla uğraşıyorsunuz? oyun yapmak için sadece c# kullanılmıyor. Başka dillere bakın.

    Şahsen projeyi bitirmeye bakarım, dildeki eksiklere değil.

    Ben de mesela flutter'ın her os için native kod üretmesi isterdim ama kalkıp bunun için uğraşmam.

    Kısaca, çok kasma hocam.
  • kreat kullanıcısına yanıt

    Bazi dillerin felsefesi benzer olsada. benim dilimin felsefesi cok farkli olacagi icin bu dili yapmayi dusunuyorum.

  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.