กลับไปหน้าบทความ

อ่าน 25 นาที

คอมไพเลอร์แบบซอร์สโค้ดต่อซอร์สโค้ด

ตัว แปลซอร์สโค้ดเป็นซอร์สโค้ด ( S2S compiler ) หรือ ท ราน สไพเลอร์ ( transpiler ) [ 1 ] [ 2 ] [ 3 ] เป็นประเภทของ ตัวแปล ที่รับ ซอร์สโค้ด ของโปรแกรมที่เขียนด้วย ภาษาโปรแกรม...

คอมไพเลอร์แบบซอร์สโค้ดต่อซอร์สโค้ด

ตัวแปลซอร์สโค้ดเป็นซอร์สโค้ด ( S2S compiler ) หรือ ท รานสไพเลอร์ ( transpiler ) [ 1 ] [ 2 ] [ 3 ]เป็นประเภทของตัวแปลที่รับซอร์สโค้ดของโปรแกรมที่เขียนด้วยภาษาโปรแกรมเป็นอินพุต และสร้างซอร์สโค้ดที่เทียบเท่ากันในภาษาโปรแกรมเดียวกันหรือต่างกัน โดยปกติจะเป็นการแสดงผลระดับกลางตัวแปลซอร์สโค้ดเป็นซอร์สโค้ดจะแปลงระหว่างภาษาโปรแกรมที่ทำงานในระดับนามธรรม ที่ใกล้เคียงกัน ในขณะที่คอมไพเลอร์ แบบดั้งเดิม จะแปลจากภาษาที่มีระดับสูงกว่าไปยังภาษาที่มีระดับต่ำกว่าตัวอย่างเช่น ตัวแปลซอร์สโค้ดเป็นซอร์สโค้ดอาจทำการแปลโปรแกรมจากPythonเป็นJavaScriptในขณะที่คอมไพเลอร์แบบดั้งเดิมจะแปลจากภาษาเช่นCไปเป็นแอสเซมบลีหรือJavaไปเป็นไบต์โค้ด[ 4 ]คอม ไพเลอร์ แบบขนานอัตโนมัติมักจะรับโปรแกรมภาษาโปรแกรมระดับสูงเป็นอินพุต จากนั้นแปลงโค้ดและใส่คำอธิบายประกอบด้วยคำอธิบายประกอบโค้ดแบบขนาน (เช่นOpenMP ) หรือโครงสร้างภาษา (เช่น คำสั่ง ของFortran ) [ 2 ] [ 5 ]forall

อีกหนึ่งจุดประสงค์ของการคอมไพล์จากซอร์สโค้ดหนึ่งไปยังอีกซอร์สโค้ดหนึ่งคือ การแปลงโค้ดเก่าให้ใช้ภาษาโปรแกรมหรืออินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน ( API ) เวอร์ชันใหม่กว่า ซึ่งอาจขัดแย้งกับเวอร์ชันก่อนหน้า กระบวนการนี้จะทำการปรับโครงสร้างโค้ด โดยอัตโนมัติ ซึ่งมีประโยชน์เมื่อโปรแกรมที่จะปรับโครงสร้างนั้นอยู่นอกเหนือการควบคุมของผู้พัฒนาเดิม (เช่น การแปลงโปรแกรมจาก Python 2 เป็น Python 3 หรือการแปลงโปรแกรมจาก API เก่าเป็น API ใหม่) หรือเมื่อขนาดของโปรแกรมใหญ่เกินไปจนไม่สะดวกหรือไม่ก็ใช้เวลานานเกินไปที่จะปรับโครงสร้างด้วยตนเอง

โปรแกรมแปลงโค้ดอาจรักษาโครงสร้างโค้ดที่แปลแล้วให้ใกล้เคียงกับโค้ดต้นฉบับมากที่สุดเท่าที่จะเป็นไปได้ เพื่อลดความยุ่งยากในการพัฒนาและแก้ไขข้อบกพร่องของโค้ดต้นฉบับ หรืออาจเปลี่ยนแปลงโครงสร้างของโค้ดต้นฉบับมากจนโค้ดที่แปลแล้วดูไม่เหมือนกับโค้ดต้นฉบับ[ 6 ]นอกจากนี้ยังมีโปรแกรมยูทิลิตี้สำหรับแก้ไขข้อบกพร่องที่แมปโค้ดต้นฉบับที่แปลงแล้วกลับไปยังโค้ดต้นฉบับ ตัวอย่างเช่น มาตรฐาน JavaScript Source Map อนุญาตให้แมปโค้ด JavaScript ที่ดำเนินการโดยเว็บเบราว์เซอร์กลับไปยังโค้ดต้นฉบับเมื่อโค้ด JavaScript ถูกย่อขนาดหรือสร้างขึ้นโดยภาษาที่แปลงเป็น JavaScript [ 7 ]

