Ohjelmointi

Kuinka muuntaa Python JavaScriptiksi (ja takaisin)

Python tai JavaScript? Vaikka kiistelemme edelleen siitä, kumpi on etusijalla tai valoisampi tulevaisuus, ei ole juurikaan epäilystä siitä, kuka omistaa verkon käyttöliittymän. Se on JavaScript selaimessa tai ei mitään.

Ehkä eiei mitään. JavaScript on suosikki kohdekieli ”transpilereille”, jotka muuttavat yhden ohjelmointikielen toiseen (katso: TypeScript, Emscripten, Cheerp, Cor). Pythonin valtava seuranta ja runsaasti käytettävissä olevia kirjastoja tekevät siitä erinomaisen ehdokkaan, joka muunnetaan eli siirretään JavaScriptiksi.

Tässä on neljä nykyistä projektia, joiden avulla Python on hyödyllinen JavaScript-maailmassa. Yksi erottuu kyvystä muuntaa molempiin suuntiin.

Brython

Yksi WebAss Assemblyn lupauksista on antaa meille mahdollisuuden käyttää mitä tahansa kieltä, jonka päätämme kehittää verkkoon, vaikka tämä onkin kaukainen tavoite. Brythonin filosofia, ainakin Python 3: n osalta, miksi odottaa?

Brython toteuttaa Python 3: n version asiakaspuolen web-ohjelmointia varten JavaScript-kirjaston kautta, joka jäljittelee kaikkia avainsanoja ja suurinta osaa Python 3: n sisäänrakennetuista tiedostoista. Pythonissa kirjoitetut komentosarjat voidaan sisällyttää suoraan verkkosivulle. Brython toimittaa korkean tason Python-moduulin käyttöliittymän (selain paketti) olla vuorovaikutuksessa DOM: n ja selaimen kanssa, ts. käsitellä kaikkea normaalisti suoraan JavaScriptiin tehtyä työtä.

Lukuisat live-esimerkkikoodit ja galleria minisovelluksia osoittavat, miten kaikki toimii. Brythonilla on jopa mahdollista kirjoittaa alkuperäinen Android-sovellus Pythonissa. Async-toiminnot ovat käytettävissä, vaikka sinun on käytettävä Brython'sia asynkronoitu moduuli Pythonin sijaan asyncio.

Brython ei poistu selaimen JavaScriptille asetetuista rajoituksista. Esimerkiksi paikallisen tiedostojärjestelmän käsittelyä ei tueta. HTML5-paikallisen tallennustilan käyttöä on kuitenkin tuettu, jos tarvitset vain jonkin tavan säilyttää tietoja sovelluskohtaisesti.

JavaScripthon

JavaScripthon keskittyy tiukasti Python 3.5: n ja uudemman koodin kääntämiseen JavaScriptiin yrittämättä tarjota täydellistä selaintukea Brythonin kaltaisten projektien mukaisesti. Se lähettää ES6-koodin, jotta selaimen puolella ei tarvita polyfill-täytteitä, ja se toimii hyvin Webpackin kaltaisilla työkaluilla säilyttämällä lähdekartat.

Suurinta osaa Pythonin yleisistä avainsanoista ja käyttäytymismalleista tuetaan, mukaan lukien asynkronoitu ja odottaa, Python 3.6 f-merkkijonot ja Python-luokan menetelmät ja perinnöt. Voit myös lisätä JavaScriptiä inline-toiminnolla erityisen toimintokutsun kautta, jos sinun on koskaan pudotettava suoraan JavaScriptiin.

Huomaa, että viimeiset sitoutumiset JavaScripthon-projektiin tehtiin toukokuussa 2018, joten se ei ole saanut tukea uusimmille Python-ominaisuuksille, kuten "mursuoperaattorille". Mutta kaikkien, jotka käyttävät Python 3.6 -ominaisuuksia, tulisi olla hyvin tuettuja.

[Myös: 24 Python-kirjastoa jokaiselle Python-kehittäjälle]

Jiphy

Jiphy-nimi on lyhenne sanoista "JavaScript in, Python out". Toisin sanoen, Jiphy kääntyy molempiin suuntiin kahden kielen välillä. Lisäksi molempien kielten koodi voidaan sekoittaa ennen muuntamista jommallekummalle kohdekieleksi.

Ennen kuin sukelat sisään ja aloitat muuntaa koko OpenStackin JavaScriptiksi, ota huomioon: Jiphy ei tarkoita täysimittaista koodikannan muunnosta. Sen tehtävä on pikemminkin, kuten README sanoo, "vähentää Python-kehittäjälle JavaScript-koodin kirjoittamiseen tarvittavaa kontekstinvaihtoa ja päinvastoin".

