Kaynaktan kaynağa derleyici - Source-to-source compiler

Bir kaynak-kaynak çevirmen , kaynak-kaynak derleyici ( S2S derleyici ), transcompiler veya transpiler türüdür çevirmen alır kaynak kodu , bir yazılmış bir program programlama dili girdi olarak ve eşdeğer bir kaynak kod üretir aynı veya farklı bir programlama dilinde. Yaklaşık aynı seviyede işlemler programlama dilleri arasındaki kaynak-kaynağında çevirmen dönüştürür soyutlama geleneksel ederken, derleyici bir gelen çevirir üst düzey programlama dili a alt seviye programlama dili . Örneğin, bir kaynak-kaynağından çevirmen bir programın çevirisini yapabilir Python için JavaScript geleneksel derleyici gibi bir dilden tercüme ederken, C için assembler veya Java için bytecode . Bir otomatik koşutlama derleyici sıkça girdi olarak yüksek düzeyde dil programında almak ve kodu dönüştürmek ve paralel kod ek açıklamalar (örneğin, onu açıklama edecek OpenMP (örn) veya dil oluşumlarından Fortran 'ın forallifadeleri).

Kaynaktan kaynağa derlemenin başka bir amacı, temel alınan programlama dilinin sonraki sürümünü veya geriye dönük uyumluluğu bozan bir API'yi kullanmak için eski kodu çevirmektir. Bu otomatik gerçekleştirecektir Kod yeniden refactor programları orijinal uygulayıcı kontrolü dışında olduğunda (örneğin, yeni bir API eski API Python 3 ya da dönüştürme programlara Python 2 programları dönüştürme yararlıdır) veya programın boyutu, elle yeniden düzenlemeyi pratik veya zaman alıcı hale getirir.

Dönüştürücüler , orijinal kaynak kodun geliştirilmesini ve hata ayıklamasını kolaylaştırmak için çevrilmiş kod yapısını kaynak koda mümkün olduğunca yakın tutabilir veya orijinal kodun yapısını, çevrilmiş kod kaynak kod gibi görünmeyecek kadar değiştirebilir. Ayrıca, dönüştürülen kaynak kodunu orijinal kodla eşleştiren hata ayıklama yardımcı programları da vardır; örneğin, JavaScript Kaynak Haritası standardı, bir web tarayıcısı tarafından yürütülen JavaScript kodunun, örneğin JavaScript kodu küçültüldüğünde veya JavaScript'e dönüştürülen bir dil tarafından üretildiğinde orijinal kaynağa eşlenmesine izin verir .

Örnekler arasında Closure Compiler , CoffeeScript , Dart , Haxe , TypeScript ve Emscripten bulunur .

Assembly dili çevirmenleri

Intel CONV86

Intel , 16 bit işlemci 8086'yı , 8 bitlik bir işlemci olan 8080 ile kaynak uyumlu olacak şekilde pazarladı . Bunu desteklemek için Intel, 1978'den beri OEM müşterilerinin kullanımına sunulan CONV86 adlı 8080'den 8086'ya kaynak koduna (CONV-86 ve CONVERT 86 olarak da değinilir) ISIS-II tabanlı bir çevirmene sahipti , bu muhtemelen bu türdeki en eski programdı. Birden çok çeviri düzeyini destekledi ve 8 inç disket sürücüleri olan bir Intel Mikroişlemci Geliştirme Sistemi MDS-800 üzerinde 2 MHz'de çalıştı . Kullanıcı raporlarına göre, çok güvenilir çalışmadı.

SCP TRANS86

Seattle Computer Products ' (SCP), Tim Paterson tarafından 1980'de 86-DOS geliştirilirken yazılan TRANS86.COM'u sundu . Yardımcı program Intel 8080 ve Zilog Z80 derleme kaynak kodunu (Zilog/ Mostek anımsatıcıları ile ) Intel 8086 için .ASM kaynak koduna çevirebilir (yalnızca CP/M-80 için SCP'nin çapraz montajcısı ASM86 ile uyumlu bir formatta ), ancak desteklenir işlem kodlarının , kayıtların ve modların yalnızca bir alt kümesidir ve genellikle daha sonra önemli manuel düzeltme ve yeniden işleme gerektirmiştir. Ayrıca, yalnızca harf çevirisi gerçekleştiren kaba kuvvet tek geçişli çevirmen herhangi bir kayıt ve atlama optimizasyonu gerçekleştirmedi. Yaklaşık 24 KB RAM aldı. TRANS86.COM'un SCP sürüm 1, Z80 tabanlı sistemlerde çalıştı. 86-DOS çalışırken, Paterson kendisini 86-DOS altında çalışan bir programa dönüştürmek için TRANS86'yı kullandı. Numaralandırılmış sürüm 2, bunun yerine TRANS.COM olarak adlandırıldı. Daha sonra 1982'de, çevirmen görünüşe göre Microsoft'tan da mevcuttu .

