Programování

Jak převést Python na JavaScript (a zpět)

Python nebo JavaScript? I když se stále dohadujeme, která má navrch nebo světlejší budoucnost, není pochyb o tom, kdo vlastní přední část webu. Je to JavaScript v prohlížeči nebo nic.

Možná nenic. JavaScript je oblíbeným cílovým jazykem „překladačů“, které převádějí jeden programovací jazyk do jiného (viz TypeScript, Emscripten, Cheerp, Cor). A díky Pythonu obrovské množství a množství dostupných knihoven je skvělým kandidátem na převod, tj. Transponování, do JavaScriptu.

Zde jsou čtyři aktuální projekty, díky nimž je Python užitečný ve světě JavaScriptu. Jeden vyniká tím, že dokáže převádět v obou směrech.

Brython

Jedním ze slibů, které WebAssembly dává, je umožnit nám používat jakýkoli jazyk, který se rozhodneme pro vývoj pro web, ačkoli to zůstává vzdáleným cílem. Filozofie Brythonu, alespoň pokud jde o Python 3, je proč čekat?

Brython implementuje verzi Pythonu 3 pro webové programování na straně klienta prostřednictvím knihovny JavaScriptu, která emuluje všechna klíčová slova a většinu vestavěných prvků pro Python 3. Skripty napsané v Pythonu lze zahrnout přímo na webovou stránku. Brython dodává rozhraní modulu Python na vysoké úrovni (prohlížeč balíček) komunikovat s DOM a prohlížečem, tj. zpracovávat veškerou práci běžně prováděnou přímo v JavaScriptu.

Spousta živých příkladů kódu a galerie mini aplikací ukazují, jak to všechno funguje. Je dokonce možné použít Brython k napsání nativní aplikace pro Android v Pythonu. Asynchronní funkce jsou k dispozici, i když musíte použít Brython's asynchronní místo Pythonu asyncio.

Brython neunikne omezením uloženým na JavaScriptu v prohlížeči. Například neexistuje podpora pro práci s místním souborovým systémem. Existuje však podpora pro používání místního úložiště HTML5, pokud vše, co potřebujete, je nějaký způsob, jak přetrvávat data na základě jednotlivých aplikací.

JavaScripthon

JavaScripthon se striktně zaměřuje na překlad kódu Pythonu 3.5 a novějšího do JavaScriptu, aniž by se snažil poskytovat plnou podporu v prohlížeči podle projektů, jako je Brython. Vydává kód ES6, aby minimalizoval potřebu polyfillů na straně prohlížeče, a hraje dobře s nástroji, jako je Webpack, se zachováním zdrojových map.

Většina běžných klíčových slov a chování Pythonu je podporována, včetně asynchronní a čekat, Python 3.6 f-řetězce a metody a dědičnosti tříd Pythonu. Můžete také vložit JavaScript inline pomocí volání speciální funkce, pokud někdy potřebujete přímo přejít na JavaScript.

Všimněte si, že poslední závazky k projektu JavaScripthon byly v květnu 2018, takže neobdržel podporu pro nejnovější funkce Pythonu, jako je „operátor mrože“. Ale každý, kdo používá funkce Pythonu 3.6, by měl být dobře podporován.

[Také na: 24 knihoven Pythonu pro každého vývojáře Pythonu]

Jiphy

Název Jiphy je zkratkou „JavaScript in, Python out.“ Jinými slovy, Jiphy převádí v obou směrech mezi těmito dvěma jazyky. Navíc lze kód z obou jazyků před převodem do jednoho z cílových jazyků smíchat.

Než se ponoříte a začnete převádět veškerý OpenStack na JavaScript, dejte si pozor: Jiphy není o plnohodnotné konverzi codebase. Spíše jeho funkcí je, jak uvádí README, „snížit kontextové přepínání nutné pro vývojáře Pythonu pro psaní kódu JavaScript a naopak.“

