Kaynaktan kaynağa derleyici - Source-to-source compiler
Program yürütme |
---|
Genel konseptler |
Kod türleri |
Derleme stratejileri |
|
Önemli çalışma zamanları |
|
Önemli derleyiciler ve araç zincirleri |
|
Veri dönüşümü |
---|
kavramlar |
Dönüşüm dilleri |
Teknikler ve dönüşümler |
Uygulamalar |
İlgili |
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 forall
ifadeleri).
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.
İ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.
Alet | Kaynak dil | Hedef dil | Yorumlar |
---|---|---|---|
2-3 komut dosyası | piton 2 | piton 3 | 2to3, çeviri sürecini otomatikleştirmede elinden gelenin en iyisini yapsa da, genellikle daha fazla manuel düzeltmeye ihtiyaç duyulur. |
Emscripten | LLVM bayt kodu | JavaScript | Bu, örneğin bir tarayıcıda C/C++ kod tabanlarının çalıştırılmasına izin verir. |
c2go | C | Gitmek | 1.5 sürümünden önce, Go derleyicisi C dilinde yazılmıştı. Derleyici kod tabanını otomatik olarak C'den Go'ya dönüştürmek için bir otomatik çevirmen geliştirildi. Go 1.5'ten bu yana, "derleyici ve çalışma zamanı artık Go ve assembler'da C olmadan uygulanmaktadır". |
C2Pas | C | Pas | C2Rust unsafe , orijinal kod tabanıyla uyumluluğu korumaya odaklanarak C kodunu girdi olarak alır ve Rust kodunu çıkarır . Bu işlem için belgelenmiş çeşitli sınırlamalar mevcuttur. Ortaya çıkan kodu güvenli ve deyimsel Rust koduna dönüştürmek, bu görevi kolaylaştırmak için otomatik bir araç olmasına rağmen, çeviri sonrası manuel bir çabadır.
|
Google Web Araç Seti | Belirli bir API kullanan Java programı | JavaScript | Java kodu, normal Java koduna kıyasla biraz kısıtlıdır. |
Ocsigen'den Js_of_ocaml | OCaml | JavaScript | |
J2Eif | Java | Eyfel | Ortaya çıkan Eyfel kodu, Java programına benzer, ancak Eyfel sözdizimi ve kurallarını izleyen sınıflara ve yapılara sahiptir. |
C2Eif | C | Eyfel | Ortaya çıkan Eiffel kodu, mümkün olduğunca temiz olmaya çalışan sınıflara ve yapılara sahiptir. Araç tamamlanmıştır ve düzgün çeviremezse C ve montaj kodunu gömmeye güvenir. |
Swiftify | Amaç-C | Süratli | Swiftify, Objective-C'den Swift'e dönüştürme aracı için çevrimiçi bir kaynaktır. iOS kod tabanlarının tamamını veya bir kısmını Swift'e geçiren geliştiricilere yardımcı olur. Dönüştürme, öncelikle Objective-C ve Swift arasındaki sözdizimini dönüştürmeyi amaçlar ve Apple'ın Swift ve Objective-C çalışma zamanları arasında uyumluluğu sağlamak için çaba göstermesi nedeniyle yardımcı olur. |
Çalışma Zamanı Dönüştürücü | PHP | Java | Runtime Converter, PHP kaynak kodunu Java kaynak koduna dönüştüren otomatik bir araçtır. PHP dilinin belirli özellikleri için bir Java çalışma zamanı kitaplığının yanı sıra, PHP standart kitaplığı ve uzantı işlevi çağrıları için JNI kullanarak PHP ikili dosyasının kendisini arama yeteneği vardır. |
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
- İkili yeniden derleyici
- C'den HDL'ye
- Kod oluşturma (derleyici) - Bir derleyicinin kod oluşturucusunun, kaynak kodun bazı ara temsillerini bir makine tarafından kolayca yürütülebilecek bir forma dönüştürme işlemi
- DMS Software Reengineering Toolkit – açık kalıba yönelik yeniden yazma kuralları kullanan kaynaktan kaynağa derleyici çerçevesi
- f2c – Fortran 77'den C'ye kaynaktan kaynağa derleyici
- Honeywell Liberator ( IBM 1401 programlarını Honeywell H200 üzerinde çalıştırıyor )
- Ara temsil – Kaynak kodunu temsil etmek için bir derleyici veya sanal makine tarafından dahili olarak kullanılan veri yapısı veya kod
- Dil bağlama – Başka bir programlama dilinde kodlanmış başka bir kitaplığın kullanılmasına izin veren yazılım kitaplığı
- Dilden bağımsız belirtim – Programlama dilleri arasında birlikte çalışabilir olması amaçlanan bilgisayar programlama standardı
- Dil birlikte çalışabilirliği
- İkili optimizasyon olarak da bilinen nesne kodu optimize edici
- Önişlemci – Başka bir program için girdiyi işleyen program
- Program dönüşümü
- özyinelemeli çapraz derleme
- ROSE (derleyici çerçevesi) – kaynaktan kaynağa derleyici çerçevesi
- Çevirmen (bilgi işlem) – Kodu bir programlama dilinden diğerine çeviren bilgisayar programı
- XSLT – XML belgelerini dönüştürmek için dil
Notlar
Referanslar
daha fazla okuma
- "TAL II ile Sycor Ünitelerinin Programlanması Kolaylaştı" . Computerworld – Bilgisayar Topluluğu için Newsweekly . IX (34) Ann Arbor, Michigan, ABD: Computerworld, Inc. 1975-08-20. P. 14. ISSN 0010-4841 . 2020-02-01 tarihinde kaynağından arşivlendi . 2020-01-18 alındı .
- Zerilli, Frank J.; Derouen, Craig (1986-12-11) [1985-08-15, 1984-12-20, 1984-11-20]. "8080 - 8086 ASM çevirmeni, ASM kaynağı ile" . SIMTEL . XLT86.COM 1.10. 2020-02-01 tarihinde kaynağından arşivlendi . 2020-01-18 alındı . 1984-11-11 sürüm 1.05 (Not. DOS yürütülebilir XLT86.COM [12 KB], Intel 8080 derleme dili kaynak kodunu Intel 8086 derleme dili kaynak koduna çevirir. Adına rağmen 8086 derlemesindeki bu uygulama, Digital Research'ün önceki sürümleriyle ilgili değildir. ve çok daha gelişmiş XLT86 .)
-
Albo, Julian (2009-04-24). "Pasmo, ensamblador cruzado Z80 taşınabilir / taşınabilir Z80 çapraz montajcı" (İspanyolca ve İngilizce). 2020-02-20 tarihinde kaynağından arşivlendi . 2020-02-20 alındı .
[…] Pasmo, aşağıdaki formatlarda nesne kodu üretebilen […] bir Z80 çapraz derleyicidir […]: ham ikili, Intel HEX , CP/M Plus RSX için PRL , Plus3Dos ( Spectrum +3 disk), TAP, TZX ve CDT (Spectrum ve Amstrad CPC öykünücüleri bant görüntüleri), AmsDos (Amstrad CPC diski) ve MSX (Basic'te diskten BLOAD ile kullanım için). 0.5.0 sürümünden başlayarak […], Z80 kaynaklarından,
Ms-dos COM dosyaları için ikili biçimde veya CP/M 86 CMD biçiminde 8086 kodu da oluşturabilir . […] [37] [38] -
Ciarcia, Steve (Mayıs 1984). "Trump Card – Bölüm 1: Donanım – IBM PC'nizi 16-bit ortak işlem gücüyle hızlandırın" (PDF) . BYTE – Küçük sistem günlüğü . Ciarcia'nın Devre Mahzeni. Cilt 9 hayır. 5. McGraw-Hill, Inc. s. 40–52, 54–55. ISSN 0360-5280 . 2020-01-29 alındı .
[…] Bunun yerine BASIC ve C gibi üst düzey dillerde yazılmış programları yürütür (bir Pascal derleyicisi ve 8088'den Z8000'e çevirmenler iş başındadır. […]
ve Ciarcia, Steve (Haziran 1984). "Trump Card – Bölüm 2: Yazılım – TBASIC ve C derleyicileri ve bir derleme" (PDF) . BYTE – Küçük sistem günlüğü . Ciarcia'nın Devre Mahzeni. Cilt 9 hayır. 6. McGraw-Hill, Inc. s. 115–122. ISSN 0360-5280 . 2020-01-29 alındı .[…] Z80'den Z8000'e ve 8088'den Z8000'e dönüştürmeler için nesne kodu çevirmenlerinin yakında kullanıma sunulmasını bekliyorum […]
, ayrıca Ciarcia, Steve (1990) olarak da mevcuttur . "Trump Card – Bölüm 1: Donanım – IBM PC'nizi 16-bit yardımcı işlemci gücüyle hızlandırın ve Bölüm 2: Yazılım – TBASIC ve C derleyicileri ve bir araya getirin" . Gonneau'da Daniel; Bernardi, Fred; Ausburn, Richard (ed.). Ciarcia'nın Devre Mahzeni . 7 . McGraw-Hill Yayıncılık Şirketi . s. 138–152, 153–160. ISBN'si 0-07-010969-9. 2020-02-01 tarihinde kaynağından arşivlendi . 2020-01-29 alındı . [39] - Mikrodenetleyici Bölümü Uygulama Ekibi (2000). "HC05'ten ST7'ye Montaj Kodunu Çevirme" (PDF) (Uygulama Notu). STMikroelektronik . AN1106/0200 . 2020-01-18 alındı .(9 sayfa) (NB. Bu yazılım çevirmen ST tarafından geliştirilen ve çevirir edildi Motorola 6805 / HC05 içine 2500AD Yazılım formatında montaj kaynak kodu ST7 kaynak kodu. İçin MIGR2ST7.EXE yürütülebilir Windows'un "MCU AÇIK CD" edinilebilir.)
Dış bağlantılar
- Chaudry, Gabriele "Gaby" (2009-07-11). "Das Intel zu Zilog – Übersetzungsprojekt" . I2Z-Tercüman (Almanca). 2016-09-11 tarihinde kaynağından arşivlendi . 2020-01-18 alındı .
- "PortAsm Assembler'dan Assembler'a Çeviri" . MicroAPL Ltd. 2017 [1996]. 2019-07-30 tarihinde kaynağından arşivlendi . 2020-01-18 alındı .
- "Metodolojimiz – Kaynaktan Kaynağa Dönüştürme Süreci" . Mikro İşlemci Hizmetleri, Inc. (MPS). 2019-05-12 tarihinde kaynağından arşivlendi . 2020-02-01 alındı .