Ara temsil - Intermediate representation

Bir ara temsil ( IR ), kaynak kodunu temsil etmek için bir derleyici veya sanal makine tarafından dahili olarak kullanılan veri yapısı veya kodudur . Bir BT, optimizasyon ve çeviri gibi daha sonraki işlemler için elverişli olacak şekilde tasarlanmıştır . "İyi" bir BT, doğru olmalıdır - kaynak kodunu bilgi kaybı olmadan temsil edebilmelidir - ve herhangi bir belirli kaynak veya hedef dilden bağımsız olmalıdır . Bir IR birkaç biçimden birini alabilir: bir bellek içi veri yapısı veya program tarafından okunabilen özel bir demet veya yığın tabanlı kod . İkinci durumda, ara dil olarak da adlandırılır .

Çoğu modern derleyicide kurallı bir örnek bulunur. Örneğin, CPython yorumlayıcısı, bir programı temsil eden doğrusal insan tarafından okunabilir metni, yürütmeden önce akış analizine ve yeniden düzenlemeye izin veren bir ara grafik yapısına dönüştürür . Bunun gibi bir ara temsilin kullanılması, GNU Derleyici Koleksiyonu ve LLVM gibi derleyici sistemlerinin birçok farklı hedef mimari için kod oluşturmak üzere birçok farklı kaynak dil tarafından kullanılmasına izin verir .

orta dil

Bir ara dil , bilgisayar programlarının analizine yardımcı olmak için tasarlanmış soyut bir makinenin dilidir . Terim , bir programın kaynak kodunun, bir hedef makine için nesne veya makine kodu oluşturmak için kullanılmadan önce kod iyileştirme dönüşümleri için daha uygun bir forma çevrildiği derleyicilerdeki kullanımlarından gelir . Bir ara dilin tasarımı, tipik olarak pratik bir makine dilinden üç temel yolla farklıdır:

Ara diller için popüler bir biçim, üç adresli koddur .

Bu terim aynı zamanda , kendileri nesne veya makine kodu çıktısı vermeyen, ancak yalnızca ara dili çıktılayan bazı üst düzey programlama dilleri tarafından ara dil olarak kullanılan dillere atıfta bulunmak için kullanılır . Bu ara dil, bu tür bir dil için bir derleyiciye gönderilir ve daha sonra bitmiş nesne veya makine kodu çıktısı alınır. Bu genellikle optimizasyon sürecini kolaylaştırmak veya C gibi birçok işlemci ve işletim sistemi için derleyicileri olan bir ara dil kullanarak taşınabilirliği artırmak için yapılır . Bunun için kullanılan diller, yüksek seviyeli diller ve montaj dilleri gibi düşük seviyeli diller arasındaki karmaşıklık bakımından düşer .

Diller

Açıkça bir ara dil olarak tasarlanmamış olsa da, C bir soyutlama olarak 'ın doğası montaj ve fiili olarak aynı anda her yerde sistem dili içinde Unix benzeri diğer işletim sistemleri ve ona bir popüler ara dili yaptı: Eiffel , Sather , Esterel , bazı ağızlar arasında Lisp ( gür , Gambit ), Haskell'e ( Glasgow Haskell derleyicisi ), ciyaklamak sitesindeki Smalltalk-alt kümesi ağız, Cython , seed7 , SystemTap'ı , Vala , V ve diğerleri, bir ara dil olarak C faydalanmak. C'nin varyantları, C-- ve C Intermediate Language dahil olmak üzere taşınabilir bir derleme dili olarak C'nin özelliklerini sağlamak üzere tasarlanmıştır .

Bir sanal makineyi veya p-kod makinesini hedefleyen herhangi bir dil , bir ara dil olarak kabul edilebilir:

GNU Compiler Collection (GCC) basitleştirmek taşınabilirlik ve dahili birkaç ara dilleri kullanan çapraz derleme . Bu diller arasında

  • tarihsel Kayıt Transfer Dili (RTL)
  • ağaç dili GENEL
  • SSA Gimple tabanlı. (GENERIC'ten daha düşük seviye; çoğu optimize edici için giriş; kompakt bir "bayt kodu" gösterimine sahiptir.)

GCC, nihai hedef olarak bu BT'lerin oluşturulmasını destekler:

LLVM derleyici çerçeve dayanmaktadır LLVM IR kompakt, ikili tefrika gösterimi aynı zamanda "bitcode" olarak adlandırılır ve Apple tarafından ürünleştirilmiş edildiği ara dil,. GIMPLE Bytecode gibi, LLVM Bitcode da bağlantı zamanı optimizasyonunda kullanışlıdır. GCC gibi LLVM da bazı IR'lere Google'ın da dahil olmak üzere doğrudan dağıtım içindir hedefleyen PNaCI IR ve SPIR . LLVM içindeki bir başka gelişme , farklı heterojen hedefler için kod oluşturma ve farklı derleyicilerin çıktılarını birleştirme potansiyeline sahip Çok Düzeyli Ara Temsil (MLIR) kullanımıdır.

ILOC ara dili, derleyici tasarımındaki sınıflarda basit bir hedef dil olarak kullanılır.

Başka

Statik analiz araçları genellikle bir ara gösterim kullanır. Örneğin radare2 , ikili dosya analizi ve tersine mühendislik için bir araç kutusudur. İkili dosyaları analiz etmek için ESIL ve REIL ara dillerini kullanır.

Ayrıca bakınız

Referanslar

Dış bağlantılar