ตัวอย่างได้แก่Closure Compiler , CoffeeScript , Dart , Haxe , Opal , TypeScriptและEmscripten [ 8 ]

ตัวแปลภาษาแอสเซมบลี

โปรแกรมแปลภาษาแอสเซมบลี ( Assembly language Translators)คือกลุ่มของโปรแกรมแปลโค้ดจากภาษาแอสเซมบลี หนึ่ง ไปยังอีกภาษาหนึ่ง ซึ่งรวมถึง (แต่ไม่จำกัดเพียง) การแปลข้ามตระกูลโปรเซสเซอร์และแพลตฟอร์มระบบต่างๆ

อินเทล CONV86

Intelวางจำหน่ายโปรเซสเซอร์ 16 บิต8086โดยระบุว่าสามารถใช้งานร่วมกับ8080ซึ่งเป็นโปรเซสเซอร์ 8 บิต ได้ [ 9 ]เพื่อสนับสนุนเรื่องนี้ Intel มีตัวแปลรหัสต้นฉบับจาก 8080 เป็น 8086 ที่ใช้ISIS-II ชื่อ CONV86 [ 10 ] [ 11 ] [ 12 ] [ 13 ] (เรียกอีกอย่างว่า CONV-86 [ 14 ]และ CONVERT 86 [ 15 ] [ 16 ] )ซึ่งมีให้สำหรับ ลูกค้า OEM ตั้งแต่ปี 1978 ซึ่งอาจ เป็นโปรแกรมประเภทนี้ที่เก่าแก่ที่สุด[ nb 1 ] โปรแกรม นี้รองรับการแปลหลายระดับและทำงานที่ความเร็ว 2 MHz บนระบบพัฒนาไมโครโปรเซสเซอร์ของ Intel MDS-800 ที่มี ไดรฟ์ฟลอปปี้ขนาด 8 นิ้วจากรายงานของผู้ใช้ พบว่ามันทำงานได้ไม่น่าเชื่อถือมากนัก[ 17 ] [ 18 ]

SCP TRANS86

Seattle Computer Products (SCP) เสนอ TRANS86.COM [ 16 ] [ 19 ] [ 20 ]ซึ่งเขียนโดยTim Patersonในปี 1980 ขณะพัฒนา86-DOS [ 21 ] [ 22 ] [ 23 ] ยูทิลิตี้นี้สามารถแปลงซอร์สโค้ดแอสเซมบลี Intel 8080 และZilog Z80 (พร้อม ตัวย่อ Zilog/ Mostek ) เป็นซอร์สโค้ด .ASM สำหรับ Intel 8086 (ในรูปแบบที่เข้ากันได้กับแอสเซมเบลอร์ข้ามแพลตฟอร์ม ASM86 ของ SCP สำหรับCP/M-80เท่านั้น) แต่รองรับเฉพาะชุดย่อยของโอเปรนด์รีจิสเตอร์ และโหมด และมักยังคงต้องมีการแก้ไขและปรับปรุงด้วยตนเองอย่างมากในภายหลัง[ 24 ] [ 21 ] นอกจากนี้ การ แปลงอักษรเพียงอย่างเดียว[ 15 ] [ 19 ] [ 10 ] [ 11 ] ตัวแปล แบบ brute-force single-passไม่ได้ทำการปรับแต่งรีจิสเตอร์และการกระโดดใดๆ[ 25 ] [ 26 ] ใช้ RAM ประมาณ 24 KB [ 16 ] TRANS86.COM เวอร์ชัน SCP 1 ทำงานบนระบบที่ใช้ Z80 [ 16 ] [ 19 ]เมื่อ 86-DOS ทำงานแล้ว Paterson ได้ใช้ TRANS86 ใน แนวทางที่ได้รับแรงบันดาล ใจจากการโฮสต์ด้วยตนเองเพื่อแปลงตัวเองให้เป็นโปรแกรมที่ทำงานภายใต้ 86-DOS [ 23 ] [ 19 ]เวอร์ชันหมายเลข 2 นี้จึงถูกตั้งชื่อว่า TRANS.COM แทน[ 19 ] [ 26 ] [ 25 ] [ 27 ] [ 28 ]ต่อมาในปี 1982 ดูเหมือนว่าโปรแกรมแปลภาษาจะพร้อมใช้งานจากMicrosoftด้วย[ 16 ] [ 29 ]

ซอร์ซิม ทรานส์86

