24 Ekim 2008 Cuma

Yorumlayıcı (interpreter)

Yorumlayıcı (interpreter) için en basit örnek firefox gibi web tarayıcılarının içine gömülmüş olan yorumlayıcılardır. Yorumlayıcıların programlama diline script denir. Yorumlayıcıların varlığının önemi onu anlatmaktan daha önemlidir. Yorumlayıcılarla yazılan programlar (python, javascript, v.s) direkt derlenen programlara göre daha basit geliştirme sürecine yol açarlar. Bu sürece en büyük katkıları programlama dillerine göre script dillerinin daha basit, gevşek ve hata töleranslı kurallar ile yazılıyor olmasıdır. Ayrıca temel komutlarının yanında diğer programlama dillerinde satırlarca kod yazarak oluşturduğunuz bazı yapıları (telefon listesi gibi) tek bir anahtar kelimelerle sağlayabilirler. Yorumlayıcılar web sayfaları üretmek, program yazmak yada belirli programların içerisinde programa otomatik olarak bazı şeyler yaptırmak için kullanılabilir. Firefox ve internet explorer içerisinde javascript komutları ile html ve css yapılarına ulaşarak onları değiştirmek için kullanılmasına program içine gömülü yorumlayıcı örneği uyar. Yorumlayıcıların en büyük dezavantajı ise hızlarıdır. Yorumlayıcılar aslen herhangi bir programlama dili ile yazılmış bir programlardır. Doğal olarak bizim verdiğimiz komutların işletilmesi için yorumlayıcının yazıldığı programlama dilinde pek çok komut yürütmesi gerekir. Diğer bir performans düşürücü durum da yazdığınız script kodlarının çalıştırılması için ilk önce yorumlayıcının belleğe yüklenip çalıştırılması lazım. Bu da script kodlarının işletilmesini geciktirecektir. Script dilleri derlenmediği için düz tekst dosyalarında tutulurlar. Bu da değişiklik yapmayı kolaylaştırır. Örneğin siz C gibi geleneksel bir programlama dili kullanarak bir program yazdınız. Bu programı derlemek 10 dakika sürsün. Programı geliştirirken bir hata yaptığınızı fark ettiniz. Bu hattayı düzelttikden sonra tekrar derlemeniz gerekir. Bu durumda bir 1o dakika daha derleme süresi kadar bekleyeceksiniz. Farklı olarak javascriptle bir web sayfasın da kullanılmak üzere şık bir efekt hazırladınız ancak efektinizin animasyon süresini biraz uzun tuttuğunuzu fark ettiniz. Bu durumda değişikliği yaptıktan sonra sadece yenile düğmesine basmanız değişikliğin etkisini görmeniz için yeterlidir. Ayrıca efektininiz hiçbir değişiklik yapmadan firefoxun çalıştığı bütün ortamlarda (linux, mac,solaris, v.s ) çalışacaktır. Scriptler tasarım şekline göre programcılığın derinine inmeden basit bir şekilde uygulanacak biçimde olabilirler. Örneğin 3D tasarım programlarından 3DStudio Max MaxScript adında gömülü script dili kullanır. Bu sayede tasarımcı basit bir şekilde sahnedeki öğeleri değiştirebilir. Özellikle yapılan değişiklikler basit ama gerekli ise script kullanmak daha mantıklıdır. Script dilleri bazen işlevselliği arttırır. Örneğin öyle bir program yazacaksınızki pek çok iş yapacak ama bu işler sizin önceden tahmin edemeyeceğiniz türden kullanıcı istekleri olacak. Buna en iyi örnek geogebra (MathLab da olabilir.) adındaki geometrik ve cebirsel ifadelerin grafiğini çizen program verilebilir. Kullanıcı böyle bir durumda pek çok formül ve bilgi girecektir ve bunlar önceden tahmin edilemez olacaktır. Bu durumda onlara esnek bir dil sağlamalısınız ki onlarda anahtar kelimeleri kullanarak gereken cümleyi (formülü) yazsın. Burada programın kendisi yorumlayıcıdır. Gömülü script dilleri dışındaki script dilleri yorumlayıcının tasarımına göre hali hazırda bulunan bir kütüphaneyi gerektiğinde script avantajı ile kullanabilirler. Örneğin Python scriptleri gereken kurulum yapılmışsa MySql, GTK, gibi kütüphanelere erişebilirler. Scriptlerin diğer bir avantajı da yorumlayıcı sayesinde hatta töleranslı olmalarıdır. Tabi ki yorumlayıcı yada kullandığı yerel kütüphaneler (MySql gibi) hatalı çalışmıyorsa. C ile yazacağınız bir program işletim sisteminin çökmesine neden olabilir yada bir başka programa veya donanıma zarar verebilir (Tampon taşması v.s). Ancak script dili ile yazılan diller genelde direkt komut yürütmedikleri için böyle bir duruma sebep vermezler. Ayrıca hata ayıklama da script dillerinde daha kolaydır. Çünkü script dilleri genellikle direkt olarak işlemcide çalıştırılmazlar. Bazı script dilleri (Python gibi) çalışma zamanı (run-time) kısalsın diye derleme yaparlar. Ancak bu derleme dosyaları yinede exe dosyaları gibi direkt çalıştırılabilir dosyalar değildir. Script dosyası değişirse yorumlayıcı tekrar derleme işlemi ile bu ara-dosyayı günceller. Eğer script diliniz pek çok farklı platformda çalışabiliyorsa o zaman derlenmiş ara dosyalar bir platformdan diğerine uyumsuzdur. Örneğin sizin script dosyanızın derlenmiş versiyonu diğer platfomda çalışmaz. Ama script dosyanız bu platform için tekrar derlenir. Script derleme işlemi javadaki runtime compiler (hotspot) ile karıştırılmamalıdır. Hotspot java derleyicisi tarafından derlenmiş dosyaları eğer uygunsa anında işlemci diline çevirir. Bu işlem dosya üzerinde değil java çalışırken eş zamanlı yapılır (Bence javaya aşık olmak için bir neden daha). Evet şimdilik yorumlayıcı muhabbeti bu kadar.

