çevirmen

Bir yorumlayıcı , görünüşte bir dizi talimatı doğrudan yürüten, talimatların formatı belirtilen bir bilgisayar programıdır . Bunu yapmak için, yorumlayıcı bir veya daha fazla kaynak dosyayı okur , analiz eder ve daha sonra bunları bir bilgisayar sisteminin doğrudan çalıştırabileceği makine koduna çevirerek talimatla yürütür . Tercümanlar, derleyicilerden fark edilir ölçüde daha yavaştır , ancak genellikle daha iyi hata analizi sağlar.

Tercümanlar hem programlama dillerinde hem de bilgisayar programlarında kullanılır.

kullanmak

programlama

Programlarken, bir yorumlayıcı neredeyse her zaman yazılım geliştirmenin bir parçasıdır .

Saf haliyle, derleyiciler - yorumlayıcıların aksine - bir veya daha fazla çalışmadaki kaynak dosyalardan talimatları önceden tanımlanmış bir hedef sistem için makine koduna çevirir ve böylece yürütülebilir bir bilgisayar programı oluşturur . Ancak, derleyici-derleyici ve yorumlayıcı-derleyici arasında zaten bir ayrım vardır, tıpkı yorumlayıcı-yorumlayıcı ve derleyici-yorumlayıcı gibi.

"Herhangi bir iyi yazılım mühendisi size derleyici ve yorumlayıcının birbirinin yerine kullanılabileceğini söyleyecektir."

"Herhangi bir iyi yazılım geliştiricisi size derleyicilerin ve yorumlayıcıların birbirinin yerine geçebileceğini söyleyecektir."

- Tim Berners-Lee : Torben Ægidius Mogensen: Derleyici Tasarımına Giriş . Springer Science & Business Media, Londra 2011, ISBN 978-0-85729-828-7 (İngilizce, Google kitap aramasında sınırlı önizleme ).

Son aşama bir tercüman ise, kaynak dosya ise çevrilmiştir programıdır çalışan .

Kaynak metni derlemeyen, ancak her zaman bir girdiyi veya kaynak dosyayı yorumlayan programlama dillerine "tercüman dili " veya komut dosyası dili de denir . Klasik tercüman dilleri ör. B. TEMEL gibi GW-BASIC , Tcl veya JavaScript . Diğer bazı programlama dilleri için, bir programcı yorumlayıcı ve derleyici arasında seçim yapabilir. Bazı programlama dillerinde, zaten optimize edilmiş olan bir ara kod olarak bir bayt kodu da oluşturulur, ancak yine de yürütme için hedef sistemde bir yorumlayıcı gerektirir. Aslında saf yorumlayıcı diller için harici olarak geliştirilmiş derleyiciler de vardır.

Bilgisayar programları

Komut için komut satırı tercüman gibi, toplu dosyaları veya Unix kabuk komut, aynı zamanda bir tercüman tarafından yürütülür. Betiğin bir komut satırı parametresi olarak belirtilmesi gerekmediğinden , Unix benzeri sistemlerde ve kabuklarda sözde shebang vardır  - betik, tabiri caizse uygun yorumlayıcıyı çağırmak için kabuğu kullanır.

Bilgisayar programları söz konusu olduğunda, kod doğrudan bilgisayar sistemi tarafından çalıştırılamadığı veya çalıştırılmaması gerektiği anda tercümanlardan söz edilir. Bu, i.a. Bu da vaka ile taklitleri analiz etmek ve diğer bilgisayar sistemleri için yeniden yazma makine kodu ve şu anda çalıştırdığınız bilgisayar sistemi için bir yorumlanmış şekilde yerine getirilmesinden,. Ancak, konuk sistemin makine kodunun büyük bölümlerini yorumlanmadan doğrudan ana sistem üzerinde yürüttükleri için bu, sanal makineleri içermez. Ayrıca oyun motorları , çalışan ilgili platformdaki gerçek oyun verileri, genellikle bytecode olarak yorumlandığında yorumlayıcı olabilir.