โปรแกรมที่ชื่อ TRANS86 เช่นกันSorcimได้นำเสนอตัวแปล 8080 เป็น 8086 ตั้งแต่เดือนธันวาคม พ.ศ. 2523 [ 30 ] [ 15 ]เช่นเดียวกับโปรแกรมของ SCP โปรแกรมนี้ได้รับการออกแบบมาเพื่อแปลงโค้ดแอปพลิเคชัน CP/M-80 (ในรูปแบบแอสเซมบลี ASM, MAC, RMAC หรือ ACT80) ไปยังMS-DOS (ในรูปแบบที่เข้ากันได้กับ ACT86) [ 30 ] [ 16 ] [ 31 ] [ 32 ]ในรูปแบบ ACT80 ยังรองรับคำสั่งย่อ Z80 บางส่วนด้วย การแปลเกิดขึ้นแบบคำสั่งต่อคำสั่งโดยมีการเพิ่มประสิทธิภาพบางอย่างกับการกระโดดแบบมีเงื่อนไข โปรแกรมทำงานภายใต้ CP/M-80, MP/M-80และCromemco DOSโดยใช้ RAM อย่างน้อย 24 KB และไม่มีข้อจำกัดเกี่ยวกับขนาดไฟล์ต้นฉบับ[ 16 ] [ 33 ]

ดิจิทัลรีเสิร์ช XLT86

XLT86 1.0 ของDigital Research ในเดือนกันยายน พ.ศ. 2524 มีความซับซ้อนมากขึ้นและเป็นโปรแกรมแรกที่นำเทคโนโลยี คอมไพ เลอร์ที่ปรับให้ เหมาะสมมาใช้ในกระบวนการแปลซอร์สโค้ด XLT86 1.1 พร้อมใช้งานในเดือนเมษายน พ.ศ. 2525 [ 34 ]โปรแกรมนี้เขียนโดยGary Kildall [ 15 ] [ 35 ] [ 36 ] [ 37 ]และแปลซอร์สโค้ด .ASM สำหรับโปรเซสเซอร์ Intel 8080 (ในรูปแบบที่เข้ากันได้กับแอสเซมเบลอร์ ASM, MAC หรือ RMAC) เป็น ซอร์สโค้ด .A86สำหรับ 8086 (เข้ากันได้กับ ASM86) การใช้การวิเคราะห์การไหลของข้อมูลทั่วโลกในการใช้งานรีจิสเตอร์ 8080 [ 38 ] [ 15 ] [ 39 ] [ 40 ] ตัวแปลง แบบหลายรอบห้าเฟสจะปรับเอาต์พุตให้เหมาะสมกับขนาดโค้ดและดูแลข้อกำหนดการเรียก ( การเรียก BDOS ของ CP/M-80 ถูกแมปเป็นการเรียก BDOS สำหรับCP/M-86 ) เพื่อให้โปรแกรม CP/M-80 และ MP/M-80 สามารถพอร์ตไปยังแพลตฟอร์ม CP/M-86 และMP/M-86ได้โดยอัตโนมัติ XLT86.COM เองเขียนด้วยPL/I-80สำหรับแพลตฟอร์ม CP/M-80 [ 41 ] [ 16 ] [ 34 ] [ 42 ]โปรแกรมใช้ RAM 30 KB สำหรับตัวมันเองบวกกับหน่วยความจำเพิ่มเติมสำหรับกราฟโปรแกรมในระบบหน่วยความจำ 64 KB ขนาดไฟล์ต้นฉบับสูงสุดที่รองรับได้คือประมาณ 6 KB [ 41 ] [ 16 ] [ 43 ] [ 34 ]ดังนั้นไฟล์ขนาดใหญ่จึงต้องถูกแบ่งย่อยตามความเหมาะสมก่อนการแปล[ 16 ] [ 34 ]นอกจากนี้ XLT86 ยังมีให้ใช้งานสำหรับDEC VAX/VMSด้วย[ 16 ] [ 34 ]แม้ว่าการป้อนข้อมูลและการส่งออกของ XLT86 จะทำงานในระดับซอร์สโค้ด แต่การแสดงโปรแกรมในหน่วยความจำของตัวแปลและเทคโนโลยีการเพิ่มประสิทธิภาพโค้ดที่ใช้ได้วางรากฐานสำหรับการคอมไพล์ไบนารีใหม่[ 44 ] [ 45 ] [ 46 ]

คนอื่น

2500 AD Software เสนอตัวแปลงซอร์สโค้ด 8080 เป็น 8086 เป็นส่วนหนึ่งของชุด XASM สำหรับเครื่อง CP/M-80 ที่ใช้ Z80 รวมถึงระบบZilog ZEUSและOlivetti PCOS [ 47 ]

ตั้งแต่ปี พ.ศ. 2522 Zilog ได้นำเสนอตัวแปลง Z80 เป็นZ8000เป็นส่วนหนึ่งของระบบพัฒนา PDS 8000 ของพวกเขา[ 48 ] [ 49 ] [ 50 ] [ 51 ] [ 52 ] [ 18 ] Advanced Micro Computers (AMC) [ 52 ] [ 18 ]และ 2500 AD Software ก็ได้นำเสนอตัวแปลง Z80 เป็น Z8000 เช่นกัน[ 47 ]โดยตัวหลังนี้มีชื่อว่า TRANS [ 53 ] [ 54 ]และสามารถใช้งานได้กับ Z80 CP/M, CP/M-86, MS-DOS และ PCOS [ 47 ]

