Python w przeglądarce: jak wybrać między Brython, PyPy.js, Skulpt i Transcrypt?

89

Jestem bardzo podekscytowany widząc, że w przeglądarce można teraz kodować Pythona. Oto główni kandydaci (proszę dodać te, które mogłem przeoczyć):

Ale jak wybrać między nimi? Jedyną oczywistą różnicą, jaką widzę, jest to, że Skulpt jest oparty na Pythonie 2, podczas gdy Brython jest oparty na Pythonie 3.

Uwaga: to nie jest prośba o zalecenia lub opinie. Szukam obiektywnych faktów, które pomogłyby w dokonaniu świadomego wyboru.

Liczba Pi
źródło
6
Poproszenie nas o zalecenie najlepszej biblioteki do czegoś jest jednym z przypadków, w których pomoc wyraźnie wyjaśnia, że ​​StackOverflow nie jest dobry. To świetne pytanie, ale nie do formatu tej witryny; prawdopodobnie potrzebujesz czegoś opartego na dyskusji, na przykład listy mailingowej lub forum.
abarnert
2
Transcrypt ( transcrypt.org ) kompiluje z dużym podzbiorem python3.5 INC. wielokrotne dziedziczenie, generuje szybki (zapamiętywanie połączeń), mały, czytelny kod, obsługuje wielopoziomowe mapy źródeł i może używać dowolnej biblioteki JS bez adaptacji. Zastrzeżenie: napisałem to.
Jacques de Hooge
1
Cześć fzzylogic, dodałem tag, więc ludzie mogą teraz zadawać pytania na temat używania go. Zastąpiłem nim tag JS, ponieważ jest to najmniej prawdopodobne, aby wyszukiwać, jeśli wolisz używać Pythona w przeglądarce.
Jacques de Hooge
1
Napisałem swego rodzaju tutorial do Transcrypt dla początkujących. Możesz spojrzeć na to na github.com/bunkahle/Transcrypt-Examples/blob/master/alerts/ ... i github.com/bunkahle/Transcrypt-Examples/blob/master/cookies/ ...
bunkus
1
Usunięta odpowiedź od dstromberga z 27 głosami za pozytywnymi ma fajny link porównawczy: stromberg.dnsalias.org/~strombrg/pybrowser/python-browser.html
Cees Timmerman

Odpowiedzi:

26

Uruchamianie Pythona w przeglądarce to naprawdę dobry i aktualny (stan na 2019 r.) Artykuł, w którym porównano Brython, Skulpt, PyPy.js, Transcrypt, Pyodide, Batavia . Gorąco polecam lekturę.

Dobre podsumowanie można zobaczyć na poniższych zdjęciach.

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

laike9m
źródło
61

Oto kilka informacji na temat Brython vs Transcrypt (lipiec 2016 r., Ponieważ Transcrypt został dodany jako opcja w tym pytaniu przez OP), zebrane przez rozpoczęcie projektu z Brythonem kilka miesięcy temu i przejście do Transcrypt (zakończono przeprowadzkę w zeszłym tygodniu). Lubię Brython i Transcrypt i widzę zastosowania obu z nich.

Dla osób, które są nowicjuszami, Brython i Transcrypt oba „transpile” danych wejściowych Pythona do javascript (Edycja: może lepiej jest postrzegać Brython jako „implementację Pythona dla przeglądarki”, ponieważ nie tworzy ona samodzielnego kodu JavaScript). Oba wymagają składni Python 3. Brython zawiera znaczną liczbę standardowych bibliotek Pythona, a niektóre z nich są własne do radzenia sobie z rzeczami związanymi z siecią, podczas gdy Transcrypt w większości unika tego i sugeruje użycie bibliotek JavaScript.

