Java'da komut dosyası oluşturmaya giriş, Bölüm 1

Java'da Komut Dizilerinden Alıntı : Diller, Çerçeveler ve Kalıplar .

Dejan Bosanac tarafından

Addison Wesley Professional tarafından yayınlandı

ISBN-10: 0-321-32193-6

ISBN-13: 978-0-321-32193-0

Yakın zamana kadar, Java platformunda komut dosyası yazma konusunda yalnızca sert olanlar heyecanlıydı, ancak bu Sun JRE'nin Python, Ruby ve JavaScript gibi dinamik olarak yazılmış dilleri desteklemesinden önceydi. Önümüzdeki Java'da Scripting: Languages, Frameworks ve Patterns (Addison Wesley Professional, Ağustos 2007) kitabından iki bölümlük bu alıntıda Dejan Bosanac, çoğu komut dosyası dilini Java gibi bir programlama dilinden ayıran şeyi daraltıyor ve ardından komut dosyasının neden bir programlama dili olduğunu açıklıyor. Java programlama becerilerinize zaman kazandıran bir katkı.

Java'da Komut Dosyası Yazmaya Giriş: Diller, Çerçeveler ve Kalıplar

Bu kitabın ana konusu, betikleme teknolojileri ile Java platformunun sinerjisidir. Java geliştiricilerinin daha güçlü bir geliştirme ortamı oluşturmak için kullanabilecekleri projeleri ve komut dosyası oluşturmayı yararlı kılan bazı uygulamaları anlatıyorum.

Java dünyasında komut dosyası uygulamalarını tartışmaya başlamadan önce, genel olarak komut dosyası yazmanın arkasındaki bazı teorileri ve bilgi teknolojisi altyapısında kullanımını özetleyeceğim. Bu, kitabın ilk iki bölümünün konusudur ve bize komut dosyası oluşturma teknolojisine ve bu teknolojinin Java platformunda nasıl yararlı olabileceğine dair daha iyi bir bakış açısı sağlar.

Başlamak için, komut dosyası dillerinin ne olduğunu tanımlamalı ve özelliklerini açıklamalıyız. Özellikleri, kullanılabilecekleri (kullanılması gereken) rolleri büyük ölçüde belirler. Bu bölümde, betik dili teriminin ne anlama geldiğini açıklayacağım ve temel özelliklerini tartışacağım.

Bu bölümün sonunda, komut dosyası oluşturma ve sistem programlama dilleri arasındaki farkları ve bu farklılıkların onları gelişimdeki belirli roller için nasıl uygun hale getirdiğini tartışacağım.

Arka fon

Bir komut dosyası dilinin tanımı belirsizdir ve bazen komut dosyası dillerinin gerçek dünyada nasıl kullanıldığıyla tutarsızdır, bu nedenle genel olarak programlama ve bilgi işlemle ilgili bazı temel kavramları özetlemek iyi bir fikirdir. Bu özet, komut dosyası dillerini tanımlamak ve özelliklerini tartışmak için gerekli bir temel sağlar.

Hadi baştan başlayalım. İşlemciler , işlemcilerin kayıtlarında veya harici bellekte veriler üzerinde çalışan makine talimatlarını yürütür . Basitçe söylemek gerekirse, bir makine talimatı bir dizi ikili rakamdan (0'lar ve 1'ler) oluşur ve üzerinde çalıştığı belirli işlemciye özgüdür. Makine talimatları , işlemciye hangi işlemi gerçekleştirmesi gerektiğini söyleyen işlem kodu ve işlemin gerçekleştirilmesi gereken verileri temsil eden işlenenlerden oluşur .

Örneğin, bir kayıtta bulunan bir değeri diğerinde bulunan değere eklemenin basit işlemini düşünün. Şimdi, ilk 5 bitin işlem kodunu temsil ettiği (örneğin, kayıt değeri eklenmesi için 00111) ve kayıtların 3 bitlik bir modelle adreslendiği, 8 bitlik bir komut setine sahip basit bir işlemci hayal edelim. Bu basit örneği şu şekilde yazabiliriz:

00111 001010

Bu örnekte 001 ve 010'u işlemcinin bir ve iki numaralı yazmaçlarını (sırasıyla R1 ve R2) adreslemek için kullandım.

