คอมไพเลอร์แบบซอร์สโค้ดต่อซอร์สโค้ด
ตัวแปลซอร์สโค้ดเป็นซอร์สโค้ด ( 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 ]
| ชื่อ | ภาษาต้นฉบับ | ภาษาเป้าหมาย | ความคิดเห็น |
|---|---|---|---|
| บาเบล | 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 ที่แปลงแล้วได้
ดูเพิ่มเติม
- ตัวคอมไพเลอร์ไบนารี – คอมไพเลอร์ที่แปลงหรือปรับปรุงโค้ดที่คอมไพล์แล้วให้เหมาะสมยิ่งขึ้น
- C to HDL – การแปลงโปรแกรมที่มีลักษณะคล้ายภาษา C ให้เป็นภาษาสำหรับการอธิบายฮาร์ดแวร์
- การสร้างโค้ด (คอมไพเลอร์) – การแปลงโค้ดคอมพิวเตอร์ให้เป็นรูปแบบที่เครื่องอ่านได้
- DMS Software Reengineering Toolkit –เฟรมเวิร์กคอมไพเลอร์แบบซอร์สโค้ดต่อซอร์สโค้ดที่ใช้กฎการเขียนใหม่แบบกำหนดรูปแบบอย่างชัดเจน
- f2c –คอมไพเลอร์แบบแปลงโค้ดต้นฉบับจาก Fortran 77 ไปเป็น C
- Honeywell Liberator – ตระกูลคอมพิวเตอร์เมนเฟรมหน้าเว็บแสดงคำอธิบายสั้น ๆ ของเป้าหมายการเปลี่ยนเส้นทาง (การเรียกใช้ โปรแกรม IBM 1401บนHoneywell H200 )
- การแสดงผลระดับกลาง – โครงสร้างข้อมูลหรือรหัสที่ใช้โดยคอมไพเลอร์
- การผูกภาษา – ไลบรารีซอฟต์แวร์ที่อนุญาตให้ใช้งานไลบรารีอื่นที่เขียนด้วยภาษาโปรแกรมอื่น
- ข้อกำหนดที่ไม่ขึ้นกับภาษา – มาตรฐานการเขียนโปรแกรมคอมพิวเตอร์ที่ออกแบบมาให้สามารถทำงานร่วมกันได้ในภาษาโปรแกรมต่างๆ
- ความสามารถในการทำงานร่วมกันของภาษา
- ตัวปรับแต่งโค้ดออบเจ็กต์หรือที่รู้จักกันในชื่อ การปรับแต่งไบนารี – เครื่องมือสำหรับปรับแต่งโค้ดไบนารีหน้าเว็บที่แสดงคำอธิบายสั้น ๆ ของเป้าหมายการเปลี่ยนเส้นทาง
- โปรแกรม ประมวลผลล่วงหน้า (Preprocessor) – โปรแกรมที่ประมวลผลข้อมูลป้อนเข้าสำหรับโปรแกรมอื่น
- การแปลงโปรแกรม – การสร้างโปรแกรมคอมพิวเตอร์โดยอัตโนมัติ
- ROSE (เฟรมเวิร์กคอมไพเลอร์) –เฟรมเวิร์กคอมไพเลอร์แบบแปลงซอร์สโค้ดเป็นซอร์สโค้ด
- XSLT – ภาษาสำหรับแปลงเอกสาร XML
หมายเหตุ
- ↑หนึ่งในโปรแกรมเชิงพาณิชย์ที่ทราบกันว่ามีการแปลด้วยเครื่องภายใต้ ISIS-IIจากซอร์สโค้ด 8080 CP/M-80 ไปยัง 8086 CP/M-86โดยใช้CONV86 ของ Intel คือ WordStar 3.0ของ MicroProในเดือนกันยายน 1981
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ไม่มีชื่อบทความ
ตัว แปลซอร์สโค้ดเป็นซอร์สโค้ด ( 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 ) เป็น ซอร์สโค้ด .