Brython ( Github) może dokonać konwersji w przeglądarce. Więc piszesz w Pythonie, a silnik brython.js konwertuje go na javascript w locie, gdy strona jest ładowana. Jest to bardzo wygodne i znacznie szybsze niż myślisz. Jednak silnik brython.js, który musisz umieścić na swoich stronach, ma około 500 KB. Jest też kwestia importowania standardowych bibliotek, którą Brython obsługuje, pobierając oddzielne pliki .js z żądaniami XHR. Niektóre biblioteki są już skompilowane w brython.js, więc nie każdy import będzie pobierał nowe pliki, ale jeśli używasz wielu importów, może to działać wolniej. Są jednak sposoby na obejście tego. To, co zrobiłem, to sprawdzić kartę sieciową w narzędziach programistycznych przeglądarki, aby zobaczyć, jakie pliki są pobierane podczas ładowania strony, a następnie usunąć wszystkie pliki, których mój projekt nie używał, z kopii folderu Brython src i uruchom skrypt dołączony do Brythona (wydaje mi się, że znajduje się on pod adresem Brython / www / scripts / make_VFS.py), który kompiluje wszystkie dostępne biblioteki w jeden plik o nazwie py_VFS.js, do którego musisz również połączyć się z html. Zwykle utworzy jeden ogromny plik o wielkości 2 MB +, ale jeśli usuniesz rzeczy, których nie używasz, może być dość mały. Robiąc to w ten sposób, musisz tylko pobrać brython.js, py_VFS.js i swój kod Pythona i nie będą potrzebne żadne dodatkowe żądania XHR.

Z drugiej strony Transcrypt ( Github ) jest dystrybuowany jako pakiet Python 3którego możesz użyć ręcznie lub podłączyć się do swojego łańcucha narzędzi, aby wcześniej skompilować Pythona do javascript. Dzięki Transcrypt piszesz w pythonie, uruchamiasz transkrypt w stosunku do pythona, a on wypluwa javascript, do którego możesz utworzyć link w swoim projekcie. Jest bardziej podobny do tradycyjnego kompilatora, również dlatego, że oferuje pewną kontrolę nad wyjściem. Na przykład, możesz zdecydować się na kompilację do ES6 lub ES5 lub poprosić o wyjście map źródeł (które podczas debugowania niech przeglądarka przeniesie Cię bezpośrednio do odpowiedniego kodu Pythona, zamiast wygenerowanego kodu javascript). Wyjście Transcrypt javascript jest dość zwięzłe ( lub inaczej mówiąc, jest ładny i zwięzły). W moim przypadku 150kB Pythona jest konwertowane na 165kB niezminifikowanego javascript ES5. Dla porównania, wersja mojego projektu Brython zużywała po konwersji około 800Kb.

Jednak uzyskanie korzyści z zwięzłości Transcrypts wymaga nieco przeczytania dokumentacji (naprawdę tylko trochę). Na przykład w przypadku Transcrypt `` prawdziwość '' Pythona dla struktur danych, takich jak dict, set i list, nie jest domyślnie włączona, a włączenie jej na całym świecie jest odradzane z powodu potencjalnych problemów z wydajnością związanych ze sprawdzaniem typów. Dla jasności: w CPythonie pusty dykt, zestaw lub lista ma wartość prawda Fałsz, podczas gdy w Javascript jest to „prawda”. Przykład:

myList = []
if myList:    # False in CPython bcs it's empty, true in javascript bcs it exists
    # do some things.

Istnieją co najmniej trzy sposoby rozwiązania tego problemu:

  • Użyj flagi -t podczas konwersji Pythona do javascript, np .: $ transcrypt -t python.py (niezalecane, ale prawdopodobnie nie stanowi problemu, chyba że wielokrotnie sprawdzasz prawdziwość w wewnętrznych pętlach kodu wrażliwego na wydajność ..)
  • Użyj __pragma__(tconv)lub __pragma__(notconv)w swoim kodzie, aby powiedzieć kompilatorowi transkryptowania, aby włączył automatyczną konwersję lokalnie na wartości prawdy podobne do języka Python.
  • Zamiast sprawdzać wartość prawdy, całkowicie uniknij problemu, po prostu sprawdzając len (myList)> 0 ... Może to będzie w porządku w większości sytuacji, wystarczy na moje lekkie użycie.