Největší nevýhodou Jiphy je, že podporuje pouze podmnožinu funkcí Pythonu. K dispozici nejsou ani třídy, ani výchozí argumenty, i když jsou podporovány dekoratéry a výjimky. Hodně z toho je, že Jiphy usiluje o přímkový vztah mezi zdrojovým a cílovým kódem, ale jeho vývojáři se podívali na nové funkce v ES6 pro pokročilejší podporu funkcí Pythonu.

Upozorňujeme, že projekt Jiphy nebyl aktualizován od konce roku 2017. Jiphy by měl být považován za přísně experimentální, dokud se na něm neobnoví práce.

JS2Py

JS2Py převádí JavaScript na Python, jak název napovídá, pomocí čistého pythonovského převodního modulu. Nyní má oficiální podporu pouze pro ES5, i když pro odvážné a odvážné existuje experimentální podpora ES6.

JS2Py podporuje velkou míru vzájemné spolupráce mezi Pythonem a JavaScriptem. Existující moduly Node.js můžete importovat do kódu Pythonu pomocí a js2py.require metoda. Proměnné ze strany JavaScriptu lze vyhodnotit na straně Pythonu a objekty Pythonu lze použít také z kódu JavaScriptu.

JS2Py také obsahuje vysoce experimentální virtuální stroj, který vyhodnocuje JavaScriptový kód z Pythonu, ale zatím se nedoporučuje pro produkční použití.

RapydScript

RapydScript slibuje „Pythonic JavaScript, který není nasáván.“ Projekt je podobný programu CoffeeScript v tom, že využívá kód napsaný v alternativním jazyce - v tomto případě chuť Pythonu - a generuje JavaScript, který lze spustit kdekoli tak, jak je.

RapydScript tak poskytuje to nejlepší z obou světů a přináší čistou syntaxi Pythonu do funkcí JavaScriptu, jako jsou anonymní funkce, manipulace DOM, a schopnost využívat knihovny JavaScriptu jako jQuery nebo jádro Node.js. To je pravda - můžete použít kód generovaný Rapydscript k řízení webových stránek nebo aplikací uzlů.

Další pohodlná funkce RapydScrypt: Nabízí nomenklatury Pythonu a JavaScriptu pro určité operace, pokud je to možné. Například $ speciální symbol používaný jQuery funguje tak, jak je, v RapydScript a pole mohou podporovat oba .tam (JavaScript) a .připojit (Python) metody.

Transkript

Pokud uslyšíte název Transcrypt a myslíte si TypeScript, nejste daleko od značky. Transcrypt sleduje stejnou základní myšlenku - převádí Python do JavaScriptu. Pokouší se také zachovat, kdekoli je to možné, strukturu a idiomy původního kódu Pythonu, včetně konstrukcí jako lambdas a vícenásobné dědičnosti napříč třídami.

Navíc mohou být generovány zdrojové mapy pro transpilovaný kód, který ukazuje zpět na původní Python, takže vývojáři mohou ladit pomocí tohoto kódu místo vygenerovaného JavaScriptu. Podle dokumentace Transcrypt plní tyto úkoly modulem CPython's Abstract Syntax Tree, který umožňuje programový přístup ke způsobu, jakým Python analyzuje svůj vlastní kód.

Jednou z největších výhod Transcryptu je automatický přístup k Java Object Document Model Model (DOM). Pokud se pokusíte o přístupdocument.getElementById například v Pythonu převede kód skutečnýdocument.getElementById v JavaScriptu.

Přidruženým projektem, který je stále velmi pod rouškou, je Numscrypt, který portuje knihovnu matematiky a statistik NumPy do JavaScriptu. Zatím Numscrypt poskytuje pouze podmnožinu funkcí NumPy, i když tyto funkce (např. Maticová matematika) patří mezi nejčastěji používané. Numscrypt však nebyl od roku 2018 aktualizován.

$config[zx-auto] not found$config[zx-overlay] not found