Sorcim TRANS86

Ayrıca adlı TRANS86, Sorcim iyi Aralık 1980 gibi SCP programına günden beri o (ASM, MAC, RMAC veya ACT80 montaj biçiminde) portu CP / M-80 uygulama kodu için tasarlanmıştır olarak 8086 çevirmen bir 8080 teklif MS-DOS (in ACT86 ile uyumlu bir format). ACT80 biçiminde, birkaç Z80 anımsatıcısını da destekledi. Çeviri, koşullu atlamalara uygulanan bazı optimizasyonlarla talimat bazında gerçekleşti. Program, minimum 24 KB RAM ile CP/M-80, MP/M-80 ve Cromemco DOS altında çalıştı ve kaynak dosya boyutunda herhangi bir kısıtlama yoktu.

Dijital Araştırma XLT86

Kaynak çeviri sürecine çok daha karmaşık ve optimize edici derleyici teknolojilerini ilk getiren , Digital Research'ün Eylül 1981'deki XLT86 1.0'ıydı. XLT86 1.1, Nisan 1982'de mevcuttu. Program Gary Kildall tarafından yazılmış ve .ASM kaynak kodu için çevrilmiştir. Intel 8080 işlemci (ASM, MAC veya RMAC derleyicileri ile uyumlu bir biçimde) 8086 için .A86 kaynak koduna (ASM86 ile uyumlu). Kullanma global veri akış analizi 8080 sicil kullanımı ile ilgili, beş aşamalı çok geçişli çevirmen de kod boyutu için çıkışı optimize ve işaretler çağrı dikkat çekmek (CP / M-80 BDOS aramaları BDOS içine haritalanmıştır çağrısı CP / M- 86 ), böylece CP/M-80 ve MP/M-80 programları otomatik olarak CP/M-86 ve MP/M-86 platformlarına taşınabilir . XLT86.COM'un kendisi CP/M-80 platformları için PL/I-80'de yazılmıştır . Program kendisi için 30 KB RAM ve program grafiği için ek bellek kaplıyordu . 64 KB'lık bir bellek sisteminde, desteklenen maksimum kaynak dosya boyutu yaklaşık 6 KB'dı, bu nedenle daha büyük dosyaların çeviriden önce uygun şekilde parçalanması gerekiyordu. Alternatif olarak, DEC VAX/VMS için XLT86 da mevcuttu ( VAX 11/750 veya 11/780 için ). XLT86'nın giriş ve çıkışı kaynak kodu düzeyinde çalışsa da, çevirmenin programın bellek içi temsili ve uygulanan kod optimizasyon teknolojileri ikili yeniden derlemenin temelini oluşturdu .

Diğerleri

2500 AD Software, Z80'li CP/M-80 makinelerinin yanı sıra Zilog ZEUS ve Olivetti PCOS sistemleri için XASM paketinin bir parçası olarak 8080 ila 8086 kaynak kodu çeviricisi sundu .

1979'dan beri Zilog , PDS 8000 geliştirme sisteminin bir parçası olarak Z80'den Z8000'e çevirmen sunuyor. Advanced Micro Computers (AMC) ve 2500 AD Software, Z80'den Z8000'e çevirmenler de sundu. Sonuncusu TRANS olarak adlandırıldı ve Z80 CP/M, CP/M-86, MS-DOS ve PCOS için mevcuttu.

Programlama dili uygulamaları