Tak, więc mój projekt stawał się coraz większy i chciałem wstępnie skompilować, aby zwiększyć wydajność, ale okazało się to trudne z Brythonem (chociaż jest to technicznie możliwe, najłatwiej jest użyć edytora online i kliknąć przycisk javascript, aby zobaczyć wyjście). Zrobiłem to i utworzyłem link do wygenerowanego kodu javascript z project.html, ale z jakiegoś powodu nie zadziałało. Ponadto trudno mi zrozumieć komunikaty o błędach od Brythona, więc nie wiedziałem, od czego zacząć, gdy ten krok się nie powiódł. Również duży rozmiar wysyłanego kodu i rozmiar silnika brythona zaczęły mnie niepokoić. Postanowiłem więc przyjrzeć się bliżej Transcrypt, który na początku wydawał się być lepszym stopniem, ponieważ wolę odręczne instrukcje, które mówią mi, jak zacząć od razu (te zostały dodane).

Najważniejszą rzeczą podczas konfiguracji po zainstalowaniu Pythona 3.5 było:

  1. Użyj venv (to jak nowa wbudowana wersja virtualenv, która zajmuje mniej miejsca dla każdego projektu), aby skonfigurować folder projektu python3.5 (wystarczy wpisać: python3.5 -m venv nazwa folderu - obejście dla ubuntu z problemami z pakietami dla wersji 3.5 ). To sprawia, że ​​„nazwa folderu” jest między innymi podfolderem bin.
  2. Zainstaluj pakiet Transcrypt python za pomocą pip (`` nazwa folderu / bin / pip install transcrypt ''), który instaluje go w folderze / lib / python3.5 / site-packages / transcrypt.
  3. activatebieżący terminal, jeśli nie chcesz za każdym razem wpisywać pełnej ścieżki do nazwy folderu / bin / python3.5. Aktywuj, wpisując: „nazwa folderu źródłowego / bin / aktywuj”
  4. Zacznij pisać kod i kompilować go do javascript w celu przetestowania. Skompiluj z folderu, w którym piszesz kod. Na przykład użyłem nazwy folderu / www / projekt. Więc CD do tego folderu i uruchom: 'transcrypt -b your_python_script.py'. To umieszcza dane wyjściowe w podfolderze o nazwie __javascript__. Następnie możesz utworzyć link do wyprowadzonego kodu JavaScript z pliku HTML.

Główne kwestie poruszane