ชุดพัฒนา Z88DK มีตัวแปลรหัสต้นฉบับ Z80 เป็น i486 ที่กำหนดเป้าหมายไปที่ nasmชื่อ "to86.awk" ซึ่งเขียนขึ้นในปี 2008 โดย Stefano Bodrato [ 55 ]ซึ่งอิงตามตัวแปลง 8080 เป็น Z80 ที่เขียนขึ้นในปี 2003 โดย Douglas Beattie, Jr. ชื่อ "toz80.awk" [ 55 ]

ในปี 2021 Brian Callahan ได้เขียนโปรแกรมแปลซอร์สโค้ด 8080 CP/M 2.2 เป็น MS-DOS ที่กำหนดเป้าหมายไปที่nasmชื่อ 8088ify [ 56 ]

การนำภาษาโปรแกรมไปใช้

การใช้งานภาษาโปรแกรมบางภาษาเริ่มต้นจากการแปลงโค้ด และการใช้งานเริ่มต้นสำหรับภาษาเหล่านั้นบางภาษาก็ยังคงเป็นการแปลงโค้ดอยู่ นอกจากตารางด้านล่างแล้ว ผู้ดูแล CoffeeScriptยังได้จัดทำรายการภาษาที่คอมไพล์เป็น JavaScript อีกด้วย[ 57 ]

รายชื่อทรานส์คอมไพเลอร์[ 4 ]
ชื่อ ภาษาต้นฉบับ ภาษาเป้าหมาย ความคิดเห็น
บาเบลECMAScript 6+ ( JavaScript ) อีเอส5
เซอร์เบอรัส เอ็กซ์เซอร์เบอรัส JavaScript , Java , C++ , C#
ซีฟรอนต์ซี++ซี
โคลจูร์สคริปต์โคลจูร์โค้ด JavaScript
คอฟฟี่สคริปต์คอฟฟี่สคริปต์โค้ด JavaScript
ดาฟนีดาฟนีC#, JavaScript , Java , C++, Go , Python
โผโผโค้ด JavaScript
h5 [ 58 ]ซี#โค้ด JavaScript
ไอเฟลผ่านทางEiffelStudioหอไอเฟล C, ภาษากลางทั่วไป
ต้นเอล์มต้นเอล์มโค้ด JavaScript
นิทานเอฟ#โค้ด JavaScript
นิทานไพธอนเอฟ# ไพธอน
แฮ็กซ์แฮ็กซ์ActionScript 3 , JavaScript, Java, C++, C#, PHP , Python , Lua
ฮิปฮอปสำหรับ PHP (HPHPc) พีพีซี++
J2ObjC [ 59 ]ชวา ออบเจกทีฟซี
เจเอสวีท[ 60 ]ชวา ไทป์สคริปต์
โคทลิน/JSโคทลินโค้ด JavaScript
ไมอา[ 61 ]ไมอา เวริล็อก
เมลังจ์ OCaml , Reasonโค้ด JavaScript
มรัสท์ซีสนิมซี คอมไพเลอร์ทดลองที่สามารถบูตสแตรปคอมไพเลอร์ Rust อย่างเป็นทางการ (rustc) ได้
นาคาโคบอลชวา
นิมนิมC, C++, Objective-C , JavaScript
เพียวสคริปต์เพียวสคริปต์โค้ด JavaScript
รีสคริปต์รีสคริปต์โค้ด JavaScript
ซาเธอร์ซาเธอร์ ซี
สกาล่า.เจเอสสกาล่าโค้ด JavaScript
Swiftify [ 62 ]ออบเจกทีฟซีสวิฟต์
วีวี ซี
วาลาวาลา ซี
หอไอเฟลจำลองหอไอเฟลซี

การย้ายโค้ดเบส

เมื่อนักพัฒนาต้องการเปลี่ยนไปใช้ภาษาอื่นโดยยังคงใช้โค้ดเบสเดิมส่วนใหญ่ การใช้ทรานส์คอมไพเลอร์อาจดีกว่าการเขียนซอฟต์แวร์ใหม่ทั้งหมดด้วยมือ ขึ้นอยู่กับคุณภาพของทรานส์คอมไพเลอร์ โค้ดอาจต้องการหรืออาจไม่ต้องการการแก้ไขด้วยตนเองเพื่อให้ทำงานได้อย่างถูกต้อง ซึ่งแตกต่างจาก "ภาษาที่ถูกแปลงแล้ว" ที่ข้อกำหนดระบุว่าโค้ดต้นฉบับที่ได้จะต้องทำงานได้โดยไม่ต้องแก้ไข ทรานส์คอมไพเลอร์ทั้งหมดที่ใช้ในการพอร์ตโค้ดเบสจะคาดหวังการปรับแต่งโค้ดต้นฉบับด้วยตนเองหากจำเป็นเพื่อให้ได้คุณภาพโค้ดสูงสุดในแง่ของความสามารถในการอ่านและการปฏิบัติตามมาตรฐานของแพลตฟอร์ม

