folder Tahribat.com Forumları
linefolder Programlamaya Giriş
linefolder Programlama Dili Nasıl Yazılır



Programlama Dili Nasıl Yazılır

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    onur_123
    onur_123's avatar
    Kayıt Tarihi: 08/Aralık/2009
    Erkek

    evet hacılar sıfırdan bir programlama dili nasıl yazılır nelere ihtiyaç duyulur


    Yazılım mühendisliği karanlık bir odada kara kedi aramaya benzer.Donanım mühendisliği karanlık bir odada kara kedi aramaya benzer ama odada kedi filan yoktur.Sistem mühendisliği karanlık bir odada kara kedi aramaya benzer;odada kedi yoktur ama birileri "Kediyi yakaladım" diye bağırır.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    adam akıllı bir şeyden bahsediyorsan:

     

    İşletim sistemi yazmaktan zordur o kadarını söyliyeyim.

    (native kod destekli bir dilden bahsediyorum)

     

    Zira programlama dili yazmak artık eskisi gibi değil:

    Dil bilimcisi ayrı

    derleyici yazarı ayrı

    Platform desteklemek ayrı

    bir mesele haline geldi.


    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Kreston
    Kreston's avatar
    Üstün Hizmet Madalyası
    Kayıt Tarihi: 28/Aralık/2002
    Erkek

    geç kaldın yiğenim


    Zimbabwe
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    Programlama dili ,kağıt üzerinde oluşturulmuş bir kurallar topluluğudur, kendi dilini yazmak için beynin dışında herhangi bir araca ihtiyacın yok.

    Hülasa, dili kağıt üzerinde yaratırsın, ister kendin, ister başka bir programcı, istediğin platform için derleyicisini yazar. Derleyici yazmak ve programlama dili tasarlamak tamamen farklı alanlardır.

    Programlama dili tasarımı bir sanat gibi görülebilir, örneğin C dilinin operatörleri, pointerlari , fonksiyon çağırma biçimi vs. makina dili ile mükemmel bir uyum içindedir, ancak C derleyicisi sıradan bir programdır ve C kodunu belirli aşamalardan geçirip (atomlarına ayırma, syntax semantic analiz, optimizasyon, kod üretimi vb) makina koduna dönüştürür.

    DrKill, hiç işletim sistemi programlama ve programlama dili tasarımı konularıyla ilgilendin mi, eğer ilgilenmediysen böyle bir karşılaştırma yapmanı doğru bulmuyorum.

    Zira bir işletim sisteminin yazımı sanıldığı kadar kolay değil. Siz program yazarken doğrudan işlemci kodlarını kullanıyorsunuz, her işi işletim sistemi hallediyor.

    Oysa işletim sistemi programlarken bilgisayardaki tüm çipleri programlamanız gerekiyor, irq lar için 8259 interrupt controller'i (PIC) , process geçişleri için 8253 timer (PIT), hdd ve cd rom vb veri alışverişi için DMA yı , hatta keyboard için 8042 keyboard controlleri ve daha birsürü aygıtı programlaman gerekiyor. Kaldıki bu kernelin en temel donanım bölümü. Birsürü veri yapısını (bağlı liste, ikili ağaç , kuyruk ) adından iyi bilmen ve uygulayabilmen, çok iyi teorik bilgi vs. gerekiyor.

    Ayrıca korumalı mod mimarisi, sistem registerleri , bellek ve process yönetimine ve işin en önemli kısmı grafik sistemine hiç girmeyelim.

    Onur, eğer programlama dili yazmak istiyorsan ilk iş, turing makinasını araştır, daha sonra brainfucker dilini araştır, bu dil, teoride tüm programlama dillerinin yaptıklarını yapabilen, turing makinasının pc versiyonudru. Hatta bu dilin birkaç kb boyutunda derleyicileri var, bende zamanında bir derleyicisini yazmıştım.

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    Programlama dili yazıyorsan öncelikle hangi platformda çalıştığı önemli

    ASP, PHP, javascript gibi diller script dilleridir.bunlar runtimeda compile olur hızlıca hazır bir apache, IIS interface i uzerine oturan bişeye çevrilir.

    C++, delphi gibi diller native kod üretir işlemcinin anlayacağı şekildedir yani

    asp.net , java gibi diller virtual machine altında çalışır, işlemcinin anlayacağı assembly tarzı değil msil tarzı ara bir dile çevrilir platform independent olması açısından.

    arkadaşın bahsettiği brainfuck dili de bambaşka bir kategoride tuhaf bişey, kurcalamıştım.

     

    En yaygın olan c++ tarzı bir dili anlatayım. Öncelikle dilin anladığı temel komutlar vardır if , for , while, include zart zurt gibi bu dilin kurallarını anlayacak bir motor yazılır. bu motor kodu compile ederken Logic of nested containment dediğimiz parantez içinde parantez kullanımı, fazla parantez kapama varmi ? fonksiyonlara gerektiği tipte gerektiği sayıda parametre gönderilmişmi gibi şeyleri de kontrol eder.

    C++ gibi bir dil Bu temel kodları onlara karşılık gelecek assembly instructionlarına çevirir (örn while in assemblysi nasil oldugunu bilmektedir, kurallar zincirine gore uzuun bir assembly oluşturur) . Çevirdiği kodu mov ax, 1000 falan gibi insanın göreceği formatta değil de PCnin anlayacağı sayısal formda save eder. (her assembly komutunun bir sayısal karşılığı vardır ve alması gereken parametre boyutu bellidir). dosyanın başına sonuna gerekli headerları, resourceları, degisken tablolarını yazar.

    Birde temel olmayan komutlar dışında librarylerin içinden gelen komutlar vardır mesela #include yazarsan cout komutunu kullanabilirsin. burada #include komut değil compiler directivedir. Compiler directiveler derlenecek kodun derlenmeden onceki compiletimedaki modifikasyonunda kullanılır. yani gerçekte compiler kodunu uzuuun tek bir c dosyası gibi hafızasında oluşturup diğer aşamaları bundan sonra gerçekleştirecektir.

    İşlemcinin anladığı tek dil assemblydir, onun için c++ dosyalarının temel komutları dışında donanım erişimi gibi işler için mutlaka içinde assembly blokları olmalıdır. C++ derleyicisi oluşturduğu assemblynin içine bunları katmasını da bilir. PC donanımının anladığı tek dil olan assemblye bir binary converterdır aslında compiler dediğimiz şey. Fakat moderen compilerlar debug da yapabiliyor bu kadar basitse o nasıl oluyor dicen, bende dicem ki işlemcilerin sadece o iş için bacakları var donanımsal olarak durdurur, breakpoint koyar, o an isleneni cekip okutabilirsiniz.

    Buraya kadar yazdımda şimdi anladım ki tamamını anlatmam sayfalar sürer acaip özet geçiorum zaten. ama işin donanım tarafıda var siktir et abi üzümü ye bağını sorma =)

    İşin özeti bu tip şeyler hepsi kendi alanında anormal uzman 100 lerce kişi tarafından yazılır. Olayın tamamını anlamak için donanım üreticisinden yazılımcısına, kernel yazandan os yazanına hepsinin az çok ne işle uğraştığını anlaman lazım anca o zaman bu işin nasıl yapıldığı ile ilgili bişey oturabilir kafanda.


    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    Ben de sana yol gösterecek bazı temel bilgileri vereyim, tabi derleyici yazabilmen için çok sağlam assembly bilgisi şart, çünkü derleyicinin amacı kaynak kodunu makina diline çevirmektir.

    Derleyiciler , kodu direkt makina koduna çevirmezler, linux ve windows derleyicileri önce kodu assembly diline çevirir ve ayrı bir programla (assembler) makina diline çevrilir. Son olarak linker ile bölümler (kod , data vs) ayrı ayrı çıktı dosyasına (windows da .exe ) yazılır. Mesela gcc derleyicisi kendi içinde önce cc1 i çağırır, bu kaynak kodun asm çıktısını üretir.

    Derleme aşamasında şunlar gerçekleşir.

    lexical analysis:

    Burda kaynak kod atomlarına ayrılır. Atom kodun daha fazla bölünemeyecek en küçük birimidir. Örnek, sabit sayılar, stringler, anahtar sözcükler, operatörler vb.

    C dili için if ( a == 0) return 1; ifadesinin atomlarına ayrılmış hali : if , ( , a , == , 0 , ), return , 1, ; şeklindedir.

    Kod atomlarına ayrıldıktan sonra syntax analysis aşamasına geçilir.

    syntax analysis :

    Bu aşamada ifadelerin  , dilin sözdizimi kurallarına uyup uymadığı kontrol edilir, mesela if anahtar sözcüğü görüldüyse sonraki atom ( olmalıdır. return ve 1 atomlarından sonra ise ; atomu gelmelidir.

    Eğer gelmezse derleyici syntax error verir.. Syntax analysis aşamasında dil kuralları kontrol edilmez. Sadece dilin sözdizimine uygunluk kontrol edilir. Daha sonra semantic analysis aşamasına geçilir.

    semantic analysis :

    Burada dilin sözdizimine uyan ancak dil kurallarına uymayan ifadeler tespit edilir, örneğin tanımlanmamış bir değişken kullanıldığında, ya da sadece 2 parametresi olan bir fonksiyon 3 parametre ile çağırıldığında bunu syntax analyzer farkedemez. işte bu tür kontroller semantic analyzer in görevidir.

    tüm kontroller bittikten sonra artık optimizasyon yapılır ve kod üretimine geçilir. Kod üretimi sırasında, derleyici ,kodları, daha önce kendisine belirtildiği şekilde assembly koduna çevirir.

    Assembly koduna çevrildikten sonra bu kodların gerçek koda dönüşmesi gerekir, ancak bu da hemen olmaz. Önce assembler ile obj modülü yaratılır. bu modülde kod için text,  veriler için data, sabit veriler için bss, gibi bölümler ayrı ayrı bulunur.

    Ayrıca .obj (yada linux da .o ) modülünde, sabit değişkenlerin isimleri , fonksiyon isimleri gibi isimler bulunur. Linker , tüm bu bölümleri çıktı dosyasında (win. için .exe) ayrı ayrı yerlere koyar, bağlama işlemi kodu , datayı vs. uç uca bağlamaktan biraz daha karmaşıktır, özellikle dinamik kütüphane fonksiyonları kod içinde kullanılıyor ise başka olaylar olur.

    Aslında link aşamasını ayrıntılı olarak anlatmıştım bir yerde, eğer onu da merak ediyorsan ordan okuyabilirsin, tamamını buraya kopyalamak istemedim.

    http://ddili.org/forum/post/1909

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    onur_123
    onur_123's avatar
    Kayıt Tarihi: 08/Aralık/2009
    Erkek

    @HolyOne ve @Tugberk verdiğniz bilgiler için teşekürler 

    baya bi karışık bişeymiş bu dil yazmak en iyisi ben var olanlanı kulanayım


    Yazılım mühendisliği karanlık bir odada kara kedi aramaya benzer.Donanım mühendisliği karanlık bir odada kara kedi aramaya benzer ama odada kedi filan yoktur.Sistem mühendisliği karanlık bir odada kara kedi aramaya benzer;odada kedi yoktur ama birileri "Kediyi yakaladım" diye bağırır.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    Türkçede okunduğu gibi yazılır

    Programlama Dili

    şeklinde

    İngilizcesi

    Programming Language

    şeklinde yazılır

    progreaming leğengüıc

    şeklinde telaffuz edilebilir

    :F

     

    intihar edesim var


    Din Kitaplarını Okuyup Anlayana Ateist, Okuyup Anlamayanlara "dindar" denir... Nikola TESLA.. ben mi? Ne okurum ne anlarım... Kendi kendime de uyuz oluyorum ama olamıyorum.. "Ama efsaneyi çıkarıp atarsan ve yaptıkları eylemlere bakarsan... ..Jedi'ların mirası başarısızlıktır. İkiyüzlülüktür, kibirdir."
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    @HolyOne 

    Şeyhim LUA konusunda engin bilgileriniz var mı?

    Türkçe kaynak bulamadım pek... LUA kasmak istiyorum...


    Din Kitaplarını Okuyup Anlayana Ateist, Okuyup Anlamayanlara "dindar" denir... Nikola TESLA.. ben mi? Ne okurum ne anlarım... Kendi kendime de uyuz oluyorum ama olamıyorum.. "Ama efsaneyi çıkarıp atarsan ve yaptıkları eylemlere bakarsan... ..Jedi'ların mirası başarısızlıktır. İkiyüzlülüktür, kibirdir."
Toplam Hit: 4886 Toplam Mesaj: 9