Programavimas

Kaip konvertuoti „Python“ į „JavaScript“ (ir dar kartą)

„Python“ ar „JavaScript“? Nors mes vis dar ginčijamės dėl to, kas turi viršenybę ar šviesesnę ateitį, mažai abejonių, kam priklauso žiniatinklio priekinė dalis. Tai „JavaScript“ naršyklėje arba nieko.

Na, gal ir nenieko. „JavaScript“ yra mėgstamiausia tikslinė kalba „transpileriams“, kurie vieną programavimo kalbą paverčia kita (žr. „TypeScript“, „Emscripten“, „Cheerp“, „Cor“). Didžiulis „Python“ stebėjimas ir turimų bibliotekų gausa padaro jį puikiu kandidatu, kurį reikia paversti, t. Y. Perkelti į „JavaScript“.

Čia yra keturi dabartiniai projektai, skirti „Python“ padaryti naudingą „JavaScript“ pasaulyje. Vienas išsiskiria tuo, kad gali konvertuoti į abi puses.

Brythonas

Vienas iš „WebAss Assembly“ pažadų yra leisti mums naudoti bet kokią kalbą, kurią pasirenkame kurti žiniatinkliui, nors tai ir lieka tolimas tikslas. „Brython“ filosofija, bent jau kalbant apie „Python 3“, kodėl verta laukti?

„Brython“ įdiegia „Python 3“ versiją, skirtą kliento žiniatinklio programavimui, naudodama „JavaScript“ biblioteką, kuri imituoja visus raktinius žodžius ir daugumą „Python 3“ integruotų įtaisų. „Python“ parašytus scenarijus galima įtraukti tiesiai į tinklalapį. „Brython“ teikia aukšto lygio „Python“ modulio sąsają (naršyklė paketas), kad galėtumėte sąveikauti su DOM ir naršykle, t. y. tvarkyti visą darbą, kuris paprastai atliekamas tiesiogiai „JavaScript“.

Daugybė tiesioginių kodų pavyzdžių ir mini programų galerija parodo, kaip visa tai veikia. Net galima naudoti „Brython“, norint parašyti savąją „Android“ programą „Python“. Async funkcija yra prieinama, nors jūs turite naudoti Brython's asinchroninis modulis, o ne „Python“ asyncio.

„Brython“ neišvengia naršyklėje „JavaScript“ nustatytų apribojimų. Pavyzdžiui, nėra palaikymo tvarkant vietinę failų sistemą. Tačiau yra palaikymas naudoti HTML5 vietinę saugyklą, jei viskas, ko jums reikia, yra tam tikras būdas išsaugoti duomenis kiekvienai programai.

„JavaScripthon“

„JavaScripthon“ dėmesys sutelktas tik į „Python 3.5“ ir naujesnių kodų vertimą į „JavaScript“, nebandant suteikti visiško palaikymo naršyklėje pagal tokius projektus kaip „Brython“. Jis išleidžia ES6 kodą, kad sumažintų užpildymo poreikį naršyklės pusėje, ir puikiai palaiko tokius įrankius kaip „Webpack“, išsaugodamas šaltinio žemėlapius.

Palaikoma dauguma įprastų „Python“ raktinių žodžių ir elgesio asinchroninis ir laukti, „Python 3.6“ f-stygos ir „Python“ klasės metodai ir paveldėjimai. Taip pat galite įterpti „JavaScript“ įterpdami per specialų funkcijų iškvietimą, jei jums kada nors reikia tiesiogiai nukreipti į „JavaScript“.

Atkreipkite dėmesį, kad paskutiniai įsipareigojimai „JavaScripthon“ projektui buvo atlikti 2018 m. Gegužės mėn., Todėl jis negavo palaikymo dėl naujausių „Python“ funkcijų, tokių kaip „Walrus operatorius“. Bet kas naudojasi „Python 3.6“ funkcijomis, turėtų būti gerai palaikomas.

[Taip pat: 24 „Python“ bibliotekos kiekvienam „Python“ kūrėjui]

Jiphy

„Jiphy“ vardas yra „JavaScript in, Python out“ santrumpa. Kitaip tariant, Jiphy atsiverčia abiem kryptimis tarp dviejų kalbų. Be to, kodą iš abiejų kalbų galima maišyti prieš paverčiant juos į bet kurią tikslinę kalbą.

Prieš nerdami ir pradėdami konvertuoti visą „OpenStack“ į „JavaScript“, atkreipkite dėmesį: „Jiphy“ nėra visiškai suprantama kodų bazės konversija. Veikiau jo funkcija yra, kaip sako README, „sumažinti konteksto perjungimą, būtiną„ Python “kūrėjui, norint rašyti„ JavaScript “kodą, ir atvirkščiai“.