Bazı programlama dillerinin ilk uygulamaları dönüştürücüler olarak başladı ve bu dillerden bazıları için varsayılan uygulama hala dönüştürücülerdir. Aşağıdaki tabloya ek olarak, bir CoffeeScript sağlayıcısı , JavaScript'i derleyen dillerin bir listesini sağlar.

Dönüştürücülerin listesi
İsim Kaynak dil Hedef dil
ön yüz C++ C
PHP için HipHop (HPHPc) PHP C++
Babil ES6+ ( JS ) ES5
ClojureScript Clojure JavaScript
JSweet Java TypeScript
Swiftify Amaç-C Süratli
J2ObjC Java Amaç-C
Haxe Haxe ActionScript 3 , JavaScript , Java , C++ , C# , PHP , Python , Lua
Maya Maya verilog
Cerberus X Cerberus JavaScript , Java , C++ , C#

Kod tabanı taşıma

Geliştiriciler, mevcut bir kod tabanının çoğunu korurken farklı bir dile geçmek istediklerinde, tüm yazılımı elle yeniden yazmak yerine bir dönüştürücü kullanmak daha iyi olabilir. Dönüştürücünün kalitesine bağlı olarak, kodun düzgün çalışması için manuel müdahaleye ihtiyacı olabilir veya olmayabilir. Bu, spesifikasyonların çıktı kaynak kodunun her zaman değiştirilmeden çalışmasını talep ettiği "dönüştürülmüş dillerden" farklıdır. Bir kod tabanını taşımak için kullanılan tüm dönüştürücüler, okunabilirlik ve platform kuralı açısından maksimum kod kalitesi elde etme ihtiyacı varsa, çıktı kaynak kodunun manuel olarak ayarlanmasını bekler.

Dönüştürücü boru hatları

Dönüştürücü işlem hattı, özyinelemeli yeniden derlemeden kaynaklanan şeydir . Birden çok teknoloji katmanını, her katman arasında bir dönüştürme adımıyla bir araya getirerek, teknoloji tekrar tekrar dönüştürülebilir ve etkin bir şekilde dağıtılmış dilden bağımsız bir belirtim oluşturulabilir .

XSLT , bu tür bir türev kod ardışık düzeni oluşturmak için birçok farklı teknoloji arasında kullanılabilen genel amaçlı bir dönüştürme aracıdır .

özyinelemeli çapraz derleme

Özyinelemeli aktarma (veya özyinelemeli yeniden derleme ), bir teknolojiyi tekrar tekrar diğerine dönüştüren bir dönüşümler hattı (genellikle tek bir hakikat kaynağından başlayarak) oluşturmak için yinelemeli olarak aktarma kavramını uygulama sürecidir .

Bu işlemi tekrarlayarak, A → B → C → D → E → F ve ardından tekrar A(v2)'ye dönülebilir. Bu ardışık düzen aracılığıyla A → A(v2)'den bazı bilgiler korunacaktır ve bu bilgi (soyut düzeyde), A–F bileşenlerinin her birinin üzerinde anlaştığını gösterir.

Dönüştürücü işlem hattının ürettiği farklı sürümlerin her birinde bu bilgiler korunur. Birçok farklı şekil ve boyut alabilir, ancak yukarıdaki boru hattında altı kez yeniden derlenmiş olan A (v2)'ye geri döndüğünde, bilgi orijinal durumuna geri döner.

A–F–A(v2) arasındaki her bir format aracılığıyla dönüşümden sağ çıkan bu bilgi, (tanım gereği) türev içerik veya türev kodudur .

Özyinelemeli aktarım, aktarıcıların orijinal kaynak kodun geliştirilmesini ve hata ayıklamasını kolaylaştırmak için çevrilmiş kodu kaynak koda mümkün olduğunca yakın tutabilmeleri veya orijinal kodun yapısını o kadar çok değiştirebilmeleri gerçeğinden yararlanır. kod kaynak koda benzemiyor. Aktarılan kaynak kodunu orijinal koda geri eşleyen hata ayıklama yardımcı programları da vardır; örneğin JavaScript kaynak haritaları, bir web tarayıcısı tarafından yürütülen JavaScript kodunun JavaScript'e aktarılmış bir dilde orijinal kaynağa eşlenmesine izin verir .

Ayrıca bakınız

Notlar

Referanslar

daha fazla okuma

Dış bağlantılar