Jak przekonwertować Python na JavaScript (iz powrotem)

Python czy JavaScript? Chociaż wciąż spieramy się o to, kto ma przewagę lub jaśniejszą przyszłość, nie ma wątpliwości co do tego, kto jest właścicielem frontonu sieci. To JavaScript w przeglądarce albo nic.

No może nie  nic.  JavaScript jest ulubionym językiem docelowym dla „transpilerów”, które konwertują jeden język programowania na inny (patrz: TypeScript, Emscripten, Cheerp, Cor). Ogromna liczba zwolenników Pythona i bogactwo dostępnych bibliotek sprawia, że ​​jest on doskonałym kandydatem do konwersji, tj. Transpozycji, do JavaScript.

Oto cztery aktualne projekty mające na celu uczynienie języka Python użytecznym w świecie JavaScript. Wyróżnia się możliwością konwersji w obu kierunkach.

Brython

Jedną z obietnic składanych przez WebAssembly jest umożliwienie nam używania dowolnego języka, który wybierzemy do tworzenia sieci, choć pozostaje to odległy cel. Filozofia Brythona, przynajmniej jeśli chodzi o Python 3, brzmi: po co czekać?

Brython implementuje wersję Pythona 3 do programowania WWW po stronie klienta poprzez bibliotekę JavaScript, która emuluje wszystkie słowa kluczowe i większość wbudowanych w Python 3. Skrypty napisane w Pythonie można umieścić bezpośrednio na stronie internetowej. Brython dostarcza wysokopoziomowy interfejs modułu Pythona (  browser pakiet) do interakcji z DOM i przeglądarką, tj. Do obsługi całej pracy wykonywanej zwykle bezpośrednio w JavaScript.

Mnóstwo przykładów kodu na żywo i galeria miniaplikacji pokazują, jak to wszystko działa. Możliwe jest nawet użycie Brythona do napisania natywnej aplikacji na Androida w Pythonie. Funkcjonalność async jest dostępna, chociaż musisz użyć asyncmodułu Brythona zamiast Pythona asyncio.

Brython nie uchyla się od ograniczeń nałożonych na JavaScript w przeglądarce. Na przykład nie ma wsparcia dla obsługi lokalnego systemu plików. Istnieje jednak wsparcie dla korzystania z lokalnego magazynu HTML5, jeśli wszystko, czego potrzebujesz, to jakiś sposób na utrwalenie danych dla poszczególnych aplikacji.

JavaScripthon

JavaScripthon koncentruje się wyłącznie na tłumaczeniu kodu Python 3.5 i nowszych na JavaScript, bez próby zapewnienia pełnej obsługi przeglądarki, zgodnie z projektami takimi jak Brython. Emituje kod ES6, aby zminimalizować potrzebę stosowania polyfillów po stronie przeglądarki i dobrze współpracuje z narzędziami takimi jak Webpack, zachowując mapy źródłowe.

Większość zwykłych słów kluczowych i zachowań Pythona są obsługiwane, w tym asynci awaitPython 3.6 f-strings i metod klasy Python i spadków. Możesz również wstawić JavaScript w tekście za pomocą specjalnego wywołania funkcji, jeśli kiedykolwiek będziesz musiał przejść bezpośrednio do JavaScript.

Zwróć uwagę, że ostatnie zatwierdzenia projektu JavaScripthon miały miejsce w maju 2018 r., Więc nie otrzymał on wsparcia dla najnowszych funkcji Pythona, takich jak „operator morsa”. Ale każdy, kto używa funkcji Pythona 3.6, powinien być dobrze obsługiwany.

[Również na: 24 biblioteki Pythona dla każdego programisty Pythona]

Jiphy

Nazwa Jiphy to skrót od „JavaScript in, Python out”. Innymi słowy, Jiphy nawraca się w obu kierunkach między tymi dwoma językami. Ponadto kod z obu języków można wymieszać przed konwersją na którykolwiek z języków docelowych.

Zanim zagłębisz się i zaczniesz konwertować cały OpenStack do JavaScript, zwróć uwagę: Jiphy nie polega na pełnej konwersji bazy kodu. Jego funkcją jest raczej, jak to ujął README, „ograniczenie przełączania kontekstu niezbędnego dla programisty Pythona do pisania kodu JavaScript i odwrotnie”.