Didžiausias „Jiphy“ trūkumas yra tas, kad jis palaiko tik „Python“ funkcijų pogrupį. Nei klasių, nei numatytųjų argumentų nėra, nors dekoratoriai ir išimtys palaikomi. Didžioji dalis to yra todėl, kad „Jiphy“ siekia sukurti tiesioginį ryšį tarp šaltinio ir tikslinio kodo, tačiau jo kūrėjai atkreipė dėmesį į naujas ES6 funkcijas, kad būtų užtikrintas pažangesnis „Python“ funkcijų palaikymas.

Atkreipkite dėmesį, kad „Jiphy“ projektas nebuvo atnaujintas nuo 2017 m. Pabaigos. „Jiphy“ turėtų būti laikomas griežtai eksperimentiniu, kol nebus atnaujintas darbas.

JS2Py

JS2Py konvertuoja „JavaScript“ į „Python“, kaip rodo pavadinimas, naudodamas gryną „Python“ konversijos variklį. Šiuo metu jis oficialiai palaiko tik ES5, nors yra eksperimentinis ES6 palaikymas drąsiems ir drąsiems.

JS2Py palaiko daug kryžminio sąveikos tarp „Python“ ir „JavaScript“. Galite importuoti esamus „Node.js“ modulius į savo „Python“ kodą naudodami a js2py.require metodas. Kintamuosius iš „JavaScript“ pusės galima įvertinti „Python“ pusėje, o „Python“ objektus galima naudoti ir iš „JavaScript“ kodo.

„JS2Py“ taip pat yra labai eksperimentinė virtuali mašina, vertinanti „JavaScript“ kodą iš „Python“, tačiau kol kas nerekomenduojama naudoti gamybai.

„RapydScript“

„RapydScript“ žada „„ Pythonic JavaScript “, kuris neįsiurbia“. Projektas yra panašus į „CoffeeScript“, nes jis įsisavina kodą, parašytą kita kalba - šiuo atveju „Python“ skoniu - ir sukuria „JavaScript“, kuris gali veikti bet kurioje vietoje.

Taigi „RapydScript“ teikia geriausias iš abiejų pasaulių, suteikdamas „Python“ švarią sintaksę „JavaScript“ galimybėms, pvz., Anoniminėms funkcijoms, DOM manipuliavimui ir galimybei pasinaudoti „JavaScript“ bibliotekomis, tokiomis kaip „jQuery“ ar „Node.js“. Tai tiesa - galite naudoti „Rapydscript“ sugeneruotą kodą tinklalapiams ar „Node“ programoms valdyti.

Dar viena patogi „RapydScrypt“ funkcija: kai įmanoma, ji siūlo tiek „Python“, tiek „JavaScript“ nomenklatūras tam tikroms operacijoms atlikti. Pavyzdžiui, $ specialus „jQuery“ naudojamas simbolis veikia toks, koks yra „RapydScript“, o masyvai gali palaikyti abu .push („JavaScript“) ir .papildyti (Python) metodai.

Perkoduoti

Jei išgirsite „Transcrypt“ pavadinimą ir galvojate apie „TypeScript“, esate toli nuo žymės. „Transcrypt“ laikosi tos pačios pagrindinės idėjos - ji perkelia „Python“ į „JavaScript“. Taip pat stengiamasi, kai tik įmanoma, išsaugoti pirminio „Python“ kodo struktūrą ir idiomas, įskaitant tokias konstrukcijas kaip lambdas ir daugkartinį paveldėjimą klasėse.

Be to, perkeliamam kodui gali būti sugeneruoti šaltinio žemėlapiai, nukreipiantys į pradinį „Python“, todėl kūrėjai gali derinti naudodami šį kodą, o ne sugeneruotą „JavaScript“. Remiantis dokumentais, „Transcrypt“ šias užduotis atlieka naudodamas „CPython“ santraukos sintaksės medžio modulį, kuris leidžia programiškai pasiekti, kaip „Python“ analizuoja savo kodą.

Vienas didžiausių „Transcrypt“ pranašumų yra automatinė prieiga prie „JavaScript“ dokumento objekto modelio (DOM). Jei bandysite prieitidocument.getElementById Pavyzdžiui, „Python“ konvertuotas kodas naudos faktinįdocument.getElementById „JavaScript“.

Susijęs projektas, kuris vis dar stipriai apgaubtas, yra „Numscrypt“, kuris perkelia „NumPy“ matematikos ir statistikos biblioteką į „JavaScript“. Kol kas „Numscrypt“ pateikia tik „NumPy“ funkcijų pogrupį, nors šios funkcijos (pvz., Matricos matematika) yra vienos dažniausiai naudojamų. Tačiau „Numscrypt“ nebuvo atnaujintas nuo 2018 m.