Mam raczej proste potrzeby, więc Twój przebieg może się różnić.

  • Musisz zastąpić standardowe biblioteki brython lub python libs javascript. Na przykład „import json” jest dostarczany przez Brython, ale w Transcrypt możesz użyć biblioteki javascript lub po prostu użyć JSON.parse / JSON.stringify bezpośrednio w kodzie Pythona. Aby dołączyć zminimalizowaną wersję biblioteki javascript bezpośrednio do kodu Pythona, użyj tego formatu (zwróć uwagę na potrójne cudzysłowy):

    __pragma__ ('js', '{}', '''
    // javascript code
    ''')
    
  • Specyficzne funkcje HTML Brython nie działają oczywiście z Transcrypt. Po prostu użyj normalnych sposobów javascript. Przykłady: 1) w Brython mogłeś odnieść się do określonego tagu HTML używając 'document [' id ']', ale z Transcrypt użyłbyś 'document.getElementById (' id ') (tak samo jak robisz z javascript). 2) Nie możesz usunąć węzła za pomocą „del nodeName” (bcs to funkcja brythona). Użyj czegoś takiego jak „node.parentNode.removeChild (węzeł)”. 3) Zastąp wszystkie funkcje DOM brythona alternatywami javascript. np. nazwa_klasy = nazwa klasy; text = textContent; html = innerHTML; parent = parentNode; children = childNodes itp. Myślę, że jeśli potrzebujesz czegoś, co zawiera alternatywy wymagane przez niektóre starsze przeglądarki, to są do tego biblioteki javascript. 4) Set_timeout Brythona jest zastępowany przez javascripts setTimeout 5) Znaczniki html Brython, takie jak BR (), należy zastąpić zwykłymi sposobami javascript, a także przerobić wszystkie miejsca, w których użyłeś, to składnia manipulacji <= dom. Wprowadź znaczniki zwykłego tekstu jako innerHTML lub utwórz elementy przy użyciu składni javascript, a następnie dołącz je przy użyciu normalnej składni DOM javascript. Zauważyłem również, że dla pól wyboru brython używa "if checkbox = 'zaznaczone':", ale Transcrypt jest zadowolony z "if checkbox:" .. Wprowadź znaczniki zwykłego tekstu jako innerHTML lub utwórz elementy za pomocą składni javascript, a następnie dołącz je za pomocą normalnej składni DOM javascript. Zauważyłem również, że dla pól wyboru brython używa "if checkbox = 'zaznaczone':", ale Transcrypt jest zadowolony z "if checkbox:" .. Wprowadź znaczniki zwykłego tekstu jako innerHTML lub utwórz elementy przy użyciu składni javascript, a następnie dołącz je przy użyciu normalnej składni DOM javascript. Zauważyłem również, że dla pól wyboru brython używa "if checkbox = 'zaznaczone':", ale Transcrypt jest zadowolony z "if checkbox:" ..

  • Skończyłem przenosić projekt linii 2700 w zeszłym tygodniu, kiedy to Transcrypt nie miał wsparcia dla kilku drobnych rzeczy (chociaż były one dość łatwe do zastąpienia wypełniaczami), były to 1) str. Dolne, str. Podzielone (str. split jest obecny, ale wydaje się, że jest to podział javascript, który działa inaczej niż wersja Pythona, na której działaniu polegałem), 2) round (wydaje się, że jest to obsługiwane w wersji dev) i 3) isinstance didn nie działa na str, int i float, tylko na dict, list i set. 4) Inną różnicą w stosunku do Brythona, którą zauważyłem, jest to, że jeśli pobiorę reprezentację dyktu w formacie JSON, muszę to zrobić za pomocą „myDict = dict (data)”, podczas gdy brython był zadowolony z „myDict = data”. Ale może to być związane z czymś w pliku json.loads Brythona, które zastąpiłem bezpośrednio JSON.parse.__pragma__('opov')dla lokalnego), nie możesz wykonywać operacji na zestawach przy użyciu przeciążonego formatu, ale musisz użyć odpowiednich funkcji. Na przykład

    a = set([1, 2, 3])
    b = set([3, 4, 5])
    a.difference(b)             # is used instead of a - b
    a.union(b)                  # used instead of a | b
    a.intersection(b)           # used instead of a & b
    a.symmetric_difference(b)   # used instead of a ^ b
    