Największą wadą Jiphy jest to, że obsługuje tylko podzbiór funkcji Pythona. Nie są dostępne ani klasy, ani domyślne argumenty, chociaż obsługiwane są dekoratory i wyjątki. W dużej mierze dzieje się tak, ponieważ Jiphy dąży do uzyskania relacji linia-wiersz między kodem źródłowym i docelowym, ale jego programiści przyglądali się nowym funkcjom ES6 pod kątem bardziej zaawansowanej obsługi funkcji Pythona.

Zwróć uwagę, że projekt Jiphy nie był aktualizowany od końca 2017 roku. Jiphy powinien być traktowany jako ściśle eksperymentalny, dopóki prace nad nim nie zostaną wznowione.

JS2Py

JS2Py konwertuje JavaScript do Pythona, jak sama nazwa wskazuje, przy użyciu silnika konwersji czystego Pythona. Obecnie ma oficjalne wsparcie tylko dla ES5, chociaż istnieje eksperymentalne wsparcie ES6 dla odważnych i odważnych.

JS2Py obsługuje wiele współdziałania między Pythonem i JavaScriptem. Możesz zaimportować istniejące moduły Node.js do kodu Pythona za pomocą js2py.requiremetody. Zmienne po stronie JavaScript można oceniać po stronie Pythona, a obiekty Pythona mogą być również używane z kodu JavaScript.

JS2Py zawiera również wysoce eksperymentalną maszynę wirtualną, która ocenia kod JavaScript z Pythona, ale nie jest jeszcze zalecana do użytku produkcyjnego.

RapydScript

RapydScript obiecuje „Pythonic JavaScript, który nie jest do niczego”. Projekt jest podobny do CoffeeScript pod tym względem, że pobiera kod napisany w alternatywnym języku - w tym przypadku jest to odmiana Pythona - i generuje JavaScript, który może działać gdziekolwiek jest. 

W ten sposób RapydScript zapewnia to, co najlepsze z obu światów, przenosząc czystą składnię Pythona do możliwości JavaScript, takich jak funkcje anonimowe, manipulacja DOM i możliwość wykorzystania bibliotek JavaScript, takich jak jQuery lub rdzeń Node.js. Zgadza się - możesz użyć kodu wygenerowanego przez Rapydscript do kierowania stronami internetowymi lub aplikacjami Node. 

Inna wygodna funkcja RapydScrypt: oferuje nazewnictwo zarówno Python, jak i JavaScript dla niektórych operacji, jeśli to możliwe. Na przykład $specjalny symbol używany przez jQuery działa tak jak jest w RapydScript, a tablice mogą obsługiwać zarówno metody .push(JavaScript), jak i .append(Python).

Transkrypt

Jeśli słyszysz nazwę Transcrypt i myślisz TypeScript, nie jesteś daleko od celu. Transcrypt kieruje się tą samą podstawową ideą - transponuje Python do JavaScript. Stara się również zachować, tam gdzie to możliwe, strukturę i idiomy oryginalnego kodu Pythona, w tym konstrukcje takie jak lambdy i wielokrotne dziedziczenie między klasami.

Co więcej, mapy źródłowe mogą być generowane dla przetransponowanego kodu, który wskazuje na oryginalny Python, więc programiści mogą debugować przy użyciu tego kodu zamiast wygenerowanego JavaScript. Zgodnie z dokumentacją, Transcrypt wykonuje te zadania za pomocą modułu Abstract Syntax Tree firmy CPython, który umożliwia programowy dostęp do sposobu, w jaki Python analizuje swój własny kod.

Jedną z największych zalet Transcrypt jest automatyczny dostęp do JavaScript Document Object Model (DOM). Jeśli na przykład spróbujesz uzyskać dostęp  document.getElementById w Pythonie, przekonwertowany kod użyje rzeczywistego  document.getElementById w JavaScript.

Powiązanym projektem, który wciąż jest mocno zawijany, jest Numscrypt, który przenosi bibliotekę matematyczno-statystyczną NumPy do JavaScript. Jak dotąd Numscrypt udostępnia tylko podzbiór funkcji NumPy, chociaż te funkcje (np. Matematyka macierzowa) należą do najczęściej używanych. Jednak Numscrypt nie był aktualizowany od 2018 roku.