ฉันจะพูดถึงมุมมองของ @EliBendersky ที่สองเกี่ยวกับการใช้ ast.parse แทนการแยกวิเคราะห์ (ซึ่งฉันไม่รู้มาก่อน) ฉันขอแนะนำให้คุณอ่านบล็อกของเขาอย่างอบอุ่น ฉันใช้ ast.parse เพื่อทำ Python-> ตัวแปล JavaScript (@ https://bitbucket.org/amirouche/pythonium ) ฉันได้มาด้วยการออกแบบโดย Pythonium ค่อนข้างตรวจสอบการใช้งานอื่น ๆ และพวกเขาพยายามของตัวเอง ฉันแยก Pythonium จากhttps://github.com/PythonJS/PythonJSซึ่งฉันเริ่มต้นด้วยมันเป็นการเขียนซ้ำที่สมบูรณ์ การออกแบบโดยรวมได้รับแรงบันดาลใจจากกระดาษPyPy และhttp://www.hpl.hp.com/techreports/Compaq-DEC/WRL-89-1.pdf
ทุกสิ่งที่ฉันพยายามตั้งแต่เริ่มต้นจนถึงวิธีแก้ปัญหาที่ดีที่สุดแม้ว่าจะดูเหมือนการตลาดแบบ Pythonium แต่ก็ไม่ได้เป็นเช่นนั้นจริงๆ (อย่าลังเลที่จะบอกฉันว่าบางสิ่งดูเหมือนจะไม่ถูกต้องสำหรับคนทั่วไป):
ใช้ความหมาย Python ใน JavaScript แบบธรรมดาโดยใช้การสืบทอดต้นแบบ: AFAIK เป็นไปไม่ได้ที่จะใช้การสืบทอดหลาย Python โดยใช้ระบบวัตถุต้นแบบ JS ฉันพยายามทำโดยใช้เทคนิคอื่น ๆ ในภายหลัง (เปรียบเทียบ getattribute) เท่าที่ฉันรู้ว่าไม่มีการใช้งานการสืบทอดหลายรายการของ Python ใน JavaScript สิ่งที่ดีที่สุดที่มีอยู่คือ Single inherittance + mixins และฉันไม่แน่ใจว่าพวกเขาจัดการมรดกเพชร คล้ายกับ Skulpt แต่ไม่มี google clojure
ฉันลองใช้ Google clojure เหมือนกับ Skulpt (คอมไพเลอร์) แทนที่จะอ่านรหัส Skulpt #fail จริงๆ อย่างไรก็ตามเนื่องจากระบบวัตถุที่ใช้ต้นแบบ JS ยังคงเป็นไปไม่ได้ การสร้างการผูกเป็นเรื่องยากมากคุณต้องเขียน JavaScript และโค้ดสำเร็จรูปจำนวนมาก (cf. https://github.com/skulpt/skulpt/issues/50ที่ฉันเป็นผี) ในเวลานั้นไม่มีวิธีที่ชัดเจนในการรวมการผูกในระบบบิลด์ ฉันคิดว่า Skulpt เป็นไลบรารีและคุณต้องรวมไฟล์. py ของคุณใน html เพื่อดำเนินการโดยผู้พัฒนาไม่จำเป็นต้องทำขั้นตอนการคอมไพล์
พยายาม pyjaco (คอมไพเลอร์) แต่การสร้างการผูก (การเรียกโค้ด Javascript จากโค้ด Python) นั้นยากมากมีโค้ดสำเร็จรูปมากเกินไปในการสร้างทุกครั้ง ตอนนี้ฉันคิดว่า pyjaco เป็นสิ่งที่อยู่ใกล้ Pythonium มากกว่า pyjaco เขียนด้วย Python (ast.parse ด้วย) แต่ส่วนมากเขียนด้วย JavaScript และใช้การสืบทอดต้นแบบ
ฉันไม่เคยประสบความสำเร็จในการวิ่งชุดนอน #fail และไม่เคยพยายามอ่านโค้ด #fail อีกเลย แต่ในใจของฉันชุดนอนกำลังทำ API-> API tranlation (หรือ framework to framework) ไม่ใช่การแปล Python เป็น JavaScript เฟรมเวิร์ก JavaScript ใช้ข้อมูลที่มีอยู่แล้วในเพจหรือข้อมูลจากเซิร์ฟเวอร์ รหัส Python คือ "ท่อประปา" เท่านั้น หลังจากนั้นฉันก็พบว่าชุดนอนเป็นตัวแปลภาษา python-> js จริงๆ
ฉันยังคิดว่าเป็นไปได้ที่จะทำการแปล API-> API (หรือเฟรมเวิร์ก -> เฟรมเวิร์ก) และนั่นเป็นสิ่งพื้นฐานที่ฉันทำใน Pythonium แต่ในระดับที่ต่ำกว่า ชุดนอนน่าจะใช้อัลกอริทึมเดียวกับ Pythonium ...
จากนั้นฉันก็ค้นพบ brython ที่เขียนด้วย Javascript เช่น Skulpt ไม่จำเป็นต้องรวบรวมและมีขนมากมาย ...
ตั้งแต่บรรทัดเริ่มต้นที่เขียนในโครงการนี้ฉันรู้เกี่ยวกับ PyPy แม้แต่แบ็กเอนด์ JavaScript สำหรับ PyPy ใช่คุณสามารถสร้างล่าม Python ใน JavaScript จาก PyPy ได้โดยตรงหากคุณพบ คนพูดว่ามันเป็นหายนะ ฉันอ่านไม่ออกว่าทำไม แต่ฉันคิดว่าเหตุผลก็คือภาษากลางที่พวกเขาใช้ในการใช้ล่าม RPython เป็นส่วนย่อยของ Python ที่ปรับแต่งให้แปลเป็น C (และอาจเป็น asm) Ira Baxter บอกว่าคุณมักจะตั้งสมมติฐานเมื่อคุณสร้างบางสิ่งและคุณอาจจะปรับแต่งให้ดีที่สุดในสิ่งที่ควรทำในกรณีของการแปล PyPy: Python-> C สมมติฐานเหล่านั้นอาจไม่เกี่ยวข้องในบริบทอื่นที่แย่กว่านั้นก็สามารถอนุมานได้ว่าการแปลตรงตัวมักจะดีกว่าเสมอ
การมีล่ามที่เขียนด้วยภาษา Python ฟังดูเหมือนเป็นความคิดที่ดี (มาก) แต่ฉันสนใจคอมไพเลอร์มากกว่าด้วยเหตุผลด้านประสิทธิภาพการคอมไพล์ Python เป็น JavaScript นั้นง่ายกว่าการตีความ
ฉันเริ่ม PythonJS ด้วยแนวคิดในการรวบรวมส่วนย่อยของ Python ที่ฉันสามารถแปลเป็น JavaScript ได้อย่างง่ายดาย ตอนแรกฉันไม่ได้กังวลที่จะใช้ระบบ OO เพราะประสบการณ์ที่ผ่านมา ชุดย่อยของ Python ที่ฉันสามารถแปลเป็น JavaScript ได้คือ:
- ฟังก์ชันที่มีพารามิเตอร์เต็มความหมายทั้งในความหมายและการเรียก นี่คือส่วนที่ฉันภูมิใจที่สุด
- ในขณะที่ / if / elif / else
- ประเภท Python ถูกแปลงเป็นประเภท JavaScript (ไม่มีประเภท python ใด ๆ )
- สำหรับสามารถวนซ้ำอาร์เรย์ Javascript เท่านั้น (สำหรับในอาร์เรย์)
- การเข้าถึง JavaScript อย่างโปร่งใส: หากคุณเขียน Array ในโค้ด Python ระบบจะแปลเป็น Array ใน javascript นี่คือความสำเร็จที่ยิ่งใหญ่ที่สุดในแง่ของการใช้งานเหนือคู่แข่ง
- คุณสามารถส่งผ่านฟังก์ชันที่กำหนดในซอร์ส Python ไปยังฟังก์ชันจาวาสคริปต์ อาร์กิวเมนต์เริ่มต้นจะถูกนำมาพิจารณา
- เพิ่มมีฟังก์ชันพิเศษที่เรียกว่า new ซึ่งแปลเป็น JavaScript ใหม่เช่น new (Python) (1, 2, spam, "egg") แปลเป็น "new Python (1, 2, spam," egg ")
- "var" ได้รับการจัดการโดยอัตโนมัติโดยนักแปล (การค้นพบที่ดีมากจาก Brett (ผู้สนับสนุน PythonJS)
- คำหลักทั่วโลก
- การปิด
- lambdas
- รายการความเข้าใจ
- รองรับการนำเข้าผ่าน requirejs
- การสืบทอดคลาสเดียว + มิกซ์อินผ่าน classyjs
ดูเหมือนว่าจะมาก แต่จริงๆแล้วแคบมากเมื่อเทียบกับความหมายเต็มของ Python มันเป็น JavaScript จริงๆด้วยไวยากรณ์ Python
JS ที่สร้างขึ้นนั้นสมบูรณ์แบบเช่น ไม่มีค่าใช้จ่ายใด ๆ ไม่สามารถปรับปรุงในแง่ของประสิทธิภาพได้โดยการแก้ไขเพิ่มเติม หากคุณสามารถปรับปรุงโค้ดที่สร้างขึ้นคุณสามารถทำได้จากซอร์สไฟล์ Python ด้วย นอกจากนี้คอมไพเลอร์ไม่ได้ใช้เทคนิค JS ใด ๆ ที่คุณสามารถพบได้ใน. js ที่เขียนโดยhttp://superherojs.com/ดังนั้นจึงน่าอ่านมาก
ทายาทโดยตรงของส่วนนี้ของ PythonJS คือโหมด Pythonium Veloce สามารถดูการใช้งานแบบเต็มได้ที่ @ https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/veloce/veloce.py?at=master 793 SLOC + ประมาณ 100 SLOC ของโค้ดที่แชร์กับนักแปลคนอื่น
pystones.py เวอร์ชันดัดแปลงสามารถแปลได้ในโหมด Veloce cf https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pystone/?at=master
หลังจากตั้งค่าพื้นฐาน Python-> การแปล JavaScript แล้วฉันเลือกเส้นทางอื่นเพื่อแปล Python แบบเต็มเป็น JavaScript วิธีการ glib ทำโค้ดตามคลาสเชิงวัตถุยกเว้นภาษาเป้าหมายคือ JS ดังนั้นคุณจึงสามารถเข้าถึงอาร์เรย์วัตถุคล้ายแผนที่และเทคนิคอื่น ๆ อีกมากมายและทุกส่วนนั้นเขียนด้วย Python IIRC ไม่มีโค้ดจาวาสคริปต์ที่เขียนโดยตัวแปล Pythonium การรับมรดกเดี่ยวไม่ใช่เรื่องยากนี่คือส่วนที่ยากที่ทำให้ Pythonium สอดคล้องกับ Python อย่างสมบูรณ์:
spam.egg
ใน Python มักจะแปลว่าgetattribute(spam, "egg")
ฉันไม่ได้ทำโปรไฟล์นี้เป็นพิเศษ แต่ฉันคิดว่ามันเสียเวลาไปมากและฉันไม่แน่ใจว่าจะสามารถปรับปรุงได้ด้วย asm.js หรืออย่างอื่น
- ลำดับการแก้ไขวิธี: แม้จะมีอัลกอริทึมที่เขียนด้วย Python แต่การแปลเป็นโค้ดที่เข้ากันได้กับ Python Veloce ก็เป็นความพยายามอย่างมาก
- getattributre : อัลกอริธึมการแก้ปัญหา getattribute ที่แท้จริงนั้นค่อนข้างยุ่งยากและยังไม่รองรับตัวบอกข้อมูล
- ตามคลาส metaclass: ฉันรู้ว่าจะเสียบรหัสที่ไหน แต่ก็ยัง ...
- ข้อสุดท้ายไม่น้อย: some_callable (... ) จะแปลงเป็น "call (some_callable)" เสมอ AFAIK ตัวแปลไม่ได้ใช้การอนุมานเลยดังนั้นทุกครั้งที่โทรคุณต้องตรวจสอบว่าวัตถุชนิดใดที่จะเรียกมันในแบบที่มันควรจะเรียก
ส่วนนี้เป็นข้อมูลในhttps://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/runtime.py?at=masterซึ่งเขียนด้วย Python เข้ากันได้กับ Python Veloce
ตัวแปลที่เข้ากันได้จริงhttps://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/compliant.py?at=masterไม่ได้สร้างโค้ด JavaScript โดยตรงและที่สำคัญที่สุดคือไม่ทำการแปลง ast-> ast . ฉันลอง ast-> ast และ ast แม้ว่าจะดีกว่า cst ก็ไม่ดีที่จะใช้งานได้แม้กับ ast ก็ตาม NodeTransformer และที่สำคัญฉันไม่จำเป็นต้องทำ ast-> ast
การทำ python ast เป็น python ast ในกรณีของฉันอย่างน้อยอาจเป็นการปรับปรุงประสิทธิภาพเนื่องจากบางครั้งฉันตรวจสอบเนื้อหาของบล็อกก่อนที่จะสร้างรหัสที่เกี่ยวข้องตัวอย่างเช่น:
- var / global: เพื่อให้สามารถเปลี่ยนแปลงบางสิ่งได้ฉันต้องรู้ว่าฉันต้องการอะไรและไม่ต้องการ var. แทนที่จะสร้างการติดตามบล็อกซึ่งตัวแปรถูกสร้างขึ้นในบล็อกที่กำหนดและแทรกไว้ที่ด้านบนของบล็อกฟังก์ชันที่สร้างขึ้นฉันเพียงแค่มองหาการกำหนดตัวแปรที่เปิดเผยเมื่อฉันเข้าสู่บล็อกก่อนที่จะไปที่โหนดลูกเพื่อสร้างรหัสที่เกี่ยวข้อง
- ผลตอบแทนเครื่องกำเนิดไฟฟ้ามีไวยากรณ์พิเศษใน JS ดังนั้นฉันต้องรู้ว่าฟังก์ชัน Python ใดเป็นตัวสร้างเมื่อฉันต้องการเขียน "var my_generator = function"
ดังนั้นฉันจึงไม่ได้เยี่ยมชมแต่ละโหนดเพียงครั้งเดียวสำหรับแต่ละช่วงของการแปล
กระบวนการโดยรวมสามารถอธิบายได้ดังนี้:
Python source code -> Python ast -> Python source code compatible with Veloce mode -> Python ast -> JavaScript source code
บิวด์อินของ Python เขียนด้วยโค้ด Python (!), IIRC มีข้อ จำกัด บางประการที่เกี่ยวข้องกับประเภท bootstraping แต่คุณสามารถเข้าถึงทุกสิ่งที่สามารถแปล Pythonium ในโหมดที่สอดคล้องกันได้ ดูได้ที่https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/builtins/?at=master
การอ่านโค้ด JS ที่สร้างขึ้นจาก pythonium compliant สามารถเข้าใจได้ แต่ซอร์สแมปจะช่วยได้มาก
คำแนะนำที่มีค่าที่ฉันสามารถให้คุณได้ในแง่ของประสบการณ์นี้คือผายลมเก่า:
- ทบทวนเรื่องนี้อย่างครอบคลุมทั้งในวรรณกรรมและโครงการที่มีอยู่แล้วแบบปิดหรือฟรี เมื่อฉันตรวจสอบโครงการต่างๆที่มีอยู่ฉันควรให้เวลาและแรงจูงใจมากขึ้น
- ถามคำถาม! ถ้าฉันรู้ล่วงหน้าว่าแบ็กเอนด์ PyPy ไม่มีประโยชน์เนื่องจากค่าใช้จ่ายเนื่องจากความหมายของ C / Javascript ไม่ตรงกัน ฉันอาจจะมีวิธีคิด Pythonium ก่อน 6 เดือนที่แล้วหรือ 3 ปีที่แล้ว
- รู้ว่าคุณต้องการทำอะไรมีเป้าหมาย สำหรับโครงการนี้ฉันมีวัตถุประสงค์ที่แตกต่างกัน: pratice a javascript เรียนรู้เพิ่มเติมเกี่ยวกับ Python และสามารถเขียนโค้ด Python ที่จะทำงานในเบราว์เซอร์ (เพิ่มเติมและด้านล่าง)
- ความล้มเหลวคือประสบการณ์
- ก้าวเล็ก ๆ คือก้าว
- เริ่มต้นเล็ก ๆ
- ฝันให้ใหญ่
- ทำการสาธิต
- ย้ำ
ด้วยโหมด Python Veloce เท่านั้นฉันมีความสุขมาก! แต่ระหว่างทางฉันได้ค้นพบว่าสิ่งที่ฉันกำลังมองหาคือการปลดปล่อยฉันและคนอื่น ๆ จาก Javascript แต่ที่สำคัญกว่านั้นคือสามารถสร้างได้อย่างสะดวกสบาย สิ่งนี้นำฉันไปสู่ Scheme, DSL, Models และในที่สุดโมเดลเฉพาะโดเมน (อ้างอิงhttp://dsmforum.org/ )
เกี่ยวกับการตอบสนองของ Ira Baxter:
การประมาณไม่เป็นประโยชน์เลย ฉันใช้เวลาว่างไม่มากก็น้อย 6 เดือนสำหรับทั้ง PythonJS และ Pythonium ดังนั้นฉันสามารถคาดหวังได้มากขึ้นจากเวลาเต็ม 6 เดือน ฉันคิดว่าเราทุกคนรู้ว่า 100 คนต่อปีในบริบทขององค์กรมีความหมายและไม่ได้หมายความว่าอะไร
เมื่อมีคนพูดว่าบางสิ่งบางอย่างยากหรือเป็นไปไม่ได้บ่อยกว่าฉันตอบว่า "ต้องใช้เวลาในการหาวิธีแก้ปัญหาที่เป็นไปไม่ได้เท่านั้น" มิฉะนั้นจะไม่มีอะไรเป็นไปไม่ได้ยกเว้นว่าจะพิสูจน์ไม่ได้ในกรณีนี้การพิสูจน์ทางคณิตศาสตร์ ...
หากไม่ได้รับการพิสูจน์แล้วว่าเป็นไปไม่ได้ก็จะออกจากห้องสำหรับจินตนาการ:
- การหาข้อพิสูจน์พิสูจน์ว่าเป็นไปไม่ได้
และ
- หากเป็นไปไม่ได้อาจมีปัญหา "ด้อยกว่า" ที่สามารถมีทางออกได้
หรือ
- หากไม่เป็นไปไม่ได้ให้หาทางแก้ไข
ไม่ใช่แค่การคิดในแง่ดี เมื่อฉันเริ่ม Python-> Javascript ทุกคนบอกว่ามันเป็นไปไม่ได้ PyPy เป็นไปไม่ได้ Metaclasses ยากเกินไป ฯลฯ ... ฉันคิดว่าการปฏิวัติเพียงครั้งเดียวที่นำ PyPy มาใช้กับกระดาษ Scheme-> C (ซึ่งมีอายุ 25 ปี) คือการสร้าง JIT อัตโนมัติ (คำแนะนำตามที่เขียนในตัวแปล RPython ที่ฉันคิด)
คนส่วนใหญ่ที่บอกว่าสิ่งนั้น "ยาก" หรือ "เป็นไปไม่ได้" จะไม่ระบุเหตุผล C ++ ยากที่จะแยกวิเคราะห์? ฉันรู้ว่ามันยังคงเป็นตัวแยกวิเคราะห์ C ++ (ฟรี) ความชั่วร้ายอยู่ในรายละเอียด? ฉันรู้แล้ว. การบอกว่ามันเป็นไปไม่ได้เพียงอย่างเดียวไม่เป็นประโยชน์มันแย่ยิ่งกว่าการ "ไม่เป็นประโยชน์" มันทำให้ท้อใจและบางคนหมายถึงการกีดกันคนอื่น ผมได้ยินเกี่ยวกับคำถามนี้ผ่าน/programming/22621164/how-to-automatically-generate-a-parser-code-to-code-translator-from-a-corpus
อะไรคือความสมบูรณ์แบบสำหรับคุณ ? นั่นคือวิธีที่คุณกำหนดเป้าหมายต่อไปและอาจไปถึงเป้าหมายโดยรวม
ฉันสนใจที่จะทราบว่ารูปแบบประเภทใดที่ฉันสามารถบังคับใช้กับโค้ดเพื่อให้ง่ายต่อการแปลโค้ด (เช่น IoC, SOA?) มากกว่าวิธีการแปล
ฉันไม่เห็นรูปแบบใดที่ไม่สามารถแปลจากภาษาหนึ่งไปยังอีกภาษาหนึ่งได้อย่างน้อยก็ในวิธีที่สมบูรณ์แบบน้อยกว่า เนื่องจากการแปลภาษาเป็นภาษาเป็นไปได้คุณควรตั้งเป้าหมายไว้ก่อน เนื่องจากฉันคิดว่าตามhttp://en.wikipedia.org/wiki/Graph_isomorphism_problem การแปลระหว่างภาษาคอมพิวเตอร์สองภาษาคือต้นไม้หรือ DAG isomorphism แม้ว่าเราจะรู้อยู่แล้วว่าทัวริงทั้งคู่สมบูรณ์แล้วก็ตาม ...
Framework-> Framework ซึ่งฉันเห็นภาพได้ดีขึ้นว่าเป็น API-> การแปล API อาจยังคงเป็นสิ่งที่คุณควรคำนึงถึงเพื่อเป็นแนวทางในการปรับปรุงโค้ดที่สร้างขึ้น เช่น: Prolog เป็นไวยากรณ์ที่เฉพาะเจาะจงมาก แต่คุณยังสามารถทำ Prolog ได้เหมือนการคำนวณโดยการอธิบายกราฟเดียวกันใน Python ... ถ้าฉันจะใช้ตัวแปล Prolog เป็น Python ฉันจะไม่ใช้การรวมใน Python แต่อยู่ในไลบรารี C และมา ด้วย "ไวยากรณ์ Python" ที่สามารถอ่านได้มากสำหรับ Pythonist ในท้ายที่สุดไวยากรณ์เป็นเพียง "การวาดภาพ" ที่เราให้ความหมาย (นั่นคือเหตุผลที่ฉันเริ่มโครงร่าง) ความชั่วร้ายอยู่ในรายละเอียดของภาษาและฉันไม่ได้พูดถึงไวยากรณ์ แนวคิดที่ใช้ในภาษาgetattributehook (คุณสามารถอยู่ได้โดยปราศจากมัน) แต่คุณสมบัติ VM ที่จำเป็นเช่นการเพิ่มประสิทธิภาพการเรียกซ้ำหางอาจเป็นเรื่องยากที่จะจัดการ คุณไม่สนใจว่าโปรแกรมเริ่มต้นจะไม่ใช้การเรียกซ้ำหางหรือไม่และแม้ว่าจะไม่มีการเรียกซ้ำหางในภาษาเป้าหมาย แต่คุณสามารถเลียนแบบได้โดยใช้กรีนเล็ต / ลูปเหตุการณ์
สำหรับภาษาเป้าหมายและภาษาต้นทางให้ค้นหา:
- ความคิดที่ยิ่งใหญ่และเฉพาะเจาะจง
- แนวคิดเล็ก ๆ ที่แบ่งปันกันทั่วไป
จากสิ่งนี้จะปรากฏ:
- สิ่งที่ง่ายต่อการแปล
- สิ่งที่ยากต่อการแปล
คุณอาจจะสามารถรู้ได้ว่าอะไรจะถูกแปลเป็นโค้ดที่เร็วและช้า
นอกจากนี้ยังมีคำถามเกี่ยวกับ stdlib หรือห้องสมุดใด ๆ แต่ไม่มีคำตอบที่ชัดเจนขึ้นอยู่กับเป้าหมายของคุณ
รหัสสำนวนหรือรหัสที่สร้างขึ้นอ่านได้ยังมีแนวทางแก้ไข ...
การกำหนดเป้าหมายแพลตฟอร์มเช่น PHP นั้นง่ายกว่าการกำหนดเป้าหมายเบราว์เซอร์เนื่องจากคุณสามารถให้การใช้งาน C ในเส้นทางที่ช้าและ / หรือวิกฤตได้
เนื่องจากโครงการแรกของคุณกำลังแปล Python เป็น PHP อย่างน้อยสำหรับชุดย่อย PHP3 ที่ฉันรู้จักการปรับแต่ง veloce.py เป็นทางออกที่ดีที่สุดของคุณ หากคุณสามารถใช้ veloce.py สำหรับ PHP ได้คุณอาจจะสามารถเรียกใช้โหมดที่สอดคล้องกันได้ ... นอกจากนี้หากคุณสามารถแปล PHP เป็นชุดย่อยของ PHP คุณสามารถสร้างด้วย php_veloce.py ได้หมายความว่าคุณสามารถแปล PHP เป็น ส่วนย่อยของ Python ที่ veloce.py สามารถใช้งานได้ซึ่งหมายความว่าคุณสามารถแปล PHP เป็น Javascript ได้ แค่พูด...
คุณยังสามารถดูไลบรารีเหล่านั้นได้:
นอกจากนี้คุณอาจสนใจโดยโพสต์บล็อกนี้ (และความคิดเห็น): https://www.rfk.id.au/blog/entry/pypy-js-poc-jit/