Suurin haittapuoli Jiphyyn on, että se tukee vain osaa Pythonin ominaisuuksista. Kursseja tai oletusargumentteja ei ole saatavana, vaikka sisustajia ja poikkeuksia tuetaan. Suuri osa tästä johtuu siitä, että Jiphy pyrkii luomaan rivikohtaisen suhteen lähde- ja kohdekoodin välillä, mutta sen kehittäjät ovat katsoneet ES6: n uusia ominaisuuksia edistyneemmän Python-ominaisuuden tuen saamiseksi.

Huomaa, että Jiphy-projektia ei ole päivitetty vuoden 2017 lopusta lähtien. Jiphyä tulisi pitää tiukasti kokeellisena, kunnes sen työ jatkuu.

JS2Py

JS2Py muuntaa JavaScriptin Pythoniksi, kuten nimestä käy ilmi, puhtaalla Python-muunnosmoottorilla. Tällä hetkellä sillä on virallinen tuki vain ES5: lle, vaikka rohkeille ja rohkeille on kokeellista ES6-tukea.

JS2Py tukee paljon rajat ylittävää yhteistyötä Pythonin ja JavaScriptin välillä. Voit tuoda olemassa olevia Node.js-moduuleja Python-koodiin a-muodossa js2py.require menetelmä. JavaScript-puolen muuttujia voidaan arvioida Python-puolella, ja Python-objekteja voidaan käyttää myös JavaScript-koodista.

JS2Py sisältää myös erittäin kokeellisen virtuaalikoneen, joka arvioi Pythonin JavaScript-koodin, mutta sitä ei vielä suositella tuotantokäyttöön.

RapydScript

RapydScript lupaa "Pythonic JavaScriptin, joka ei ime". Projekti on samanlainen kuin CoffeeScript siinä mielessä, että se hankkii koodin, joka on kirjoitettu vaihtoehtoisella kielellä - tässä tapauksessa Pythonin makulla - ja tuottaa JavaScriptiä, joka voi toimia missä tahansa sellaisenaan.

Siten RapydScript tarjoaa molempien maailmojen parhaat puolet, tuo Pythonin puhtaan syntaksin JavaScript-ominaisuuksiin, kuten nimettömiin toimintoihin, DOM-manipulointiin ja kykyyn hyödyntää JavaScript-kirjastoja, kuten jQuery tai Node.js-ydin. Se on totta - voit käyttää Rapydscriptin luomaa koodia verkkosivujen tai Node-sovellusten ohjaamiseen.

Toinen kätevä RapydScrypt-ominaisuus: Se tarjoaa sekä Python- että JavaScript-nimikkeistöjä tietyille toiminnoille aina kun mahdollista. Esimerkiksi $ jQueryn käyttämä erikoismerkki toimii sellaisenaan RapydScriptissä, ja taulukot voivat tukea molempia .työntää (JavaScript) ja .Liitä (Python) -menetelmät.

Salaa

Jos kuulet nimen Transcrypt ja ajattelet TypeScriptiä, et ole kaukana merkistä. Transcrypt noudattaa samaa perusajattelua - se siirtää Pythonin JavaScriptiksi. Se pyrkii myös mahdollisuuksien mukaan säilyttämään alkuperäisen Python-koodin rakenteen ja idiomit, mukaan lukien rakenteet, kuten lambdas, ja moniperintö luokkien välillä.

Lisäksi lähetettyyn koodiin voidaan luoda lähdekarttoja, jotka osoittavat takaisin alkuperäiseen Pythoniin, joten kehittäjät voivat tehdä virheenkorjauksen käyttämällä kyseistä koodia generoidun JavaScriptin sijaan. Asiakirjojen mukaan Transcrypt suorittaa nämä tehtävät CPythonin Abstract Syntax Tree -moduulilla, joka sallii ohjelmallisen pääsyn tapaan, jolla Python jäsentää oman koodinsa.

Yksi Transcryptin suurimmista eduista on automaattinen pääsy JavaScriptin Document Object Model (DOM) -ohjelmaan. Jos yrität päästädocument.getElementById esimerkiksi Pythonissa muunnettu koodi käyttää todellistadocument.getElementById JavaScriptissä.

Liittyvä projekti, joka on edelleen voimakkaasti peitossa, on Numscrypt, joka siirtää NumPy-matematiikka- ja -tilastokirjaston JavaScriptiin. Toistaiseksi Numscrypt tarjoaa vain osan NumPyn ominaisuuksista, vaikka nämä ominaisuudet (esim. Matriisimatematiikka) ovat yleisimmin käytettyjä. Numscryptia ei kuitenkaan ole päivitetty vuodesta 2018 lähtien.