เครื่องมือภาษาต้นฉบับภาษาเป้าหมายความคิดเห็น
สคริปต์2to3ไพธอน 2ไพธอน 3แม้ว่า 2to3 จะพยายามอย่างเต็มที่ในการทำการแปลแบบอัตโนมัติ แต่ก็ยังจำเป็นต้องมีการแก้ไขด้วยตนเองเพิ่มเติมอยู่บ่อยครั้ง
เอ็มสคริปเทนไบต์โค้ดLLVMโค้ด JavaScriptตัวอย่างเช่น วิธีนี้ช่วยให้สามารถรันโค้ดเบส C/C++ ในเบราว์เซอร์ได้
c2go [ 63 ]ซีไปก่อนการเปิดตัวเวอร์ชัน 1.5 คอมไพเลอร์ Go ถูกเขียนด้วยภาษา C มีการพัฒนาตัวแปลอัตโนมัติเพื่อแปลงโค้ดเบสของคอมไพเลอร์จากภาษา C เป็นภาษา Go โดยอัตโนมัติ[ 64 ] [ 65 ]ตั้งแต่ Go เวอร์ชัน 1.5 เป็นต้นมา "คอมไพเลอร์และรันไทม์ถูกนำไปใช้ในภาษา Go และแอสเซมเบลอร์ โดยไม่มีภาษา C"
C2Rust [ 66 ]ซีสนิมC2Rust รับโค้ด C เป็นอินพุตและส่งออกunsafeโค้ด Rust โดยมุ่งเน้นที่การรักษาความเข้ากันได้กับโค้ดเบสเดิม มีข้อจำกัดหลายประการที่ได้รับการบันทึกไว้สำหรับกระบวนการนี้ การแปลงโค้ดที่ได้ให้เป็นโค้ด Rust ที่ปลอดภัยและเป็นไปตามหลักการเป็นงานที่ต้องทำด้วยมือหลังจากการแปล แม้ว่าจะมีเครื่องมืออัตโนมัติเพื่อช่วยลดภาระงานนี้ก็ตาม[ 66 ]
Google Web Toolkitโปรแกรม Java ที่ใช้ APIเฉพาะตัวหนึ่งโค้ด JavaScriptโค้ด Java นี้มีข้อจำกัดเล็กน้อยเมื่อเทียบกับโค้ด Java ทั่วไป
Js_of_ocaml [ 67 ]ของ Ocsigenโอแคมล์โค้ด JavaScript
J2Eif [ 68 ]ชวาหอไอเฟลโค้ด Eiffel ที่ได้นั้นมีคลาสและโครงสร้างคล้ายกับโปรแกรม Java แต่ใช้ไวยากรณ์และหลักการของ Eiffel
C2Eif [ 69 ]ซีหอไอเฟลโค้ด Eiffel ที่ได้นั้นมีคลาสและโครงสร้างที่พยายามทำให้สะอาดที่สุดเท่าที่จะเป็นไปได้ เครื่องมือนี้สมบูรณ์และจะอาศัยการฝังโค้ด C และโค้ดแอสเซมบลีหากไม่สามารถแปลได้อย่างถูกต้อง
ข้าม[ 70 ]สวิฟต์โคทลินSkip เป็นปลั๊กอินของ Xcode ที่แปลงโค้ด Swift สำหรับแอปหรือไลบรารี iOS โดยใช้ SwiftUI ให้เป็นโค้ด Kotlin ดั้งเดิมที่เทียบเท่ากันสำหรับ Android โดยใช้ Jetpack Compose
Swiftify [ 71 ]ออบเจกทีฟซีสวิฟต์Swiftify เป็นเครื่องมือแปลงโค้ดจาก Objective-C เป็น Swift ที่ใช้งานได้ทางออนไลน์ ช่วยเหลือนักพัฒนาที่กำลังย้ายโค้ดเบส iOS ทั้งหมดหรือบางส่วนไปยัง Swift การแปลงนี้มุ่งเน้นไปที่การแปลงไวยากรณ์ระหว่าง Objective-C และ Swift เป็นหลัก และได้รับการสนับสนุนเนื่องจาก Apple ได้พยายามอย่างเต็มที่เพื่อให้มั่นใจว่ารันไทม์ของ Swift และ Objective-C เข้ากันได้
ตัวแปลงรันไทม์[ 72 ]พีพีชวาRuntime Converter เป็นเครื่องมืออัตโนมัติที่แปลงซอร์สโค้ด PHP เป็นซอร์สโค้ด Java มีไลบรารี Java Runtime สำหรับฟังก์ชันบางอย่างของภาษา PHP รวมถึงความสามารถในการเรียกใช้ไบนารี PHP โดยตรงโดยใช้ JNI สำหรับการเรียกใช้ไลบรารีมาตรฐานของ PHP และฟังก์ชันส่วนขยาย