6) Ponadto nie możesz domyślnie iterować dyktowania za pomocą 'for i in dict:', bez włączania tego (linia cmd -i lub __pragma__('iconv'), ale możesz uniknąć konieczności włączania go, używając po prostu keys () member, np:

for key, value in dict.items():
    # do things for each key and value..

Podsumować

  • Podoba mi się Brython, ponieważ łatwo jest się nim zająć i przetestować swój kod (tylko F5). Jest bliżej prawdziwego Pythona, ponieważ jest tam większość standardowej biblioteki. Nie podoba mi się konieczność dołączania silnika transpilacji (Edycja: Lub można go postrzegać jako maszynę wirtualną Pythona) w przeglądarce i dużego rozmiaru wyjściowego kodu JavaScript. Gdybym musiał zrobić coś więcej (ale nadal używać Brythona), użyłbym metod javascript do manipulowania DOM z brythona (co możesz zrobić ...), zamiast polegać tak bardzo na metodach Brythona, ponieważ marnowało to czas na przechodzenie na inny transpiler, gdy zmieniły się moje potrzeby.

  • Lubię Transcrypt, ponieważ wyprowadzony javascript jest naprawdę `` chudy i wredny '' i ponieważ jedyną rzeczą, którą ładujesz po stronie przeglądarki, jest wygenerowany kod javascript, który ma rozmiar podobny do twojego kodu Pythona. Również dlatego, że obsługuje sourcemaps i ponieważ daje mi kontrolę nad wyświetlanym javascriptem. Używanie go nauczyło mnie sporo o optymalizacji.

Mam nadzieję, że pomoże to komuś zobaczyć, które z nich mogą być dobre dla jego konkretnego projektu.

fzzylogic
źródło
1
Czy na pewno Brython jest transpilerem? Jestem prawie pewien, że implementuje interpreter języka Python w JavaScript. Gdyby to był transpiler, nie musiałbyś łączyć go ze swoją aplikacją.
Carl Smith
@Carl Smith Interesująca uwaga, nie pomyślałem o tym w ten sposób. Brython konwertuje kod Pythona na kod javascript, ale ponieważ javascript nie ma standardowego kodu bajtowego, być może można by zobaczyć wygenerowany kod JavaScript jako „kod bajtowy” dla silnika Brython.
fzzylogic
1
Nie zrozumiałeś mnie. Nie sądzę, by Brython w ogóle transponował Python do JavaScript. Po prostu implementuje interpreter języka Python w JS, zamiast w C. Według ich GitHub README "Brython (Browser Python) to implementacja Pythona 3 działająca w przeglądarce, z interfejsem do elementów DOM i zdarzeń".
Carl Smith
4
@jsbueno Obecnie dostępne są seed, randint, choice i random, które mają służyć jako punkt wyjścia. Właściwie mamy nadzieję, że ktoś go podniesie i dokończy, tak samo jak dla re, który był wysoko na naszej liście. Nie powinno być takie trudne. Liczba bibliotek wzrosła, ale wkłady są bardzo mile widziane. Chociaż akcent pozostanie na używaniu bibliotek JS, osobiście z zadowoleniem przyjmuję więcej bibliotek standardowych.
Jacques de Hooge
1
Ładny przegląd. Ogólnie rzecz biorąc, główną różnicą (którą stwierdzasz, ale nie podkreślasz) jest to, że celem Brythona jest w rzeczywistości umożliwienie korzystania z Pythona w przeglądarce, podczas gdy wydaje się, że celem Transcrypt jest umożliwienie używania składni Pythona do pisania JavaScript. Oznacza to, że Transcrypt jest skłonny robić takie rzeczy, jak różnica w prawdziwości, która odbiega na podstawowym poziomie od semantyki Pythona, a także wydaje się być ukierunkowana na kod, który wykorzystuje biblioteki JavaScript; podczas gdy Brython stara się jak najdokładniej powielać Pythona z myślą, że wszystko zrobisz w Pythonie.
BrenBarn
12

Używałem i zobowiązałem się do skulpt, a także pypyjs. I wszystkie są bardzo różne, więc jakiekolwiek porównanie jest dyskusyjne, jeśli o mnie chodzi.

To zależy od tego, czego szukasz, co będzie miało największy sens.

PyPyJS

pypyjs to ogromny plik javascript o wielkości 12 MB, który zawiera całą maszynę wirtualną pypy. Więc jeśli chcesz kompletności implementacji Pythona, to jest to twoje dziecko. Ma mostek javascript, który działa naprawdę dobrze, ale nie jest realną opcją do pisania kodu witryny javascript w Pythonie. Pozwoli ci to jednak import compiler.

Jest zbudowany z emscripten i jest szybszy niż CPython, jeśli chodzi o uruchamianie testu porównawczego pystone.

Dałem krótką rozmowę o pypyjs, tutaj są slajdy.

Skulpt

Jest narzędziem edukacyjnym (lub ewoluowało w to z biegiem czasu), kompiluje twój Python do maszyny stanu bardzo dokładnie emulującej kompilator cpython. W istocie jest to odręczna implementacja kompilatora Pythona w javascript. Pozwala na asynchroniczne wykonywanie, co pozwala na:

while (True):
    print "hi"

Bez blokowania przeglądarki.

Skulpt jest jedynym, który obsługuje asynchroniczne kontynuacje, pozwala wstrzymać wykonywanie Pythona podczas rozwiązywania asynchronicznych rzeczy. Wykonanie tej pracy:

from time import sleep
sleep(1)

Skulpt działa z mniej więcej jedną dziesiątą szybkości CPythona, porównując pystone.

Brython

Wiem o tym najmniej, być może @ olemis-lang może rozszerzyć ten. Ale obok oczywistej różnicy, że Brython to py3, a inne py2. Brython jest także transpilerem.

Brython nie uruchamia testu porównawczego pystone, ponieważ time.clock nie jest zaimplementowany, ponieważ oficjalnie jest to funkcja sprzętowa.

albertjan
źródło
Programiści PyPyJS wstrzymali rozwój. Również obsługa Python3 wydaje się wciąż niedokończona. github.com/pypyjs/pypyjs/issues/213 i github.com/pypyjs/pypyjs/issues/172
Roland Pihlakas
Nie jest utrzymywany, ale to nie znaczy, że nie działa :) trinket.io/pypyjs, ale obserwuj tę przestrzeń. Jestem prawie pewien, że w końcu coś znowu wybuchnie . Nie możesz też oczekiwać, że oprogramowanie open source będzie utrzymywane, chyba że zrobisz to sam. :)
albertjan
Wydaje mi się, że Trinket z Pythonem 2 działa po stronie przeglądarki, podczas gdy Trinket z Pythonem 3 (i numpy) działa po stronie serwera. Wciąż imponujące jest to, że udaje im się renderować wizualne kreślenie w przeglądarce, mimo że kod działa po stronie serwera. Byłoby bardzo przydatne wiedzieć, jak to osiągnęli. Czy masz jakies pomysły?
Roland Pihlakas
Trinket korzysta z biblioteki GlowScript (glowscript.org), która używa RapydScript-NG do transpozycji Pythona do JavaScript oraz WebGL do tworzenia animacji 3D. Zarówno transpiling, jak i wykonanie są wykonywane w przeglądarce. Oto przegląd architektury GlowScript
user1114907
11

