Programmēšana

Kā konvertēt Python uz JavaScript (un atkal)

Python vai JavaScript? Lai gan mēs joprojām strīdamies par to, kuram ir pārsvars vai gaišāka nākotne, nav šaubu par to, kuram pieder tīmekļa priekšgals. Tas ir JavaScript pārlūkprogrammā vai nekas.

Nu varbūt neneko. JavaScript ir iecienītākā mērķa valoda “transpileriem”, kas pārveido vienu programmēšanas valodu citā (sk .: TypeScript, Emscripten, Cheerp, Cor). Un Python milzīgais sekojums un pieejamo bibliotēku bagātība padara to par lielisku kandidātu, kas jāpārvērš, t.i., jāpārsūta JavaScript.

Šeit ir četri pašreizējie projekti, lai padarītu Python noderīgu JavaScript pasaulē. Viens izceļas ar spēju pārveidot abos virzienos.

Brython

Viens no WebAssemble solījumiem ir ļaut mums izmantot jebkuru valodu, kuru mēs izvēlamies izstrādāt tīmeklim, lai gan tas joprojām ir tāls mērķis. Brythona filozofija, vismaz attiecībā uz Python 3, kāpēc gaidīt?

Brython ievieš Python 3 versiju klienta puses tīmekļa programmēšanai, izmantojot JavaScript bibliotēku, kas atdarina visus Python 3 atslēgvārdus un lielāko daļu iebūvēto. Skriptus, kas rakstīti Python, var iekļaut tieši tīmekļa lapā. Brython piegādā augsta līmeņa Python moduļa saskarni (pārlūku pakete), lai mijiedarbotos ar DOM un pārlūku, t.i., lai apstrādātu visu darbu, kas parasti tiek veikts tieši JavaScript.

Daudzi dzīvie kodu piemēri un mini-lietojumprogrammu galerija parāda, kā tas viss darbojas. Ir pat iespējams izmantot Brython, lai uzrakstītu vietējo Android lietotni Python. Async funkcionalitāte ir pieejama, lai gan jums ir jāizmanto Brython's asinhronais modulis, nevis Python's asinsija.

Brython neizvairās no ierobežojumiem, kas pārlūkprogrammā noteikti JavaScript. Piemēram, netiek atbalstīts darbs ar vietējo failu sistēmu. Tomēr HTML5 lokālās krātuves izmantošana tiek atbalstīta, ja viss, kas jums nepieciešams, ir veids, kā saglabāt datus katrai lietojumprogrammai.

JavaScripthon

JavaScripthon koncentrējas tikai uz Python 3.5 un jaunāku kodu tulkošanu JavaScript, nemēģinot nodrošināt pilnīgu atbalstu pārlūkprogrammā atbilstoši tādiem projektiem kā Brython. Tas izstaro ES6 kodu, lai samazinātu nepieciešamību pēc pārlūkprogrammas polifillēšanas, un labi spēlē ar tādiem rīkiem kā Webpack, saglabājot avota kartes.

Tiek atbalstīta lielākā daļa Python izplatīto atslēgvārdu un uzvedības, tostarp asinhronais un gaidi, Python 3.6 f-virknes un Python klases metodes un mantojumi. Varat arī ievietot JavaScript iekšēji, izmantojot īpašu funkciju izsaukumu, ja jums kādreiz ir nepieciešams nolaižties tieši uz JavaScript.

Ņemiet vērā, ka pēdējās saistības ar JavaScripthon projektu tika veiktas 2018. gada maijā, tāpēc tas nav saņēmis atbalstu jaunākajām Python funkcijām, piemēram, “valzirgu operators”. Bet ikvienam, kas izmanto Python 3.6 funkcijas, jābūt labi atbalstītam.

[Arī ieslēgts: 24 Python bibliotēkas katram Python izstrādātājam]

Džipijs

Jiphy nosaukums ir saīsinājums no “JavaScript in, Python out”. Citiem vārdiem sakot, Džipijs pārvēršas abos virzienos starp abām valodām. Turklāt kodu var sajaukt abās valodās, pirms tos pārveido par mērķa valodu.

Pirms ienirt un sākt pārveidot visu OpenStack uz JavaScript, ņemiet vērā: Jiphy nav pilnvērtīga koda konvertēšana. Drīzāk tā funkcija ir, kā saka README, "samazināt konteksta pārslēgšanos, kas nepieciešama Python izstrādātājam JavaScript koda rakstīšanai, un otrādi".