11 Ekim 2008 Cumartesi

JavaFX de değişkenler

JavaFX de değişken tanımı: var değişkenismi : değişkentürü = değer; var ogrenci_notu : Integer = 10; şeklindedir. "var" niteleyicisi değişken tanımı yapılacağını belirtir. Değişken türü eğer değişken değeri hemen atanacaksa önemsizdir. var image = Image { url: "{__DIR__}/myPicture.png" } Ancak hemen değer atamayacağınız değişkenlerde değişken tipi belirtilmelidir. var image : Image; ... image.url="http://host.com/myimage.jpg"; Değişken tipleri Integer, Number, String (karakter katarı), Duration, Sequence, fx sınıfı yada java sınıfı olabilir. Özel Duaration değişkeni : Bu değişken özellikle animasyon desteği için eklenmiştir. Fakat illa bu durum için kullanmak zorunlu değildir. var son_tur : Duration=10s var yineleme_zamanı : Duration=10ms var saat=10s Duration fx sınıfı zaman değişkeni için destek sağlar. s= Saniye ms = Milisaniye cinsinden değişken tanımlayabilirsiniz. Sequence: Javaki dizilerin karşılığı olarak görülebilir. Ancak sequenceler bundan daha fazlasıdır. Sequence değişkenleri string, number ve diğer sınıf değişkenleri olabilir. Number tipi sequenceler javafx de bağzı işleri kolaylaştırmak için özel tanımlamalar sağlar.Bu başlıkta sadece tanımlama özelliklerini veriyorum. Bu konuyu ayrıca bir başlıkta daha geniş olarak ele alacağım. String sequence tipine örnek: var yemekler =["Mantar sote", "Fırın tavuk", "Makarna"]; Number sequence tipine örnek: var sayısalloto = [1,4,12,15,23,36,42] var birden_ona_kadar_rakamlar = [1..10] Node sınıfını genişleten elips sınıfının sequence tipi değişkende toplanması: var nodes = [Ellipse{}, Ellipse{}] var nodes = [Ellipse{}, Rectangle{}]