Bu temel bilgi işlem yöntemi on yıllardır iyi bilinmektedir ve eminim siz buna aşinasınız. Çeşitli işlemciler, komut setlerinin nasıl görünmesi gerektiğine ilişkin farklı stratejilere sahiptir (RISC veya CISC mimarisi), ancak yazılım geliştiricinin bakış açısından, tek önemli gerçek, işlemcinin yalnızca ikili komutları çalıştırabilmesidir. Hangi programlama dili kullanılırsa kullanılsın, sonuçta ortaya çıkan uygulama, işlemci tarafından yürütülen bir dizi makine talimatıdır.

Zaman içinde değişen şey, insanların makine talimatlarının yürütüldüğü sırayı nasıl oluşturduğudur. Bu sıralı makine talimatları dizisine bilgisayar programı adı verilir . Donanım daha uygun fiyatlı ve daha güçlü hale geldikçe, kullanıcıların beklentileri de artıyor. Bir bilim disiplini olarak yazılım geliştirmenin tüm amacı, geliştiricilerin eskisi gibi aynı (veya daha az) çabayla daha karmaşık uygulamalar geliştirmelerine olanak tanıyan mekanizmalar sağlamaktır.

Belirli bir işlemcinin yönerge setine makine dili denir . Makine dilleri birinci nesil programlama dilleri olarak sınıflandırılır. Bu şekilde yazılan programlar genellikle çok hızlıdır çünkü belirli bir işlemcinin mimarisi için optimize edilmiştir. Ancak bu faydaya rağmen, insanların makine dillerinde büyük ve güvenli uygulamalar yazması (imkansız değilse de) zordur çünkü insanlar 0'lar ve 1'lerin büyük dizileriyle başa çıkmada iyi değildir.

Bu sorunu çözmek için, geliştiriciler belirli ikili modeller için semboller oluşturmaya başladılar ve bununla birlikte montaj dilleri tanıtıldı. Assembly dilleri ikinci nesil programlama dilleridir . Montaj dillerindeki talimatlar, ikili rakamları ADD, SUB ve benzeri hatırlanması kolay anahtar kelimelerle değiştirdikleri için makine talimatlarının sadece bir düzey üzerindedir. Bu nedenle, önceki basit talimat örneğini aşağıdaki gibi assembly dilinde yeniden yazabilirsiniz:

R1, R2 EKLE

Bu örnekte, ADD anahtar sözcüğü komutun işlem kodunu temsil eder ve R1 ve R2, işlemde yer alan kayıtları tanımlar. Sadece bu basit örneği gözlemleseniz bile, açıkça görülüyor ki montaj dilleri programları insanların okumasını kolaylaştırdı ve böylece daha karmaşık uygulamaların oluşturulmasını sağladı.

Daha insan odaklı olmalarına rağmen, ikinci nesil diller işlemci yeteneklerini hiçbir şekilde genişletmez.

Geliştiricilerin kendilerini daha üst düzey, anlamsal biçimlerde ifade etmelerine olanak tanıyan yüksek düzeyli dilleri girin . Tahmin edebileceğiniz gibi, bu dillere üçüncü nesil programlama dilleri denir . Yüksek seviyeli diller, çeşitli güçlü döngüler, veri yapıları, nesneler vb. Sağlar ve bunlarla birçok uygulama oluşturmayı çok daha kolay hale getirir.

Zamanla, çeşitli yüksek seviyeli programlama dilleri tanıtıldı ve özellikleri büyük ölçüde değişti. Bu özelliklerden bazıları, ilerleyen bölümlerde göreceğimiz gibi, programlama dillerini komut dosyası (veya dinamik) dilleri olarak sınıflandırır.

Ayrıca, programlama dillerinin ana makinede nasıl yürütüldüğü konusunda da bir fark vardır. Genellikle derleyiciler , yüksek seviyeli dil yapılarını bellekte bulunan makine talimatlarına çevirir. Bu şekilde yazılan programlar, ilk derleyicilerin sistem kaynaklarını verimli bir şekilde kullanamamaları nedeniyle başlangıçta assembly dilinde yazılmış programlardan biraz daha az verimli olsalar da, zaman geçtikçe derleyiciler ve makineler geliştikçe sistem programlama dilleri assembly dillerinden daha üstün hale geldi. Sonunda, üst düzey diller, iş uygulamalarından oyunlara, iletişim yazılımlarından işletim sistemi uygulamalarına kadar çok çeşitli geliştirme alanlarında popüler hale geldi.

