Programiranje

Kako pretvoriti Python v JavaScript (in nazaj)

Python ali JavaScript? Čeprav se še vedno prepiramo, kdo ima prednost ali svetlejšo prihodnost, malo dvomimo, kdo je lastnik spletnega čelnega dela. V brskalniku je JavaScript ali nič drugega.

No, mogoče nenič. JavaScript je najljubši ciljni jezik za »prevajalnike«, ki pretvorijo en programski jezik v drugega (glej: TypeScript, Emscripten, Cheerp, Cor). Zaradi Pythonovega velikega števila in bogastva knjižnic, ki so na voljo, je odličen kandidat za pretvorbo, tj. Prepisovanje v JavaScript.

Tu so štirje trenutni projekti, s katerimi je Python koristen v svetu JavaScript. Eden izstopa s tem, da lahko pretvorite v obe smeri.

Brython

Ena od obljub, ki jih WebAssembly daje, je, da nam bo omogočila uporabo katerega koli jezika, ki se ga odločimo za razvoj spleta, čeprav je to še vedno oddaljen cilj. Filozofija Brythona, vsaj kar zadeva Python 3, je, zakaj čakati?

Brython implementira različico Pythona 3 za spletno programiranje na strani odjemalca prek knjižnice JavaScript, ki posnema vse ključne besede in večino vgrajenih v Python 3. Skripte, napisane v Pythonu, lahko vključite neposredno na spletno stran. Brython ponuja vmesnik modula Python na visoki ravni (brskalnik paket) za interakcijo z DOM-om in brskalnikom, tj.za vse naloge, ki se običajno opravljajo neposredno v JavaScript-u.

Veliko primerov kode v živo in galerija mini aplikacij dokazujejo, kako vse deluje. Z Brythonom je mogoče celo napisati izvorno aplikacijo za Android v Pythonu. Funkcija Async je na voljo, čeprav morate uporabiti Brython's asinh namesto Pythonovega asincio.

Brython se ne izogne ​​omejitvam, ki jih v brskalniku nalaga JavaScript. Na primer, ni podpore za obravnavanje lokalnega datotečnega sistema. Obstaja pa podpora za uporabo lokalnega pomnilnika HTML5, če je vse, kar potrebujete, način, kako ohraniti podatke na podlagi posamezne aplikacije.

JavaScripthon

JavaScripthon se osredotoča izključno na prevajanje kode Python 3.5 in kasneje v JavaScript, ne da bi poskušal zagotoviti popolno podporo v brskalniku, kot je to izvedeno pri projektih, kot je Brython. Oddaja kodo ES6, da zmanjša potrebo po polnjenjih na strani brskalnika, in se dobro obnese z orodji, kot je Webpack, z ohranjanjem izvornih zemljevidov.

Podprta je večina pogostih ključnih besed in vedenj v Pythonu asinh in čakati, F-nizi Python 3.6 ter metode in dediščine razreda Python. JavaScript lahko vstavite tudi v vrstici s posebnim klicem funkcije, če boste kdaj morali spustiti na JavaScript neposredno.

Upoštevajte, da so bile zadnje zaveze za projekt JavaScripthon izvedene maja 2018, zato ni prejel podpore za najnovejše funkcije Pythona, kot je »operater mrožev«. Kdor pa uporablja funkcije Python 3.6, bi moral biti dobro podprt.

[Tudi na: 24 knjižnic Python za vsakega razvijalca Pythona]

Jiphy

Ime Jiphy je okrajšava od "JavaScript in, Python out." Z drugimi besedami, Jiphy med obema jezikoma pretvarja v obe smeri. Poleg tega je mogoče kodo iz obeh jezikov premešati, preden jo pretvorite v kateri koli ciljni jezik.

Preden se potopite in začnete pretvarjati ves OpenStack v JavaScript, bodite pozorni: Jiphy ne gre za popolno pretvorbo kodne baze. Namesto tega je njegova funkcija, kot pravi README, "zmanjšati preklop konteksta, ki je potreben, da razvijalec Pythona piše kodo JavaScript in obratno."