https://brythonista.wordpress.com/2015/03/28/comparing-the-speed-of-cpython-brython-skulpt-and-pypy-js/

Ta strona porównuje trzech kandydatów. Brython wyłania się jako wyraźny zwycięzca.

Pomimo „pomocy” wyjaśniającej, że SO nie nadaje się do tego rodzaju pytań, wydaje się, że w tym przypadku możliwa jest zwięzła odpowiedź.

Może ludzie są zbyt pochopni?

Liczba Pi
źródło
5
Kiedy ostatnio sprawdzałem brythona, nie była to pełna implementacja Pythona. Nie jest również jasne, jak należy mierzyć „najlepsze” lub „jak wybrać między nimi”. Najszybszy? Python w większości nie jest używany do zwiększania szybkości. Implementuje większość funkcji / bibliotek? Mogą istnieć moduły, których nigdy nie użyjesz w przeglądarce. Czy dodatkowa (niekompatybilna z cpythonem) składnia dla typowych operacji (manipulacji drzewami) to plus czy minus? Nie sądzę, aby wyniki w teście porównawczym miały aż tak duże znaczenie.
syntonym
Test porównawczy wydajności jest ważnym czynnikiem, gdy nie jest o 20 - 40% szybszy, ale raczej o około 1000% lepsza w niektórych operacjach. Brython to lżejsza warstwa niż javascript, więc jest inna. Ponadto projekt jest obecnie bardzo zgodny z Python3 - to, co robi, to włączenie do projektu kilku dobrze znanych i dojrzałych bibliotek JavaScript w razie potrzeby, na przykład do obsługi dużych liczb całkowitych.
jsbueno
7

Przede wszystkim jestem komisarzem Brythona. Niemniej jednak postaram się być jak najbardziej bezstronny, aby móc dokonać obiektywnej oceny.

Kiedy ostatnio go użyłem, Skulpt nie obsługiwał funkcji takich jak wyrażenia generatora. Brython i PyPy.js to robią, więc na poziomie funkcji IMHO późniejsze są lepsze.

Brython (w tej chwili) jest nadal w toku. Niektórych modułów nie można zaimportować (np. Xml.ElementTree ). Niemniej jednak sytuacja ta zaczyna się zmieniać, ponieważ pracujemy nad uruchomieniem całego zestawu testów CPython pomimo osiągnięcia pełnej zgodności ze standardami (przynajmniej jeśli ma to sens).

Brython obsługuje również .vfs.js, aby przyspieszyć import modułów.

PyPy.js ma wiele cech, które wynikają bezpośrednio z faktu, że jest on obsługiwany przez PyPy (kompilacja JIT, dobrze przetestowana, ...), ale nie jestem pewien, czy nadaje się do uruchamiania w przeglądarce. Może się to zmienić wraz z rozwojem projektu.