ไปป์ไลน์ทรานคอมไพเลอร์

ไปป์ไลน์ทรานส์คอมไพเลอร์คือผลลัพธ์ที่ได้จากการแปลงโค้ดแบบเรียกซ้ำโดยการเชื่อมโยงเทคโนโลยีหลายชั้นเข้าด้วยกัน โดยมีขั้นตอนการแปลงโค้ดคั่นระหว่างแต่ละชั้น เทคโนโลยีสามารถถูกแปลงซ้ำ ๆ ได้อย่างมีประสิทธิภาพ ทำให้เกิดข้อกำหนดแบบกระจายที่ไม่ ขึ้นกับ ภาษา

XSLTเป็นเครื่องมือแปลงอเนกประสงค์ที่สามารถใช้ระหว่างเทคโนโลยีต่างๆ เพื่อสร้างไปป์ไลน์โค้ดอนุพันธ์ ดังกล่าว [ 73 ]

การแปลงคอมไพล์แบบเรียกซ้ำ

การแปลงโค้ดแบบเรียกซ้ำ (หรือการแปลงโค้ดแบบเรียกซ้ำ ) คือกระบวนการนำแนวคิดของการแปลงโค้ดมาใช้ซ้ำๆ เพื่อสร้างไปป์ไลน์ของการแปลง (โดยมักเริ่มต้นจากแหล่งข้อมูลหลักแหล่งเดียว ) ซึ่งจะเปลี่ยนเทคโนโลยีหนึ่งไปเป็นอีกเทคโนโลยีหนึ่งซ้ำๆ

โดยการทำซ้ำกระบวนการนี้ เราสามารถเปลี่ยน A → B → C → D → E → F แล้วกลับมาเป็น A(v2) ได้ ข้อมูลบางส่วนจะถูกเก็บรักษาไว้ตลอดกระบวนการนี้ จาก A → A(v2) และข้อมูลนั้น (ในระดับนามธรรม) แสดงให้เห็นว่าแต่ละองค์ประกอบ A–F เห็นพ้องต้องกันในเรื่องใดบ้าง

ในแต่ละเวอร์ชันที่ไปป์ไลน์การแปลงโค้ดสร้างขึ้น ข้อมูลนั้นจะถูกเก็บรักษาไว้ อาจมีรูปร่างและขนาดที่แตกต่างกันมากมาย แต่เมื่อกลับมาถึง A (v2) หลังจากถูกแปลงโค้ดหกครั้งในไปป์ไลน์ข้างต้น ข้อมูลก็จะกลับคืนสู่สถานะเดิม

ข้อมูลนี้ซึ่งยังคงอยู่รอดจากการแปลงผ่านแต่ละรูปแบบ ตั้งแต่ A–F–A(v2) ถือเป็นเนื้อหาอนุพันธ์หรือรหัสอนุพันธ์ (ตามนิยาม )

การแปลงโค้ดแบบเรียกซ้ำใช้ประโยชน์จากข้อเท็จจริงที่ว่า โปรแกรมแปลงโค้ดอาจคงโค้ดที่แปลแล้วให้ใกล้เคียงกับโค้ดต้นฉบับมากที่สุดเท่าที่จะเป็นไปได้ เพื่อให้การพัฒนาและการแก้ไขข้อผิดพลาดของโค้ดต้นฉบับง่ายขึ้น หรืออาจเปลี่ยนแปลงโครงสร้างของโค้ดต้นฉบับมากจนโค้ดที่แปลแล้วไม่เหมือนกับโค้ดต้นฉบับ นอกจากนี้ยังมีเครื่องมือช่วยในการแก้ไขข้อผิดพลาดที่แมปโค้ดต้นฉบับที่แปลงแล้วกลับไปยังโค้ดต้นฉบับ ตัวอย่างเช่น แผนที่โค้ด JavaScriptช่วยให้สามารถแมปโค้ด JavaScript ที่เบราว์เซอร์ ทำงาน กลับไปยังโค้ดต้นฉบับในภาษา JavaScript ที่แปลงแล้วได้

ดูเพิ่มเติม

หมายเหตุ

  1. ^หนึ่งในโปรแกรมเชิงพาณิชย์ที่ทราบกันว่ามีการแปลด้วยเครื่องภายใต้ ISIS-IIจากซอร์สโค้ด 8080 CP/M-80 ไปยัง 8086 CP/M-86โดยใช้CONV86 ของ Intel คือ WordStar 3.0ของ MicroProในเดือนกันยายน 1981