Lielākais Jiphy trūkums ir tas, ka tas atbalsta tikai Python funkciju apakškopu. Nav pieejamas ne klases, ne noklusējuma argumenti, lai gan dekoratori un izņēmumi tiek atbalstīti. Liela daļa no tā ir tāpēc, ka Jiphy cenšas panākt līnijas-līnijas attiecības starp avota un mērķa kodu, taču tā izstrādātāji ir pievērsuši uzmanību jaunajām ES6 funkcijām, lai iegūtu uzlabotu Python funkciju atbalstu.

Ņemiet vērā, ka Jiphy projekts nav atjaunināts kopš 2017. gada beigām. Jiphy ir jāuzskata par stingri eksperimentālu, līdz tiek atsākts darbs pie tā.

JS2Py

JS2Py pārvērš JavaScript par Python, kā norāda nosaukums, izmantojot tīru Python pārveidošanas motoru. Pašlaik tam ir oficiāls atbalsts tikai ES5, lai gan drosmīgajiem un drosmīgajiem ir eksperimentāls ES6 atbalsts.

JS2Py atbalsta lielu savstarpēju sadarbību starp Python un JavaScript. Jūs varat importēt esošos Node.js moduļus savā Python kodā, izmantojot a js2py.require metodi. Mainīgos no JavaScript puses var novērtēt Python pusē, un Python objektus var izmantot arī no JavaScript koda.

JS2Py ietver arī ļoti eksperimentālu virtuālo mašīnu, kas novērtē JavaScript kodu no Python, taču to vēl nav ieteicams izmantot produkcijai.

RapydScript

RapydScript sola “Pythonic JavaScript, kas nepieredz”. Projekts ir līdzīgs CoffeeScript, jo tas uzņem kodu, kas rakstīts alternatīvā valodā - šajā gadījumā Python aromātu - un ģenerē JavaScript, kas var darboties jebkurā vietā.

Tādējādi RapydScript nodrošina labāko no abām pasaulēm, nodrošinot Python tīru sintaksi JavaScript spējām, piemēram, anonīmām funkcijām, DOM manipulācijām un spēju piesaistīt tādas JavaScript bibliotēkas kā jQuery vai Node.js kodols. Tas ir pareizi - jūs varat izmantot Rapydscript ģenerēto kodu, lai vadītu tīmekļa lapas vai Node lietotnes.

Vēl viena ērta RapydScrypt iezīme: tā piedāvā gan Python, gan JavaScript nomenklatūras noteiktām darbībām, ja iespējams. Piemēram, $ īpašais simbols, ko izmanto jQuery, darbojas tādā pašā veidā kā RapydScript, un masīvi var atbalstīt gan .push (JavaScript) un .pievienot (Python) metodes.

Pārkodēt

Ja dzirdat vārdu Transcrypt un domājat, ka TypeScript, jūs neesat tālu no atzīmes. Pārkodēšana notiek saskaņā ar to pašu pamatideju - tā pārvērš Python uz JavaScript. Tas arī mēģina, kur vien iespējams, saglabāt sākotnējā Python koda struktūru un idiomas, tostarp tādas konstrukcijas kā lambdas un vairāku mantojumu klasēs.

Turklāt translētajam kodam var izveidot avota kartes, kas norāda uz sākotnējo Python, tāpēc izstrādātāji var atkļūdot, izmantojot šo kodu, nevis ģenerēto JavaScript. Saskaņā ar dokumentāciju, Transcrypt šos uzdevumus veic ar CPython’s Abstract Syntax Tree moduli, kas ļauj programmatiski piekļūt tam, kā Python parsē pats savu kodu.

Viena no lielākajām Transcrypt priekšrocībām ir automātiska piekļuve JavaScript dokumenta objekta modelim (DOM). Ja mēģināt piekļūtdocument.getElementById piemēram, Python, pārveidotais kods izmantos faktiskodocument.getElementById JavaScript.

Saistīts projekts, kas joprojām ir ļoti pakļauts, ir Numscrypt, kas NumPy matemātikas un statistikas bibliotēku pārnes uz JavaScript. Līdz šim Numscrypt nodrošina tikai NumPy funkciju apakškopu, lai gan šīs funkcijas (piemēram, matricas matemātika) ir starp visbiežāk izmantotajām. Tomēr Numscrypt nav atjaunināts kopš 2018. gada.