Programmering

Slik konverterer du Python til JavaScript (og tilbake igjen)

Python eller JavaScript? Mens vi fremdeles krangler om hvilke som har overtaket eller den lysere fremtiden, er det liten tvil om hvem som eier nettets frontend. Det er JavaScript i nettleseren eller ingenting.

Vel, kanskje ikkeingenting. JavaScript er et yndet målspråk for “transpilere” som konverterer ett programmeringsspråk til et annet (se: TypeScript, Emscripten, Cheerp, Cor). Og Pythons enorme følge og rikdom av tilgjengelige biblioteker gjør det til en god kandidat for å bli konvertert, dvs. transpilert, til JavaScript.

Her er fire aktuelle prosjekter for å gjøre Python nyttig i JavaScript-verdenen. Man skiller seg ut ved å kunne konvertere i begge retninger.

Brython

Et av løftene WebAssembly gir er å la oss bruke hvilket som helst språk vi velger å utvikle for nettet, selv om dette fortsatt er et fjernt mål. Filosofien bak Brython, i det minste hva Python 3 angår, er hvorfor vente?

Brython implementerer en versjon av Python 3 for webprogrammering på klientsiden via et JavaScript-bibliotek som etterligner alle nøkkelordene og de fleste av de innebygde programmene for Python 3. Skript skrevet i Python kan inkluderes direkte på en webside. Brython leverer et høyt nivå Python-modulgrensesnitt (nettleser pakke) for å samhandle med DOM og nettleseren, dvs. for å håndtere alt arbeidet som normalt gjøres direkte i JavaScript.

Mange live kodeeksempler og et galleri med mini-applikasjoner demonstrerer hvordan det hele fungerer. Det er til og med mulig å bruke Brython til å skrive en innfødt Android-app i Python. Async-funksjonalitet er tilgjengelig, selv om du må bruke Brythons asynkronisering modul i stedet for Python’s asyncio.

Brython unnslipper ikke restriksjonene som er pålagt JavaScript i nettleseren. For eksempel er det ingen støtte for å håndtere det lokale filsystemet. Det er imidlertid støtte for bruk av HTML5 lokal lagring, hvis alt du trenger er en måte å vedvare data på per applikasjonsbasis.

JavaScripthon

JavaScripthon fokuserer strengt på å oversette Python 3.5 og senere kode til JavaScript, uten å prøve å gi full støtte i nettleseren i henhold til prosjekter som Brython. Den avgir ES6-kode for å minimere behovet for polyfills på nettlesersiden, og spiller godt med verktøy som Webpack ved å bevare kildekart.

De fleste av Pythons vanlige nøkkelord og atferd støttes, inkludert asynkronisering og avvente, Python 3.6 f-strenger, og Python klassemetoder og arv. Du kan også sette inn JavaScript innebygd via en spesiell funksjonsanrop, hvis du noen gang trenger å gå til JavaScript direkte.

Vær oppmerksom på at de siste forpliktelsene til JavaScripthon-prosjektet var i mai 2018, så det har ikke fått støtte for de nyeste Python-funksjonene som "hvalrossoperatøren." Men alle som bruker Python 3.6-funksjoner, bør støttes godt.

[Også på: 24 Python-biblioteker for hver Python-utvikler]

Jiphy

Jiphy-navnet er en forkortelse av "JavaScript inn, Python ut." Med andre ord konverterer Jiphy i begge retninger mellom de to språkene. I tillegg kan kode fra begge språk blandes før den konverteres til begge målspråkene.

Før du dykker inn og begynner å konvertere hele OpenStack til JavaScript, må du ta hensyn: Jiphy handler ikke om fullverdig kodebasekonvertering. Snarere er dens funksjon, som README uttrykker det, "å redusere kontekstbytting som er nødvendig for at en Python-utvikler skal skrive JavaScript-kode og omvendt."

Den største ulempen med Jiphy er at den bare støtter en delmengde av Pythons funksjoner. Verken klasser eller standardargumenter er tilgjengelige, selv om dekoratører og unntak støttes. Mye av dette er fordi Jiphy strever for et linje-til-linje forhold mellom kilden og målkoden, men utviklerne har sett på de nye funksjonene i ES6 for mer avansert Python-funksjonsstøtte.

Merk at Jiphy-prosjektet ikke har blitt oppdatert siden slutten av 2017. Jiphy bør betraktes som strengt eksperimentelt til arbeidet med det gjenopptas.

JS2Py

JS2Py konverterer JavaScript til Python, som navnet tilsier, ved hjelp av en ren Python-konverteringsmotor. Den har kun offisiell støtte for ES5 akkurat nå, selv om det er eksperimentell ES6-støtte for modige og dristige.

JS2Py støtter mye kryss-interoperasjon mellom Python og JavaScript. Du kan importere eksisterende Node.js-moduler i Python-koden, ved hjelp av en js2py.require metode. Variabler fra JavaScript-siden kan evalueres på Python-siden, og Python-objekter kan også brukes fra JavaScript-kode.

JS2Py inkluderer også en svært eksperimentell virtuell maskin som evaluerer JavaScript-kode fra Python, men den anbefales ikke for produksjonsbruk ennå.

RapydScript

RapydScript lover "Pythonic JavaScript som ikke suger." Prosjektet ligner på CoffeeScript ved at det tar inn kode skrevet på et alternativt språk - i dette tilfellet en smak av Python - og genererer JavaScript som kan kjøres hvor som helst.

Dermed gir RapydScript det beste fra begge verdener, og bringer Pythons rene syntaks til JavaScript-funksjoner som anonyme funksjoner, DOM-manipulering og muligheten til å utnytte JavaScript-biblioteker som jQuery eller Node.js-kjernen. Det stemmer - du kan bruke Rapydscript-generert kode til å drive nettsider eller Node-apper.

En annen praktisk funksjon i RapydScrypt: Den tilbyr både Python- og JavaScript-nomenklaturer for visse operasjoner når det er mulig. For eksempel $ spesialsymbol brukt av jQuery fungerer som det er i RapydScript, og matriser kan støtte begge .trykk (JavaScript) og .tillegg (Python) metoder.

Krypter

Hvis du hører navnet Transcrypt og tenker TypeScript, er du ikke langt unna. Transcrypt følger den samme grunnideen - den transporterer Python til JavaScript. Det prøver også å bevare strukturen og idiomene til den opprinnelige Python-koden, der det er mulig, inkludert konstruksjoner som lambdas og flere arv på tvers av klasser.

I tillegg kan kildekart genereres for den transpilerte koden som peker tilbake til den opprinnelige Python, slik at utviklere kan feilsøke den koden i stedet for det genererte JavaScript. I følge dokumentasjonen utfører Transcrypt disse oppgavene med CPythons Abstract Syntax Tree-modul, som gir programmatisk tilgang til måten Python analyserer sin egen kode på.

En av Transcrypt største fordeler er automatisk tilgang til JavaScript's Document Object Model (DOM). Hvis du prøver å få tilgangdocument.getElementById i Python, for eksempel, vil den konverterte koden bruke den faktiskedocument.getElementById i JavaScript.

Et tilknyttet prosjekt, og et fortsatt tungt under wraps, er Numscrypt, som porter NumPy matematikk-og-statistikk-biblioteket til JavaScript. Så langt gir Numscrypt bare en delmengde av NumPys funksjoner, selv om disse funksjonene (f.eks. Matrisematematikk) er blant de mest brukte. Numscrypt har imidlertid ikke blitt oppdatert siden 2018.