อ่านเพิ่มเติม

  • Britten, Charles Randyl (2020-06-26). "การแปลงรหัส 8080 เป็น 8086 - การแปลงรหัส 8080 ของ Microsoft เป็น 8086 และโปรเซสเซอร์ 16 บิตอื่นๆ" . เก็บถาวรจากต้นฉบับเมื่อ 2021-07-23 . เรียกดูเมื่อ2021-11-28 .
  • "การเขียนโปรแกรมหน่วยประมวลผล Sycor ทำได้ง่ายขึ้นด้วย TAL II" Computerworldวารสารรายสัปดาห์สำหรับชุมชนคอมพิวเตอร์เล่มที่ IX, ฉบับที่ 34. แอนน์อาร์เบอร์, มิชิแกน, สหรัฐอเมริกา: Computerworld, Inc. 20 สิงหาคม 1975. หน้า 14. ISSN  0010-4841 . เก็บถาวรจากต้นฉบับเมื่อ 1 กุมภาพันธ์ 2020. สืบค้นเมื่อ 18 มกราคม 2020 .
  • Zerilli, Frank J.; Derouen, Craig (1986-12-11) [1985-08-15, 1984-12-20, 1984-11-20]. "ตัวแปลง ASM 8080 เป็น 8086 พร้อมซอร์สโค้ด ASM" . SIMTEL . XLT86.COM 1.10. เก็บถาวรจากต้นฉบับเมื่อ 2020-02-01 . เรียกดูเมื่อ2020-01-18 .1984-11-11 เวอร์ชัน 1.05 (หมายเหตุ: ไฟล์ปฏิบัติการ DOS XLT86.COM [12 KB] แปลงซอร์สโค้ดภาษาแอสเซมบลี Intel 8080 เป็นซอร์สโค้ดภาษาแอสเซมบลี Intel 8086 แม้จะมีชื่อว่า XLT86 แต่การใช้งานในภาษาแอสเซมบลี 8086 นี้ไม่ เกี่ยวข้องกับ XLT86 รุ่น ก่อนหน้าและมีความซับซ้อนกว่ามากของ Digital Research )
  • Albo, Julián (2009-04-24). "Pasmo, ensamblador cruzado Z80 portable / portable Z80 cross assembler" (ในภาษาสเปนและภาษาอังกฤษ). เก็บถาวรจากต้นฉบับเมื่อ 2020-02-20 . เรียกดูเมื่อ2020-02-20 . […] Pasmo เป็นโปรแกรมแอสเซมเบลอร์แบบครอสสำหรับZ80 […] ที่ […] สามารถสร้างโค้ดออบเจ็กต์ในรูปแบบต่อไปนี้: ไบนารีดิบ, Intel HEX , PRL สำหรับCP/M Plus RSX , Plus3Dos ( ดิสก์ Spectrum +3 ), TAP, TZX และ CDT (อิมเมจเทปของโปรแกรมจำลอง Spectrum และAmstrad CPC ), AmsDos (ดิสก์ Amstrad CPC) และMSX (สำหรับใช้กับ BLOAD จากดิสก์ใน Basic). เริ่มต้นด้วยเวอร์ชัน 0.5.0 […] ยังสามารถสร้าง โค้ด 8086จากซอร์สโค้ด Z80 ในรูปแบบไบนารีสำหรับ ไฟล์ Ms-dos COMหรือใน รูปแบบ CP/M 86 CMD ได้อีกด้วย […][42] [43]
  • Ciarcia, Steve (พฤษภาคม 1984). "ไพ่เด็ด – ตอนที่ 1: ฮาร์ดแวร์ – เร่งความเร็วพีซี IBM ของคุณด้วยพลังการประมวลผลร่วม 16 บิต" (PDF) . BYTE – วารสารระบบขนาดเล็ก . Ciarcia's Circuit Cellar. เล่มที่ 9, ฉบับที่ 5. McGraw-Hill, Inc.หน้า  40–52 , 54–55 . ISSN  0360-5280 . สืบค้นเมื่อ2020-01-29 . […] แต่จะประมวลผลโปรแกรมที่เขียนด้วยภาษาโปรแกรมระดับสูง เช่น BASIC และ C (คอมไพเลอร์ Pascal และตัวแปลง 8088 เป็น Z8000 กำลังอยู่ในระหว่างการพัฒนา) […]และCiarcia, Steve (มิถุนายน 1984). "ไพ่เด็ด – ตอนที่ 2: ซอฟต์แวร์ – TBASIC และคอมไพเลอร์ C และภาษาแอสเซมบลี" (PDF) . BYTE – วารสารระบบขนาดเล็ก . Ciarcia's Circuit Cellar. เล่มที่ 9, ฉบับที่ 6. McGraw-Hill, Inc.หน้า  115–122 . ISSN 0360-5280 . สืบค้นเมื่อ2020-01-29 . […] ผมคาดว่าตัวแปลรหัสวัตถุสำหรับการแปลง Z80 เป็น Z8000 และ 8088 เป็น Z8000 จะพร้อมใช้งานในเร็วๆ นี้ […] นอกจากนี้ยังมีจำหน่ายในชื่อCiarcia, Steve (1990). "Trump Card – Part 1: Hardware – Speed ​​up your IBM PC with 16-bit coprocessing power & Part 2: Software – TBASIC and C compilers and an assemble" . ใน Gonneau, Daniel; Bernardi, Fred; Ausburn, Richard (eds.). Ciarcia's Circuit Cellar . Vol. 7. McGraw-Hill Publishing Company . pp.  138– 152, 153– 160. ISBN 0-07-010969-9เก็บถาวรจากต้นฉบับเมื่อ 2020-02-01 เรียกดูเมื่อ2020-01-29[44]
  • ทีมงานฝ่ายประยุกต์ใช้ไมโครคอนโทรลเลอร์ (2000). "การแปลงรหัสแอสเซมบลีจาก HC05 เป็น ST7" (PDF) (เอกสารประกอบการใช้งาน). STMicroelectronics . AN1106/0200 . สืบค้นเมื่อ2020-01-18 .(9 หน้า) (หมายเหตุ: โปรแกรมแปลนี้พัฒนาโดย ST และแปลซอร์สโค้ดภาษาแอสเซมบลีMotorola 6805 / HC05 ในรูปแบบซอฟต์แวร์ 2500AD ไปเป็น ซอร์สโค้ดST7 ไฟล์ปฏิบัติการ MIGR2ST7.EXE สำหรับ Windowsสามารถดาวน์โหลดได้จาก "MCU ON CD")
  • Kuper, Lindsey (30 กรกฎาคม 2017). "คนเราหมายถึงอะไรเมื่อพูดว่า "transpiler"?" . language implementation. composition.al . เก็บถาวรจากต้นฉบับเมื่อ 9 มกราคม 2022 . สืบค้นเมื่อ9 มกราคม 2022 .
  • ชอดรี, กาเบรียล "กาบี" (11-07-2552) "Das Intel zu Zilog – Übersetzungsprojekt" . I2Z-นักแปล (ภาษาเยอรมัน) เก็บถาวรจากต้นฉบับเมื่อ 2016-09-11 . สืบค้นเมื่อ2020-01-18 .
  • "PortAsm Assembler to Assembler Translation" . MicroAPL Ltd. 2017 [1996]. เก็บถาวรจากต้นฉบับเมื่อ 2019-07-30 . เรียกดูเมื่อ2020-01-18 .
  • "ระเบียบวิธีของเรา – กระบวนการแปลงซอร์สโค้ดเป็นซอร์สโค้ด"บริษัท ไมโครโปรเซสเซอร์ เซอร์วิสเซส อิงค์ (MPS) เก็บถาวรจากต้นฉบับเมื่อ 12 พฤษภาคม 2019 เรียกดูเมื่อ 1 กุมภาพันธ์2020
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Source-to-source_compiler&oldid=1353706641#TRANS "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ คอมไพเลอร์แบบซอร์สโค้ดต่อซอร์สโค้ด