Ancak, üst düzey anlamsal yapıları makine talimatlarına dönüştürmenin başka bir yolu daha var ve bu da onları yürütüldüğü gibi yorumlamaktır. Bu şekilde, uygulamalarınız orijinal biçimlerinde komut dosyalarında bulunur ve yapılar, yorumlayıcı adı verilen bir program tarafından çalışma zamanında dönüştürülür . Temel olarak, uygulamanızın ifadelerini okuyan ve ardından bunları çalıştıran yorumlayıcıyı çalıştırıyorsunuz. Komut dosyası oluşturma veya dinamik diller olarak adlandırılan bu tür diller, sistem programlama dillerinin sunduğundan daha yüksek düzeyde bir soyutlama sunar ve bunları bu bölümün ilerleyen kısımlarında ayrıntılı olarak tartışacağız.

Bu özelliklere sahip diller, süreç otomasyonu, sistem yönetimi ve mevcut yazılım bileşenlerinin birbirine yapıştırılması gibi belirli görevler için doğal olarak uygundur; Kısacası, sistem programlama dillerinin getirdiği katı sözdizimi ve kısıtlamalar, geliştiricilerle işleri arasında her yerde engel oluyordu. Komut dosyası dillerinin olağan rollerinin açıklaması, Bölüm 2, "Komut Dosyası Dilleri için Uygun Uygulamalar" ın odak noktasıdır.

Peki tüm bunların bir Java geliştiricisi olarak sizinle ne alakası var? Bu soruyu cevaplamak için öncelikle Java platformunun geçmişini kısaca özetleyelim. Platformlar daha çeşitli hale geldikçe, geliştiricilerin mevcut sistemlerin çoğunda çalışabilen yazılımlar yazması giderek zorlaştı. Bu, Sun'ın "bir kez yaz, her yerde çalıştır" basitliği sunan Java'yı geliştirdiği zamandır.

Java platformunun arkasındaki ana fikir, sanal makine adı verilen bir yazılım bileşeni olarak sanal bir işlemciyi uygulamaktı . Böyle bir sanal makineye sahip olduğumuzda, belirli bir donanım platformu veya işletim sistemi yerine o işlemcinin kodunu yazabilir ve derleyebiliriz. Bu derleme işleminin çıktısına bayt kodu denir ve pratik olarak hedeflenen sanal makinenin makine kodunu temsil eder. Uygulama yürütüldüğünde, sanal makine başlatılır ve bayt kodu yorumlanır. Bu şekilde geliştirilen bir uygulamanın uygun bir sanal makine yüklü herhangi bir platformda çalışabileceği açıktır. Yazılım geliştirmeye yönelik bu yaklaşım birçok ilginç kullanım alanı buldu.

Java platformunun icadının ana motivasyonu, kolay, taşınabilir, ağa duyarlı istemci yazılımının geliştirilmesi için bir ortam yaratmaktı. Ancak çoğunlukla sanal makinenin getirdiği performans cezaları nedeniyle, Java artık sunucu yazılımı geliştirme alanında en uygun olanıdır. Kişisel bilgisayarların hızı arttıkça, Java ile daha fazla masaüstü uygulaması yazılmakta olduğu açıktır. Bu eğilim sadece devam ediyor.

Bir betik dilinin temel gereksinimlerinden biri, bir yorumlayıcıya veya bir tür sanal makineye sahip olmaktır. Java platformu, çeşitli komut dosyası dilleri için bir ana bilgisayar olmasını sağlayan Java Sanal Makinesi (JVM) ile birlikte gelir. Bugün Java topluluğunda bu alana artan bir ilgi var. Java geliştiricilerine geleneksel kodlama dillerinin geliştiricilerinin sahip olduğu gücü sağlamaya çalışan çok az proje vardır. Ayrıca, JVM içinde Python gibi dinamik bir dilde yazılmış mevcut uygulamanızı çalıştırmanın ve başka bir Java uygulaması veya modülüyle entegre etmenin bir yolu vardır.

Bu kitapta tartıştığımız şey budur. Bu yaklaşımın tüm güçlü ve zayıf yönlerini, bir uygulama mimarisinde komut dosyalarının en iyi nasıl kullanılacağını ve bugün JVM'de hangi araçların mevcut olduğunu tartışırken, programlamaya bir komut dosyası yaklaşımı uyguluyoruz.