DO ZROBIENIA: Postaram się uzupełnić moją odpowiedź o wiarygodne testy porównawcze.

Olemis Lang
źródło
8
Jako osoba zachęcająca do skulptowania mogę powiedzieć, że obsługuje ona wyrażenia generatora. :)
albertjan
6

Nie wspomniano tutaj o RapydScript ani RapydScript-NG. Tworzą bardzo wydajny kod JavaScript, który jest używany w GlowScript VPython (glowscript.org). Kiedyś korzystałem z oryginalnego RapydScript Alexa Tsepkova ( https://github.com/atsepkov/RapydScript ), ale ostatnio przeszedłem na RapydScript-NG firmy Kovid Goyal ( https://github.com/kovidgoyal/rapydscript-ng ). Niedawno przeprowadziłem test porównawczy Pystone na CPython, RapydScript i Brython, a wyniki możesz zobaczyć tutaj:

https://groups.google.com/forum/?fromgroups&hl=en#!topic/brython/20hAC9L3ayE

user1114907
źródło
Czy mógłbyś podsumować wyniki?
Jay
1
18 czerwca Pierre Quentel powiedział: „OK, jest problem z wydajnością, ale sytuacja się poprawia; wersja, nad którą obecnie pracuję (3.2.7), uruchamia test pystone 2,5 szybciej niż 3.2.6. Nadal jest 15 razy wolniej niż CPython, ale na początku był tysiące razy wolniejszy ”.
user1114907
1
Uruchomiłem test porównawczy pystones za pomocą transpilera rapydscript-ng i przetestowałem 5 razy szybkość CPythona na moim komputerze z systemem Windows 10, 600000 pystones / sec vs. 125000 pystones / sec. Współczynnik około 5-krotnej szybkości CPythona dla rapydscript-ng wzrasta do około 7 razy CPython, jeśli wyłączę przeciążanie operatora, które jest używane w GlowScript VPython, w którym na przykład a + b jest konwertowane na a ["+"] (b) ; ma to na celu umożliwienie łatwej manipulacji wektorami 3D.
user1114907
Nie powiedziałem, że komentarz Quentela odnosi się do Brythona.
user1114907
2
Nie przeprowadziłem więcej testów porównawczych. Początkowo przerzuciłem się na RapydScript-NG, gdy rozwój RapydScript utknął w martwym punkcie. Później, kiedy Alex Tsepkov wrócił do tworzenia, przeprowadziłem z nim rozmowę, w której nawet on zgodził się, że projekt NG Kovida Goyal jest bardziej odpowiedni do mojego konkretnego zastosowania na glowscript.org. Tsepkov chce zbudować mieszany język Python / JavaScript dla programistów internetowych, podczas gdy Goyal kładzie nacisk na przybliżenie standardowego Pythona i zapewnia dobrą obsługę kompilacji w przeglądarce, z których oba są kluczem do mojej pracy.
user1114907
4

Ponieważ nikt o tym nie wspomniał, pomyślałem, że warto wspomnieć o Batavii, która implementuje maszynę wirtualną Pythona do uruchamiania prekompilowanego kodu bajtowego Pythona.

Właśnie go wypróbowałem i chociaż jest to interesująca koncepcja, wciąż znajduje się na wczesnym etapie, ponieważ jest mało dokumentacji.

Ostatecznie będzie to zależeć od tego, co próbujesz zrobić. Po obejrzeniu wybrałem Transcrypt , ponieważ był bardziej pragmatyczny i bardziej wydajny, również niedawno wydany / utrzymywany.

icarito
źródło
Skulpt jest nadal aktywnie utrzymywany i używany przez dość dużą bazę użytkowników (kilka bardzo polularnych kursów na cousera), może nie uzyskać tak wielu wydań, jak transkryptowanie, ale jest znacznie więcej opiekunów, opiekunów, którzy zbudowali na nim produkt. Więc są w tym na dłuższą metę. :)
albertjan
3

To jest zaktualizowana konferencja, która porównuje wszystkie dostępne obecnie opcje na rynku:

https://www.youtube.com/watch?v=2XSeNQyPlTY

Mówcą jest Russell Keith-Magee, który jest znanym deweloperem w okolicy.

Daian Gan
źródło