{"id":261,"date":"2015-01-14T23:30:08","date_gmt":"2015-01-14T23:30:08","guid":{"rendered":"http:\/\/enginmercan.com\/?p=261"},"modified":"2015-01-14T23:30:08","modified_gmt":"2015-01-14T23:30:08","slug":"ingenue","status":"publish","type":"post","link":"https:\/\/enginmercan.com\/?p=261","title":{"rendered":"Ingenue"},"content":{"rendered":"<p>Evet, askerliktir \u015fudur budur \u00e7ok zaman oldu. Askerde excel d\u0131\u015f\u0131nda kendimi pek geli\u015ftiremedim, o d\u00f6nemi bu kadar k\u0131sa bir \u00f6zetle ge\u00e7i\u015ftireyim \ud83d\ude42<\/p>\n<p>Ingenue nedir derseniz, tiyatro vb. de olan saf k\u0131z karakterlerine verilen isimmi\u015f. <\/p>\n<p>Ayn\u0131 zamanda yeni (ve \u00e7ok eski) projemin \u015fu anki kod ad\u0131 olarak se\u00e7tim, neden derseniz az \u00f6nce Atoms For Peace &#8211; Ingenue dinlemekte idim ve projenin geli\u015fme stili de oradaki dansa benzemekte.<\/p>\n<p>Kendisi bir programlama dili olmakta. Dynamic typing bir dil ve \u015fu anda bir interpreter \u00fczerinden \u00e7al\u0131\u015fmakta. Syntax olarak C ye baya bir benzer. &#8220;E neden yaz\u0131yorsun&#8221; derseniz \u00e7o\u011funlukla e\u011flence i\u00e7in. Ama dile yeni \u00f6zelliklerde getirmek istiyorum.<\/p>\n<p>Dedi\u011fim gibi, dil dynamic typing olmakta. T\u00fcm de\u011fi\u015fkenler operat\u00f6rlere g\u00f6re tiplerini de\u011fi\u015ftirebiliyor. mesele <code>a = b + c;<\/code> gibi bir kodda a n\u0131n tip i b ve c ye g\u00f6re belirleniyor. \u015eu anl\u0131k 3 tip var, integer, float ve string. Ve bunlar\u0131n bask\u0131nl\u0131k s\u0131ras\u0131da integer<float<string. Yani burada + operat\u00f6r\u00fcn\u00fcn elemanlar\u0131ndan en bask\u0131n olan\u0131n tipi a n\u0131n tipi oluyor. Tabi burada istisnalar var, mesela comparison operat\u00f6rleri (== < vs) herzaman integer d\u00f6nd\u00fcr\u00fcyor. Burada tabi illegal durumlar olabilir, mesela string i\u00e7in \/ operat\u00f6r\u00fc kullanmak gibi.\n\nBunun d\u0131\u015f\u0131nda eklemek istedi\u011fim \u00f6zellikler program\u0131n runtime da de\u011fi\u015febilmesi. Bu farkl\u0131 \u015fekillerde olabilecek. En basidi programdaki constantlar de\u011fi\u015febilecek <code>a = b * 2;<\/code> gibi bir program\u0131n sonraki bir a\u015famas\u0131nda bu 2 de\u011feri 3 olabilecek. Daha ilgin\u00e7 bir \u00f6rnek vermek gerekirse yine ayn\u0131 kodda * operat\u00f6r\u00fc de\u011fi\u015febilecek ya  da assignment operat\u00f6r\u00fcn\u00fcn hedefi a de\u011fil de c olabilecek. Bir nevi hot swapping gibi. B\u00f6yle bir \u015feye izin veren diller var m\u0131 bilmiyorum ama fikir ilk kaynak kodunu de\u011fi\u015ftirmeye izin veren brainfuck interpreterlar\u0131 oldu\u011funu \u00f6\u011frendi\u011fimde akl\u0131ma gelmi\u015fti.<\/p>\n<p>Ne i\u015fe yarayacak derseniz emin de\u011filim \ud83d\ude42 ama farkl\u0131 bir programlama stili olacak diye umuyorum. <\/p>\n<p>Nas\u0131l \u00e7al\u0131\u015fmakta derseniz \u015fu anda 2 a\u015famadan olu\u015fuyor. Lexer\/parser k\u0131sm\u0131 ve interpreter k\u0131sm\u0131. Parsing a\u015famas\u0131nda kaynak kodunu al\u0131yorum ve token lar\u0131na ay\u0131r\u0131yorum, bu tokenlarda interpreter taraf\u0131ndan yorumlan\u0131yor ve kod \u00e7al\u0131\u015f\u0131yor. Mesela<\/p>\n<pre>\r\na = 5;\r\nb = 3.0;\r\nc = a + b; \r\nd = a++; \r\nif(a > 0) { \r\n    d = a + b; \r\n} else d = 0;\r\n<\/pre>\n<p>gibi bir kod olsun. Parser bunu \u015f\u00f6yle bir \u015feye \u00e7eviriyor.<\/p>\n<pre>program\r\n    statement\r\n        value\r\n            assignment\r\n                variable a\r\n                value\r\n                    integer 5\r\n                \/value\r\n            \/assignment\r\n        \/value\r\n    \/statement\r\n    statement\r\n        value\r\n            assignment\r\n                variable b\r\n                value\r\n                    float 3.0\r\n                \/value\r\n            \/assignment\r\n        \/value\r\n    \/statement\r\n    statement\r\n        value\r\n            assignment\r\n                variable c\r\n                value\r\n                    variable a\r\n                    operator +\r\n                    variable b\r\n                \/value\r\n            \/assignment\r\n        \/value\r\n    \/statement\r\n    statement\r\n        value\r\n            assignment\r\n                variable d\r\n                value\r\n                    variable_withpost\r\n                        variable a\r\n                        singleoperator ++\r\n                    \/variable_withpost\r\n                \/value\r\n            \/assignment\r\n        \/value\r\n    \/statement\r\n    statement\r\n        ifcond\r\n            value\r\n                variable a\r\n                operator >\r\n                integer 0\r\n            \/value\r\n            statement\r\n                statement\r\n                    value\r\n                        assignment\r\n                            variable d\r\n                            value\r\n                                variable a\r\n                                operator +\r\n                                variable b\r\n                            \/value\r\n                        \/assignment\r\n                    \/value\r\n                \/statement\r\n            \/statement\r\n            else\r\n            \/else\r\n            statement\r\n                value\r\n                    assignment\r\n                        variable d\r\n                        value\r\n                            integer 0\r\n                        \/value\r\n                    \/assignment\r\n                \/value\r\n            \/statement\r\n        \/ifcond\r\n    \/statement\r\n\/program<\/pre>\n<p>Kodun parse edilmi\u015f hali de interpreter taraf\u0131ndan input olarak al\u0131n\u0131yor ve program olu\u015fturuluyor. Interpreter burada biraz tokenlar\u0131n yerlerini ve tree yap\u0131s\u0131n\u0131 kendisi i\u00e7in d\u00fczenliyor. Interpreter \u0131n yukar\u0131daki input tan olu\u015fturdu\u011fu program \u015fu \u015fekilde.<\/p>\n<pre> 0 program\r\n 1   statement\r\n 2     value\r\n 3       assignment\r\n 4         variable a\r\n 5         value\r\n 6           integer 5\r\n 7   statement\r\n 8     value\r\n 9       assignment\r\n10         variable b\r\n11         value\r\n12           float 3.000000\r\n13   statement\r\n14     value\r\n15       assignment\r\n16         variable c\r\n17         value\r\n18           variable a\r\n19           variable b\r\n20           operator +\r\n21   statement\r\n22     value\r\n23       assignment\r\n24         variable d\r\n25         value\r\n26           variable a\r\n27           operator post++\r\n28   statement\r\n29     ifcond\r\n30       value\r\n31         variable a\r\n32         integer 0\r\n33         operator >\r\n34       statement\r\n35         statement\r\n36           value\r\n37             assignment\r\n38               variable d\r\n39               value\r\n40                 variable a\r\n41                 variable b\r\n42                 operator +\r\n43       statement\r\n44         value\r\n45           assignment\r\n46             variable d\r\n47             value\r\n48               integer 0<\/pre>\n<p>Buradaki en bariz de\u011fi\u015fiklik matematik i\u015flemlerinin postfix e \u00e7evrilmesi. <\/p>\n<p>\u0130leride daha ayr\u0131nt\u0131l\u0131 olarak anlatmay\u0131 planl\u0131yorum, \u015fimdilik <a href=\"https:\/\/github.com\/shultays\/ingenue\">github<\/a> linkini atmakla b\u0131rakaca\u011f\u0131m.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Evet, askerliktir \u015fudur budur \u00e7ok zaman oldu. Askerde excel d\u0131\u015f\u0131nda kendimi pek geli\u015ftiremedim, o d\u00f6nemi bu kadar k\u0131sa bir \u00f6zetle ge\u00e7i\u015ftireyim \ud83d\ude42 Ingenue nedir derseniz, tiyatro vb. de olan saf k\u0131z karakterlerine verilen isimmi\u015f. Ayn\u0131 zamanda yeni (ve \u00e7ok eski) projemin \u015fu anki kod ad\u0131 olarak se\u00e7tim, neden derseniz az \u00f6nce Atoms For Peace &#8211; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,7],"tags":[],"class_list":["post-261","post","type-post","status-publish","format-standard","hentry","category-ff","category-pp"],"_links":{"self":[{"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/261","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=261"}],"version-history":[{"count":5,"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/261\/revisions"}],"predecessor-version":[{"id":266,"href":"https:\/\/enginmercan.com\/index.php?rest_route=\/wp\/v2\/posts\/261\/revisions\/266"}],"wp:attachment":[{"href":"https:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enginmercan.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}