Programmering

Sådan konverteres Python til JavaScript (og tilbage igen)

Python eller JavaScript? Mens vi stadig diskuterer, hvem der har overhånden eller den lysere fremtid, eksisterer der kun lidt tvivl om, hvem der ejer internettets frontend. Det er JavaScript i browseren eller intet.

Nå, måske ikkeikke noget. JavaScript er et foretrukket målsprog for “transpilere”, der konverterer et programmeringssprog til et andet (se: TypeScript, Emscripten, Cheerp, Cor). Og Pythons enorme tilhænger og et væld af tilgængelige biblioteker gør det til en god kandidat til at blive konverteret, dvs. transpileret, til JavaScript.

Her er fire aktuelle projekter til at gøre Python nyttigt i JavaScript-verdenen. Man skiller sig ud ved at kunne konvertere i begge retninger.

Brython

Et af de løfter, WebAssembly giver, er at tillade os at bruge ethvert sprog, vi vælger at udvikle til internettet, selvom dette stadig er et fjernt mål. Filosofien bag Brython, i det mindste hvad Python 3 angår, er hvorfor vente?

Brython implementerer en version af Python 3 til web-programmering på klientsiden via et JavaScript-bibliotek, der efterligner alle nøgleordene og de fleste af de indbyggede til Python 3. Scripts skrevet i Python kan inkluderes direkte på en webside. Brython leverer en Python-modulgrænseflade på højt niveau (browser pakke) til at interagere med DOM og browseren, dvs. at håndtere alt det arbejde, der normalt udføres direkte i JavaScript.

Masser af live kodeeksempler og et galleri med mini-applikationer viser, hvordan det hele fungerer. Det er endda muligt at bruge Brython til at skrive en indbygget Android-app i Python. Async-funktionalitet er tilgængelig, selvom du skal bruge Brythons asynkronisering modul i stedet for Python's asyncio.

Brython undgår ikke de begrænsninger, der er pålagt JavaScript i browseren. For eksempel er der ingen understøttelse af håndtering af det lokale filsystem. Der er dog understøttelse af brug af HTML5 lokal opbevaring, hvis alt hvad du behøver, er en måde at fastholde data på per applikationsbasis.

JavaScripthon

JavaScripthon fokuserer strengt på at oversætte Python 3.5 og nyere kode til JavaScript uden at forsøge at yde fuld support i browseren i henhold til projekter som Brython. Det udsender ES6-kode for at minimere behovet for polyfills på browsersiden og spiller godt med værktøjer som Webpack ved at bevare kildekort.

De fleste af Pythons almindelige nøgleord og adfærd understøttes, inklusive asynkronisering og vente, Python 3.6 f-strings og Python klassemetoder og arv. Du kan også indsætte JavaScript inline via et specielt funktionsopkald, hvis du nogensinde har brug for at gå direkte til JavaScript.

Bemærk, at de sidste forpligtelser til JavaScripthon-projektet var i maj 2018, så det har ikke modtaget support til de nyeste Python-funktioner såsom "hvalrosoperatøren." Men enhver, der bruger Python 3.6-funktioner, bør understøttes godt.

[Også på: 24 Python-biblioteker til hver Python-udvikler]

Jiphy

Jiphy-navnet er en forkortelse af "JavaScript ind, Python ud." Med andre ord konverterer Jiphy i begge retninger mellem de to sprog. Derudover kan kode fra begge sprog blandes, inden de konverteres til et af målsproget.

Før du dykker ind og begynder at konvertere hele OpenStack til JavaScript, skal du være opmærksom: Jiphy handler ikke om fuldblodskodebasekonvertering. Snarere er dens funktion, som README udtrykker det, "at reducere den kontekstskift, der er nødvendig for en Python-udvikler til at skrive JavaScript-kode og omvendt."

Den største ulempe ved Jiphy er, at den kun understøtter en delmængde af Pythons funktioner. Hverken klasser eller standardargumenter er tilgængelige, selvom dekoratører og undtagelser understøttes. Meget af dette skyldes, at Jiphy stræber efter et line-to-line forhold mellem kilde og målkode, men dets udviklere har set de nye funktioner i ES6 for mere avanceret Python-funktionssupport.

Bemærk, at Jiphy-projektet ikke er blevet opdateret siden slutningen af ​​2017. Jiphy bør betragtes som strengt eksperimentelt, indtil arbejdet med det genoptages.

JS2Py

JS2Py konverterer JavaScript til Python, som navnet antyder, ved hjælp af en ren Python-konverteringsmotor. Den har kun officiel støtte til ES5 lige nu, selvom der er eksperimentel ES6-støtte til de modige og dristige.

JS2Py understøtter meget kryds-interoperation mellem Python og JavaScript. Du kan importere eksisterende Node.js-moduler i din Python-kode ved hjælp af en js2py.krav metode. Variabler fra JavaScript-siden kan evalueres på Python-siden, og Python-objekter kan også bruges fra JavaScript-kode.

JS2Py inkluderer også en meget eksperimentel virtuel maskine, der evaluerer JavaScript-kode fra Python, men det anbefales ikke til produktionsbrug endnu.

RapydScript

RapydScript lover "Pythonic JavaScript, der ikke suger." Projektet ligner CoffeeScript, idet det indtager kode skrevet på et alternativt sprog - i dette tilfælde en smag af Python - og genererer JavaScript, der kan køre hvor som helst som det er.

Således giver RapydScript det bedste fra begge verdener, hvilket bringer Pythons rene syntaks til JavaScript-funktioner som anonyme funktioner, DOM-manipulation og muligheden for at udnytte JavaScript-biblioteker som jQuery eller Node.js-kernen. Det er rigtigt - du kan bruge Rapydscript-genereret kode til at køre websider eller Node-apps.

En anden praktisk funktion i RapydScrypt: Det tilbyder både Python- og JavaScript-nomenklaturer til visse operationer, når det er muligt. For eksempel $ specielt symbol brugt af jQuery fungerer som det er i RapydScript, og arrays kan understøtte begge .skubbe (JavaScript) og .Tilføj (Python) metoder.

Transkrypter

Hvis du hører navnet Transcrypt og tænker TypeScript, er du ikke langt væk fra mærket. Transcrypt følger den samme grundlæggende idé - den sender Python til JavaScript. Det forsøger også at bevare, hvor det er muligt, strukturen og idiomerne i den oprindelige Python-kode, herunder konstruktioner som lambdas og flere arv på tværs af klasser.

Derudover kan der genereres kildekort til den transpilerede kode, der peger tilbage til den originale Python, så udviklere kan debugge ved hjælp af denne kode i stedet for det genererede JavaScript. Ifølge dokumentationen udfører Transcrypt disse opgaver med CPythons Abstract Syntax Tree-modul, der giver programmatisk adgang til den måde, Python analyserer sin egen kode på.

En af Transcrypt's største fordele er automatisk adgang til JavaScript's Document Object Model (DOM). Hvis du prøver at få adgangdocument.getElementById i Python bruger f.eks. den konverterede kode den aktuelledocument.getElementById i JavaScript.

Et tilknyttet projekt, og et stadig stærkt under omslag, er Numscrypt, som porter NumPy matematik-og-statistikbiblioteket til JavaScript. Indtil videre leverer Numscrypt kun en delmængde af NumPys funktioner, selvom disse funktioner (f.eks. Matrixmatematik) er blandt de mest almindeligt anvendte. Numscrypt er dog ikke blevet opdateret siden 2018.