özellikleri

Tercümanlar çoğunlukla hedef işlemcinin makine dilindedir, ancak kendileri de bir tercüman dilinde olabilirler. En büyük dezavantajı, bir derleyiciye kıyasla daha düşük yürütme hızıdır. Bunun nedeni, derleyicinin, ilgili hedef sistemde daha hızlı yürütülmesi için kodu optimize etmek için derleme işlemi sırasında zaman alabilmesidir. Bununla birlikte, bu tür optimizasyonlar zaman alıcıdır, bu nedenle bir yorumlayıcı genellikle makine koduna doğrudan bir dönüşüm gerçekleştirir, ancak bu toplamda derleyici tarafından optimize edilen koddan daha yavaştır.

Yorumlanan kod, derlenmiş koddan kabaca beş ila 20 kat daha yavaştır.

Daha iyi hata analizine ek olarak, yorumlanan kodun avantajları önceden tanımlanmış bir bilgisayar mimarisinden bağımsız olmayı içerir  - çünkü yorumlanan kod, kendisi için bir yorumlayıcının bulunduğu her sistemde çalışır.

Hız artar

Bir uzlaşma çözümü, programın yalnızca çalışma zamanında , ancak doğrudan makine koduna çevrildiği tam zamanında derleyicidir (JIT derleyicisi) . Çevrilen kod daha sonra doğrudan işlemci tarafından yürütülür. Makine kodunun ara depolanması nedeniyle, birkaç kez çalıştırılan program parçalarının yalnızca bir kez çevrilmesi gerekir. JIT derleyicisi ayrıca ikili kodun optimize edilmesini sağlar. Ancak, JIT derleyicileri yalnızca belirli bir bilgisayar mimarisinde çalışabilir çünkü bu mimari için makine kodu üretirler ve saf yorumlayıcılardan çok daha fazla bellek gerektirirler .

ara kod

Diğer bir ara aşama, bayt kodu yorumlayıcılarıdır. Kaynak metin (önceden veya çalışma zamanında) basit bir ara koda çevrilir ve daha sonra bir yorumlayıcı tarafından yürütülür - genellikle sanal makine olarak da adlandırılır. Bu, örn. Bu durum ile, örneğin, Java aracılığıyla Java Virtual Machine (JVM). Ara kod kısmen optimize edildiği için derleyici-yorumlayıcı konseptine karşılık gelir (kaynak kodu → derleyici → ara kod bayt kodu → yorumlayıcı → hedef sistem üzerinde yürütme).

Özellikle 1980'lerde, ara aşama, komutları giriş anında daha kolay kodu çözülebilir belirteçlere dönüştürmek için kullanıldı ve bunlar daha sonra (liste) çıkışı sırasında tekrar düz metne dönüştürüldü. Hızdaki artışın yanı sıra , kaynak kodun sıkıştırılması da önemli bir argümandı. Prensip olarak, veri alışverişi tokenize edilmiş kaynak program temelinde gerçekleştirilirse yerel anahtar kelimelerin kullanılması da mümkündü .

Karışık formlar

JIT kodu, yorumlanan koddan otomatik olarak daha hızlı olmadığından, bazı çalışma zamanı ortamları karma bir form kullanır. Bunun bir örneği JVM'dir. JIT derleyicisi, yorumlayıcıya paralel olarak kullanılır, bu sayede daha hızlı yürütme yolu "kazanır".

tercüman dilleri

Ana veya ilk uygulaması bir tercüman olan programlama dilleri , genellikle bir derleyici kullanan bir programlama dilinin (derleyici dili) tersi olarak yorumlayıcı diller olarak adlandırılır . Temel olarak, bir programlama dili bir tür uygulamaya bağlı değildir ve iki karşıt yaklaşımın karışık biçimleri vardır.

