כיצד להמיר את פייתון ל- JavaScript (ובחזרה)

פייתון או JavaScript? בעוד אנו עדיין מתווכחים עם מי על העליונה או על העתיד הבהיר, קיים ספק קטן לגבי הבעלים של ממשק האינטרנט. זה JavaScript בדפדפן או כלום.

טוב, אולי לא  כלום.  JavaScript היא שפת יעד מועדפת על "משדרים" הממירים שפת תכנות אחת לשנייה (ראה: TypeScript, Emscripten, Cheerp, Cor). והעיקוב העצום של פיתון ועושר הספריות הזמינות הופכים אותו למועמד נהדר להמרה, כלומר מועבר, ל- JavaScript.

להלן ארבעה פרויקטים עכשוויים להפיכת Python לשימושיים בעולם JavaScript. אחד בולט בכך שהוא מסוגל להמיר לשני הכיוונים.

בריתון

אחת ההבטחות שמבטיחה WebAssemble היא לאפשר לנו להשתמש בכל שפה שנבחר לפתח לרשת, אם כי זו נותרה מטרה רחוקה. הפילוסופיה שעומדת מאחורי בריתון, לפחות מבחינת פיתון 3, היא למה לחכות?

בריתון מיישם גרסה של Python 3 לתכנות אינטרנט בצד הלקוח באמצעות ספריית JavaScript המדמה את כל מילות המפתח ואת רוב התוכניות המובנות עבור Python 3. ניתן לכלול סקריפטים שנכתבו ב- Python ישירות בדף אינטרנט. בריתון מספק ממשק מודולי פייתון ברמה גבוהה (  browser החבילה) כדי לקיים אינטראקציה עם ה- DOM והדפדפן, כלומר לטפל בכל העבודות שבדרך כלל נעשות ישירות ב- JavaScript.

שפע של דוגמאות קוד חי וגלריה של מיני יישומים מדגימים איך הכל עובד. אפשר אפילו להשתמש בברייתון כדי לכתוב אפליקציית Android מקומית בפייתון. פונקציונליות Async זמינה, אם כי עליך להשתמש asyncבמודול של בריתון במקום בפייתון asyncio.

בריתון אינו מתחמק מההגבלות המוטלות על JavaScript בדפדפן. לדוגמא, אין תמיכה בהתמודדות עם מערכת הקבצים המקומית. עם זאת, יש תמיכה בשימוש באחסון מקומי HTML5, אם כל מה שאתה צריך הוא דרך כלשהי לשמור על נתונים על בסיס יישום.

JavaScripthon

JavaScripthon מתמקדת אך ורק בתרגום קוד Python 3.5 ואילך ל- JavaScript, מבלי לנסות לספק תמיכה מלאה בדפדפן בהתאם לפרויקטים כמו בריתון. הוא פולט קוד ES6 כדי למזער את הצורך במילוי פוליסי בצד הדפדפן, ומשחק היטב בכלים כמו Webpack על ידי שמירה על מפות מקור.

מרבית מילות המפתח וההתנהגויות הנפוצות של Python נתמכות, כולל asyncו- await, מיתרי F-Python 3.6, ושיטות וירושות של Python. אתה יכול גם להוסיף JavaScript מוטבע באמצעות שיחת פונקציה מיוחדת, אם אי פעם תצטרך לרדת ישירות ל- JavaScript.

שים לב שההתחייבויות האחרונות לפרויקט JavaScripthon היו במאי 2018, כך שהוא לא קיבל תמיכה בתכונות הפיתון האחרונות כמו "מפעיל סוסים". אבל כל מי שמשתמש בתכונות של Python 3.6 צריך להיות נתמך היטב.

[גם ב: 24 ספריות פייתון לכל מפתח פיתון]

ג'יפי

השם Jiphy הוא קיצור של "JavaScript in, Python out." במילים אחרות, ג'יפי ממיר בשני הכיוונים בין שתי השפות. בנוסף, ניתן לשלב קוד משתי השפות לפני ההמרה לשפת היעד.

לפני שאתם צוללים פנימה ומתחילים להמיר את כל OpenStack ל- JavaScript, שימו לב: ג'יפי אינו עוסק בהמרת בסיס קוד מלא. במקום זאת, תפקידו, כפי שמגדיר זאת README, "להפחית את החלפת ההקשר הדרושה למפתח פייתון לכתוב קוד JavaScript ולהיפך."