Največja pomanjkljivost Jiphyja je ta, da podpira le podnabor Pythonovih funkcij. Na voljo niso niti razredi niti privzeti argumenti, čeprav so okraševalci in izjeme podprti. Velik del tega je zato, ker si Jiphy prizadeva za razmerje med črto in vrstico med izvorno in ciljno kodo, vendar so njegovi razvijalci nove funkcije v ES6 opazili za bolj napredno podporo funkcij Pythona.

Upoštevajte, da projekt Jiphy ni posodobljen od konca leta 2017. Jiphy je treba obravnavati kot strogo eksperimentalnega, dokler se delo na njem ne nadaljuje.

JS2Py

JS2Py pretvori JavaScript v Python, kot že ime pove, s pomočjo pretvorniškega mehanizma pure-Python. Trenutno ima uradno podporo samo za ES5, čeprav obstaja poskusna podpora ES6 za pogumne in drzne.

JS2Py podpira veliko medsebojnega sodelovanja med Pythonom in JavaScriptom. Obstoječe module Node.js lahko v kodo Python uvozite s pomočjo js2py.require metoda. Spremenljivke na strani JavaScript lahko ocenite na strani Python, predmete Python pa lahko uporabite tudi iz kode JavaScript.

JS2Py vključuje tudi zelo eksperimentalni navidezni stroj, ki ocenjuje kodo JavaScript iz Pythona, vendar še ni priporočljiv za proizvodno uporabo.

RapydScript

RapydScript obljublja "Pythonic JavaScript, ki ni zanič." Projekt je podoben CoffeeScriptu, saj zaužije kodo, napisano v drugem jeziku - v tem primeru okus Pythona - in ustvari JavaScript, ki se lahko izvaja kjer koli je, kot je.

Tako RapydScript ponuja najboljše iz obeh svetov, tako da Pythonova čista sintaksa prinaša zmožnosti JavaScript, kot so anonimne funkcije, manipulacija z DOM in zmožnost izkoriščanja knjižnic JavaScript, kot sta jQuery ali jedro Node.js. Tako je - za pogon spletnih strani ali aplikacij Node lahko uporabite kodo, ki jo ustvari Rapydscript.

Druga priročna lastnost RapydScrypt: ponuja nomenklature Python in JavaScript za nekatere operacije, kadar je to mogoče. Na primer $ posebni simbol, ki ga uporablja jQuery, deluje takšen, kot je v RapydScript, in nizi lahko podpirajo oba .push (JavaScript) in .priloži (Python) metode.

Transcrypt

Če slišite ime Transcrypt in mislite na TypeScript, niste daleč od oznake. Transcrypt sledi isti osnovni ideji - prenaša Python v JavaScript. Prav tako poskuša ohraniti, kjer je le mogoče, strukturo in idiome izvirne kode Python, vključno s konstrukti, kot so lambda in večkratno dedovanje med razredi.

Še več, izvorne zemljevide je mogoče ustvariti za prepisano kodo, ki kaže nazaj na prvotni Python, zato lahko razvijalci odpravijo napake s to kodo namesto ustvarjenega JavaScript-a. V skladu z dokumentacijo Transcrypt te naloge opravlja z CPythonovim modulom Abstract Syntax Tree, ki omogoča programski dostop do načina, kako Python razčleni svojo kodo.

Ena največjih prednosti Transcrypta je samodejni dostop do JavaScript-ovega objektnega modela dokumenta (DOM). Če poskusite dostopatidocument.getElementById v Pythonu bo na primer pretvorjena koda uporabila dejanskodocument.getElementById v JavaScript.

S tem povezan projekt, ki je še vedno močno zaokrožen, je Numscrypt, ki knjižnico matematike in statistike NumPy prenese na JavaScript. Zaenkrat Numscrypt ponuja le podnabor funkcij NumPy, čeprav so te funkcije (npr. Matrična matematika) med najpogosteje uporabljenimi. Vendar Numscrypt ni posodobljen od leta 2018.