ตัว แปลซอร์สโค้ดเป็นซอร์สโค้ด ( S2S compiler ) หรือ ท ราน สไพเลอร์ ( transpiler ) [ 1 ] [ 2 ] [ 3 ] เป็นประเภทของ ตัวแปล ที่รับ ซอร์สโค้ด ของโปรแกรมที่เขียนด้วย ภาษาโปรแกรม...

ตัวแปลภาษาแอสเซมบลี

โปรแกรมแปลภาษาแอสเซมบลี ( Assembly language Translators) คือกลุ่มของโปรแกรมแปลโค้ดจาก ภาษาแอสเซมบลี หนึ่ง ไปยังอีกภาษาหนึ่ง ซึ่งรวมถึง (แต่ไม่จำกัดเพียง) การแปลข้ามตระกูลโปรเซสเซอร์และ แพลตฟอร์มระบบ ต่างๆ

อินเทล CONV86

Intel วางจำหน่ายโปรเซสเซอร์ 16 บิต 8086 โดยระบุว่า สามารถใช้งานร่วม กับ 8080 ซึ่งเป็นโปรเซสเซอร์ 8 บิต ได้ [ 9 ] เพื่อสนับสนุนเรื่องนี้ Intel มีตัวแปลรหัสต้นฉบับจาก 8080 เป็น 8086 ที่ใช้ ISIS-II ชื่อ CONV86 [ 10 ] [ 11 ] [ 12 ] [ 13 ] (เรียกอีกอย่างว่า...

SCP TRANS86

Seattle Computer Products (SCP) เสนอ TRANS86.COM [ 16 ] [ 19 ] [ 20 ] ซึ่งเขียนโดย Tim Paterson ในปี 1980 ขณะพัฒนา 86-DOS [ 21 ] [ 22 ] [ 23 ] ยู ทิลิตี้นี้สามารถแปลงซอร์สโค้ดแอสเซมบลี Intel 8080 และ Zilog Z80 (พร้อม ตัวย่อ Zilog/ Mostek ) เป็นซอร์สโค้ด .