החיסרון הגדול ביותר בג'יפי הוא שהוא תומך רק בקבוצת משנה של התכונות של פייתון. לא ניתן להשיג מחלקות או ארגומנטים של ברירת מחדל, אם כי תומכים במעצבים וחריגים. הרבה מהסיבה לכך היא שג'יפי שואף לקשר קו-קו בין קוד המקור לקוד היעד, אך המפתחים שלו הבחינו בתכונות החדשות ב- ES6 לתמיכה מתקדמת יותר בתכונות Python.

שים לב שפרויקט ג'יפי לא עודכן מאז סוף 2017. יש להחשיב את ג'יפי כניסיוני לחלוטין עד שהעבודה עליו תחדש.

JS2Py

JS2Py ממיר JavaScript לפייתון, כשמו כן הוא, באמצעות מנוע המרה טהור של פייתון. יש לו תמיכה רשמית רק ב- ES5 כרגע, אם כי יש תמיכה ניסיונית ב- ES6 לאמיצים ואמיצים.

JS2Py תומך בהרבה אינטראקציה בין פייתון ל- JavaScript. באפשרותך לייבא מודולי Node.js קיימים בקוד ה- Python שלך, באמצעות js2py.requireשיטה. ניתן להעריך משתנים מהצד של JavaScript בצד ה- Python, וניתן להשתמש באובייקטים של Python גם מקוד JavaScript.

JS2Py כולל גם מכונה וירטואלית ניסיונית מאוד שמעריכה את קוד ה- JavaScript מ- Python, אך הוא עדיין לא מומלץ לשימוש בייצור.

RapydScript

RapydScript מבטיח "JavaScript פיתוני שלא מוצץ." הפרויקט דומה ל- CoffeeScript בכך שהוא מכניס קוד שנכתב בשפה חלופית - במקרה זה, טעם של פייתון - ויוצר JavaScript שיכול לרוץ בכל מקום כמו שהוא. 

כך RapydScript מספק את המיטב משני העולמות, ומביא את התחביר הנקי של פיתון ליכולות JavaScript כמו פונקציות אנונימיות, מניפולציה של DOM ויכולת למנף ספריות JavaScript כמו jQuery או הליבה של Node.js. נכון - אתה יכול להשתמש בקוד שנוצר באמצעות Rapydscript בכדי להניע דפי אינטרנט או יישומי צומת. 

מאפיין נוח נוסף של RapydScrypt: הוא מציע שמות Python ו- JavaScript עבור פעולות מסוימות במידת האפשר. לדוגמא, $הסמל המיוחד המשמש jQuery פועל כפי שהוא ב- RapydScript, ומערכים יכולים לתמוך בשיטות .push(JavaScript) וגם .append(Python).

הצפן

אם אתה שומע את השם הצפנה וחושב TypeScript, אתה לא רחוק מהסימן. ההצפנה עוקבת אחר אותו רעיון בסיסי - היא מעבירה את פייתון ל- JavaScript. כמו כן, הוא מנסה לשמר, בכל מקום אפשרי, את המבנה ואת הניבים של קוד הפייתון המקורי, כולל מבנים כמו למבדות וירושה מרובה על פני כיתות.

יתרה מכך, ניתן ליצור מפות מקור עבור הקוד המועבר המפנות חזרה לפייתון המקורי, כך שמפתחים יכולים לבצע ניפוי באגים באמצעות קוד זה במקום JavaScript שנוצר. על פי התיעוד, Transcrypt מבצע את המשימות הללו באמצעות מודול Tree Syntax Tree של CPython, המאפשר גישה פרוגרמטית לאופן בו Python מנתח את הקוד שלו.

אחד היתרונות הגדולים ביותר של Transcrypt הוא גישה אוטומטית למודל Object Document (DOM) של JavaScript. אם תנסה לגשת  document.getElementById בפייתון, למשל, הקוד שהומר ישתמש בפועל  document.getElementById ב- JavaScript.

פרויקט משויך, ונמצא עדיין תחת עטיפה רבה, הוא Numscrypt, שמעביר את ספריית המתמטיקה והסטטיסטיקה NumPy ל- JavaScript. עד כה Numscrypt מספק רק קבוצת משנה של התכונות של NumPy, אם כי תכונות אלה (למשל, מתמטיקה מטריציונית) הן בין הנפוצות ביותר. עם זאת, Numscrypt לא עודכן מאז 2018.