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.

adam akıllı bir şeyden bahsediyorsan: İşletim sistemi yazmaktan zordur o kadarını syliyeyim. 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 grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir

Ben de sana yol gsterecek 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 makina diline çevrilir. Son olarak linker ile blümler ayrı ayrı çıktı dosyasına 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 blünemeyecek en küçük birimidir. rnek, sabit sayılar, stringler, anahtar szcükler, operatrler 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 szdizimi kurallarına uyup uymadığı kontrol edilir, mesela if anahtar szcüğü grü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 szdizimine uygunluk kontrol edilir. Daha sonra semantic analysis aşamasına geçilir. semantic analysis : Burada dilin szdizimine 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 grevidir. 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 dnüş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 blümler ayrı ayrı bulunur. Ayrıca. obj modülünde, sabit değişkenlerin isimleri, fonksiyon isimleri gibi isimler bulunur. Linker, tüm bu blümleri çıktı dosyasında 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

@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."

@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.

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."

geç kaldın yiğenim Zimbabwe

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 grülebilir, rneğin C dilinin operatrleri, 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 makina koduna dnüştürür. DrKill, hiç işletim sistemi programlama ve programlama dili tasarımı konularıyla ilgilendin mi, eğer ilgilenmediysen byle 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 , process geçişleri için 8253 timer , 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 blümü. Birsürü veri yapısını adından iyi bilmen ve uygulayabilmen, çok iyi teorik bilgi vs. gerekiyor. Ayrıca korumalı mod mimarisi, sistem registerleri, bellek ve process ynetimine 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.

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 gnderilmişmi gibi şeyleri de kontrol eder. C++ gibi bir dil Bu temel kodları onlara karşılık gelecek assembly instructionlarına çevirir . Çevirdiği kodu mov ax, 1000 falan gibi insanın greceği formatta değil de PCnin anlayacağı sayısal formda save eder. . 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ı ktektir!