Ancak daha sonraki uygulamalar düşünülerek tasarlanmış programlama dilleri de vardır ; bu hala bazı eski dillerde görülebilir. İlk bilgisayarların düşük performansı nedeniyle, çok fazla bilgi işlem süresi ve bellek tüketmemek için yorumlayıcıların mümkün olduğunca basit ve küçük tutulması gerekiyordu. Öte yandan derleyiciler, çok fazla bilgi işlem süresi ve ayrıca çok fazla RAM tüketebilir, çünkü program çalışırken artık aktif değillerdi. Bu nedenle, yorumlanması gereken diller, kolayca analiz edilebilecek ve çalıştırılabilecek şekilde tasarlanırken, derlenmesi gereken diller de analiz edilmesi ve işlenmesi zahmetli yapılar içerebilir. Bugün bu, bir programlama dili tasarlarken yalnızca çok nadir durumlarda rol oynar.

Bazı diller için çeşitli uygulamalar mevcuttur. Birçok farklı konsepte dayanan çok sayıda uygulamanın bulunduğu Scheme dili burada öne çıkıyor. İşte başka bir örnek: C programlama dili , derlenmek üzere tasarlanmıştır. Ancak yine de bu dil için CINT ve Ch gibi tercümanlar vardır, ancak C genellikle "yorumlayıcı dili" değil, "derleyici dili" olan bir dilin başlıca örneği olarak gösterilmektedir.

APL , BASIC , Forth , Perl , Python , Ruby , PHP ve diğerleri yorumlayıcı diller olarak bilinir . Komut dosyası dillerinden bazen tercüman dillerinin bir alt veya ilgili kategorisi olarak bahsedilir .

Genellikle bayt koduna çevrilen iyi bilinen programlama dilleri Java , C# , Perl ve Python'dur.

Bazı diller için ( Smalltalk gibi ) sağlayıcıya bağlı olarak tercümanlar, bytecode yorumlayıcıları, JIT derleyicileri veya diğer dillerde (örneğin C veya .NET'e kadar ) derleyiciler vardır .

Saf yorumlayıcılar ve saf derleyiciler arasındaki geçiş akıcıdır.

Bireysel kanıt

  1. ^ A b Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: Derleyici: İlkeler, Teknikler ve Araçlar . Pearson Deutschland GmbH, 2008, ISBN 978-3-8273-7097-6 , s. 1253 ( Google Kitap Arama'da sınırlı önizleme ).
  2. ^ Julius T. Tou: Yazılım Mühendisliği . Miami Beach, Florida, Aralık 1969'da düzenlenen Üçüncü Bilgisayar ve Bilişim Bilimleri Sempozyumu Bildirileri. Academic Press, New York, Londra 1970, ISBN 978-0-323-15744-5 , s. 288 (İngilizce, Google Kitap aramasında sınırlı önizleme ).
  3. Tercüman nedir? “XOVI. 29 Mayıs 2019'da alındı .
  4. a b Michael Bürger: Tercümanlarprachen. 29 Mayıs 2019'da alındı .
  5. ^ A b David A. Watt: Derleyici Yapısı . 9. Uluslararası Konferans, CC 2000. İçinde: Bilgisayar Bilimlerinde Ders Notları, Cilt 1781 . Springer-Verlag, Berlin, Heidelberg, New York 2000, ISBN 978-3-540-67263-0 , s. 300 (İngilizce, Google Kitap Arama'da sınırlı önizleme ).
  6. R. Nageswara Rao, Kogent Solutions Inc.: Core Java: An Integrated Approach . Kavramları, Programları ve Mülakat Sorularını kapsar. Dreamtech Press, Yeni Delhi 2008, ISBN 978-81-7722-836-6 , s. 664 (İngilizce, Google Kitap aramasında sınırlı önizleme ).
  7. ^ Christian Wagenknecht, Michael Hielscher: Biçimsel diller, soyut otomatlar ve derleyiciler . Temel çalışmalar ve ileri eğitim için ders kitabı ve çalışma kitabı. Springer-Verlag, 2009, ISBN 3-8348-0624-2 ( Google kitap aramasında sınırlı önizleme ).