Tarayıcıda Python: Brython, PyPy.js, Skulpt ve Transcrypt arasında nasıl seçim yapılır?


91

Tarayıcıda Python'u kodlamanın artık mümkün olduğunu görmek beni çok heyecanlandırdı. Bunlar ana adaylardır (lütfen gözden kaçırmış olabileceklerimi ekleyin):

Ama aralarında nasıl seçim yapılır? Görebildiğim tek bariz fark, Skulpt'un Python 2'ye dayanması, Brython'un ise Python 3'e dayanması.

Lütfen unutmayın: Bu bir öneri veya görüş talebi değildir. Eğitimli bir seçimi bilgilendirecek nesnel gerçekleri arıyorum.


6
Bir şey için en iyi kitaplığı önermemizi istemek, yardımın StackOverflow'un iyi olmadığını açıkça açıkladığı durumlardan biridir. Bu harika bir soru, sadece bu sitenin formatı için değil; Muhtemelen posta listesi veya forum gibi tartışmaya dayalı bir şey istiyorsunuz.
abarnert

2
Transcrypt ( transcrypt.org ), python3.5 inc'in büyük bir alt kümesinden derler. çoklu kalıtım, hızlı (çağrı hafızaya alma), küçük, okunabilir kod üretir, çok düzeyli kaynak haritalarını destekler ve uyarlama olmadan herhangi bir JS kitaplığını kullanabilir. Feragatname: Ben yazdım.
Jacques de Hooge

1
Merhaba fzzylogic, etiketi ekledim, böylece insanlar onu kullanarak SO hakkında soru sorabilir. JS etiketini bununla değiştirdi, çünkü tarayıcıda Python kullanmayı tercih ederseniz arama olasılığı en düşük olanıdır.
Jacques de Hooge


1
Dstromberg tarafından 27 olumlu oyla silinen yanıtın güzel bir karşılaştırma bağlantısı var: stromberg.dnsalias.org/~strombrg/pybrowser/python-browser.html
Cees Timmerman

Yanıtlar:


30

Tarayıcıda Python çalıştırmak , Brython, Skulpt, PyPy.js, Transcrypt, Pyodide, Batavia'yı karşılaştıran gerçekten iyi ve güncel (2019 itibariyle) bir makaledir . Okumanızı şiddetle tavsiye ederim.

Aşağıdaki resimlerde iyi bir özet görülebilir.

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin


62

İşte Brython vs Transcrypt (Temmuz 2016, Transcrypt bu soruya OP tarafından bir seçenek olarak eklendiğinden beri), birkaç ay önce Brython ile bir projeye başlayıp Transcrypt'e (geçen hafta taşınması tamamlandı) taşınarak toplanan bazı bilgiler. Brython ve Transcrypt'i seviyorum ve ikisinin de kullanımlarını görebiliyorum.

Bu konuda yeni olan insanlar için, Brython ve Transcrypt python girdisini javascript'e 'transpile' (Düzen: Brython'u 'tarayıcı için bir Python uygulaması' olarak görmek daha iyidir çünkü bağımsız bir javascript üretmez). Her ikisi de Python 3 sözdizimi gerektirir. Brython, önemli sayıda Python standart kitaplığı içerir ve bunlardan bazıları web ile ilgili şeylerle uğraşmak için kendine aitken, Transcrypt bunu çoğunlukla önler ve bunun yerine Javascript kitaplıklarının kullanılmasını önerir.

Brython ( Github) tarayıcıda dönüşümü yapabilir. Yani python'da yazarsınız ve brython.js motoru, sayfa yüklendiğinde onu anında javascript'e dönüştürür. Bu gerçekten kullanışlıdır ve düşündüğünüzden çok daha hızlıdır. Ancak sayfalarınıza eklemeniz gereken brython.js motoru yaklaşık 500Kb'dir. Ayrıca, Brython'un XHR istekleriyle ayrı .js dosyalarını getirerek işlediği standart kitaplıkları içe aktarma meselesi de var. Bazı kütüphaneler zaten brython.js'de derlenmiştir, bu nedenle her içe aktarma yeni dosyaları çekmez, ancak çok sayıda içe aktarma kullanırsanız işler yavaşlayabilir. Ancak bunun etrafından dolaşmanın yolları var. Yaptığım şey, sayfa yüklendiğinde hangi dosyaların çekildiğini görmek için tarayıcı geliştirme araçlarındaki ağ sekmesini kontrol etmek ve ardından Brython src klasörünün bir kopyasında projemin kullanmadığı tüm dosyaları silmek, ve Brython'da bulunan betiği çalıştırın (bence Brython / www / scripts / make_VFS.py'de) mevcut tüm lib'leri py_VFS.js adında html'nizden de bağlamanız gereken tek bir dosyada derler. Normalde, büyük bir 2MB + dosya oluşturur, ancak kullanmadığınız şeyleri silerseniz, oldukça küçük olabilir. Bu şekilde yapmak, yalnızca brython.js, py_VFS.js ve python kodunuzu çekmeniz gerektiği ve ek XHR isteklerine gerek olmadığı anlamına gelir.

Transcrypt ( Github ) ise bir python 3 paketi olarak dağıtılırPython'u önceden javascript'e derlemek için manuel olarak kullanabilir veya araç zincirinize bağlanabilirsiniz. Yani Transcrypt ile, python'da yazarsınız, transcrypt'i python'a karşı çalıştırırsınız ve projenizde bağlanabileceğiniz javascript üretir. Çıktı üzerinde bir miktar kontrol sağlaması açısından daha çok geleneksel bir derleyici gibidir. Örneğin, ES6 veya ES5'e derlemeyi seçebilir veya ondan kaynak haritaların çıktısını vermesini isteyebilirsiniz (hata ayıklama sırasında tarayıcı sizi doğrudan, oluşturulan javascript kodunun içinde, ilgili python koduna götürecektir.) Transcrypt'in javascript çıktısı oldukça kısadır ( veya başka bir deyişle, güzel ve kısa). Benim durumumda 150kB python, 165kB küçültülmemiş ES5 javascript'e dönüştürülür. Karşılaştırma olarak, projemin Brython sürümü dönüşümden sonra yaklaşık 800Kb kullandı.

Bununla birlikte, Transcrypts kısalığının avantajlarından yararlanmak için belgeleri biraz (gerçekten biraz) okumak gerekir. Örneğin, Transcrypt ile Python'un dikte, küme ve liste gibi veri yapıları için 'doğruluğu' varsayılan olarak etkinleştirilmez ve genel olarak etkinleştirilmesi, yazım denetimi ile ilgili potansiyel performans sorunları nedeniyle önerilmez. Netlik sağlamak için: CPython altında, boş bir dikt, küme veya listenin doğruluk değeri False'a sahipken, Javascript'te "doğru" olarak kabul edilir .. Örnek:

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

Bunu ele almanın en az üç yolu vardır:

  • Python'u javascript'e dönüştürürken -t işaretini kullanın, örneğin: $ transcrypt -t python.py (önerilmez, ancak performansa duyarlı kodun iç döngülerinde doğruluğu birçok kez kontrol etmediğiniz sürece muhtemelen bir sorun değildir ..)
  • Transcrypt derleyicisine yerel olarak python benzeri doğruluk değerlerine otomatik dönüştürmeyi açmasını söylemek için __pragma__(tconv)veya __pragma__(notconv)kodunuzun içinde kullanın .
  • Doğruluk değerini kontrol etmek yerine, sadece len (myList)> 0'ı kontrol ederek problemden tamamen kaçının ... Belki çoğu durumda bu iyi olur, işi hafif kullanımım için yapar.

Doğru, projem büyüyordu ve bir performans artışı için önceden derlemek istedim ama Brython ile bunu yapmakta zorlandım (teknik olarak mümkün olsa da, çevrimiçi düzenleyiciyi kullanmanın ve görmek için javascript düğmesini tıklamanın kolay bir yolu çıktı). Bunu yaptım ve project.html'den oluşturulan javascript'e bağlandım ama nedense işe yaramadı. Ayrıca, Brython'dan gelen hata mesajlarını anlamakta zorlanıyorum, bu yüzden bu adım başarısız olduktan sonra nereden başlayacağımı bilmiyordum. Ayrıca, çıkarılan kodun büyüklüğü ve brython motorunun boyutu beni rahatsız etmeye başlamıştı. Bu yüzden Transcrypt'e daha yakından bakmaya karar verdim, çünkü ilk başta daha yüksek dereceli görünüyordu çünkü bana hemen nasıl başlayacağımı söyleyen basitleştirilmiş talimatları tercih ettim (o zamandan beri bunlar eklendi).

Python3.5'i kurduktan sonra kurulumunu sağlayan ana şey şuydu:

  1. Bir python3.5 proje klasörü oluşturmak için venv kullanın (her proje için daha az alan kullanan yeni yerleşik bir virtualenv sürümü gibidir) (sadece şunu yazın: python3.5 -m venv klasör adı - 3.5 için paket sorunları olan ubuntu için geçici çözüm ). Bu, diğer şeylerin yanı sıra bir bin alt klasörü ile 'klasör adı' yapar.
  2. Transcrypt python paketini, onu klasör adı / lib / python3.5 / site-packages / transcrypt'e yükleyen pip ('klasör adı / bin / pip yükleme transcrypt') ile kurun.
  3. activateHer seferinde klasör adı / bin / python3.5'in tam yolunu yazmak zorunda kalmamak için geçerli terminal. Yazarak etkinleştirin: 'kaynak klasör adı / bin / etkinleştirin'
  4. Kodu yazmaya ve test için javascript'te derlemeye başlayın. Kodunuzu yazdığınız klasörün içinden derleyin. Örneğin, klasör adı / www / proje kullandım. O klasöre CD koyun ve şunu çalıştırın: 'transcrypt -b your_python_script.py'. Bu, çıktıyı adlı bir alt klasöre koyar __javascript__. Daha sonra html'nizden çıktısı alınan javascript'e bağlanabilirsiniz.

Baştan aşağı hareket eden ana sorunlar

Oldukça basit ihtiyaçlarım var, bu yüzden kilometreniz değişebilir.

  • Brython veya python standart kitaplıklarını javascript kitaplıklarıyla değiştirmeniz gerekir. Örneğin, 'import json' Brython tarafından sağlanır, ancak Transcrypt altında bir javascript kitaplığı kullanabilir veya doğrudan Python kodunuzda JSON.parse / JSON.stringify kullanabilirsiniz. Bir javascript kitaplığının küçültülmüş bir sürümünü doğrudan python kodunuza eklemek için bu biçimi kullanın (üçlü tırnak işaretlerine dikkat edin):

    __pragma__ ('js', '{}', '''
    // javascript code
    ''')
    
  • Brython'un html'ye özgü işlevleri Transcrypt ile açıkça çalışmıyor. Sadece normal javascript yöntemlerini kullanın. Örnekler: 1) Brython altında, 'document [' id ']' kullanarak belirli bir HTML etiketine başvurmuş olabilirsiniz, ancak Transcrypt ile 'document.getElementById (' id ') (aynı şekilde javascript'ten). 2) 'del nodeName' ile bir düğümü silemezsiniz (bcs bu bir brython işlevi). 'Node.parentNode.removeChild (node)' gibi bir şey kullanın. 3) brython'un tüm DOM işlevlerini javascript alternatifleriyle değiştirin. örneğin, sınıf_adı = sınıfAdı; text = textContent; html = innerHTML; parent = parentNode; children = childNodes vb. Bazı eski tarayıcıların gerektirdiği alternatifleri içeren bir şeye ihtiyacınız varsa, o zaman bunun için javascript kitaplıkları vardır. 4) Brython'un set_timeout'u javascripts setTimeout ile değiştirilir. 5) BR () gibi Brython html etiketlerinin normal javascript yöntemleri kullanılarak değiştirilmesi ve <= dom manipülasyon sözdizimi olan herhangi bir yeri yeniden yapılması gerekir. Düz metin işaretlemesini innerHTML olarak enjekte edin veya öğeleri javascript sözdizimini kullanarak yapın ve ardından normal javascript DOM sözdizimini kullanarak ekleyin. Ayrıca brython'un onay kutuları için "if checkbox = 'işaretli':" kullandığını, ancak Transcrypt'in "eğer onay kutusu:" ile mutlu olduğunu fark ettim .. Düz metin işaretlemesini innerHTML olarak enjekte edin veya öğeleri javascript sözdizimini kullanarak yapın ve ardından normal javascript DOM sözdizimini kullanarak ekleyin. Ayrıca brython'un onay kutuları için "if checkbox = 'işaretli':" kullandığını, ancak Transcrypt'in "eğer onay kutusu:" ile mutlu olduğunu fark ettim .. Düz metin işaretlemesini innerHTML olarak enjekte edin veya öğeleri javascript sözdizimini kullanarak yapın ve ardından normal javascript DOM sözdizimini kullanarak ekleyin. Ayrıca brython'un onay kutuları için "if checkbox = 'işaretli':" kullandığını, ancak Transcrypt'in "eğer onay kutusu:" ile mutlu olduğunu fark ettim ..

  • Geçen hafta 2700 hat projesini taşımayı bitirdim, bu sırada Transcrypt birkaç küçük şeyi desteklemedi (ancak dolgu maddeleri ile değiştirilebilecek kadar kolaydı), bunlar 1) str.lower, str.split (str. split mevcut, ancak davranışına güvendiğim python sürümünden farklı çalışan javascript split gibi görünüyor), 2) round (bu, şu anda geliştirme sürümünde destekleniyor gibi görünüyor) ve 3) isinstance didn str, int ve float üzerinde çalışır, sadece dict, list ve set üzerinde çalışır. 4) Brython'dan fark ettiğim bir diğer fark, bir diktenin JSON temsilini alırsam, bunu 'myDict = dict (data)' kullanarak yapmam gerektiğidir, oysa brython 'myDict = data' ile mutluydu. Ancak bu, Brython'un json.loads dosyasında doğrudan JSON.parse ile değiştirdiğim bir şeyle ilgili olabilir.__pragma__('opov')yerel için), aşırı yüklenmiş formatı kullanarak set işlemleri gibi şeyler yapamazsınız, ancak karşılık gelen işlevleri kullanmanız gerekir. Örneğin

    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) Ayrıca, varsayılan olarak 'for i in dict:' kullanarak dikteleri yineleyemezsiniz, bunu etkinleştirmeden (cmd line -i veya __pragma__('iconv'), ancak sadece () üyesini kullanarak etkinleştirmek zorunda kalmayabilirsiniz , örn:

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

Özetle

  • Brython'u seviyorum çünkü onunla başlamak ve kodunuzu test etmek kolay (sadece F5). Gerçek python'a daha yakın çünkü standart kitaplıkların çoğu orada. Tarayıcıya ve büyük çıktı javascript boyutuna transpilasyon motorunu dahil etmekten hoşlanmıyorum (Düzenleme: Ya da bir python VM olarak görüntülenebilir). İşleri baştan sona yapmak zorunda olsaydım (ama yine de Brython kullanarak), brython yöntemlerine çok fazla yaslanmak yerine DOM'u brython'dan değiştirmek için javascript yöntemlerini kullanırdım (bunu yapabilirsiniz ..) ihtiyaçlarım değiştiğinde başka bir aktarıcıya.

  • Transcrypt'i seviyorum çünkü çıktısı alınan javascript gerçekten 'zayıf ve ortalama' ve çünkü tarayıcı tarafını yüklediğiniz tek şey, boyut olarak python kodunuza benzer olan oluşturulmuş javascript kodunuz. Ayrıca kaynak haritalarını desteklediği ve çıktısı alınan javascript üzerinde bana bir kontrol ölçüsü verdiği için. Ve bunu kullanmak bana optimizasyon hakkında oldukça fazla şey öğretti.

Umarım bu, birinin kendi projeleri için bunlardan hangisinin iyi olabileceğini görmesine yardımcı olur.


1
Brython'un bir aktarıcı olduğundan emin misiniz? JavaScript'te bir Python yorumlayıcısı uyguladığından oldukça eminim. Bir aktarıcı olsaydı, onu uygulamanızla birlikte paketlemenize gerek kalmazdı.
Carl Smith

@Carl Smith İlginç bir nokta, öyle düşünmemiştim. Brython, python kodunu javascript'e dönüştürür, ancak javascript standart bir bayt koduna sahip olmadığından, oluşturulan javascript, Brython motoru için 'bayt kodu' olarak görüntülenebilir.
fzzylogic

1
Beni Yanlış Anladın. Brython'un Python'u JavaScript'e aktaracağını hiç sanmıyorum. Yalnızca C yerine JS'de bir Python yorumlayıcısı uygular. GitHub README'lerine göre "Brython (Tarayıcı Python), DOM öğeleri ve olayları için bir arayüzle tarayıcıda çalışan Python 3'ün bir uygulamasıdır".
Carl Smith

4
@jsbueno Şu anda mevcut olan tohum, randint, seçim ve rastgele, sadece bir başlangıç ​​noktası olarak düşünülmektedir. Aslında, birisinin onu alıp tamamlayacağını umuyoruz, tıpkı listemizde üst sıralarda olan re için yapıldığı gibi. O kadar zor olmamalı. Kütüphanelerin sayısı arttı ama katkılar çok hoş. Aksan JS kitaplıklarını kullanmaya devam edecek olsa da, kişisel olarak daha fazla standart kitap hoşuma gidecek.
Jacques de Hooge

1
Güzel bir genel bakış. Genel olarak temel fark olarak gördüğüm şey (belirttiğiniz ama vurgulamadığınız) Brython'un amacının aslında tarayıcıda Python'u kullanmanıza izin vermek olduğu, buna karşılık Transcrypt'in amacı JavaScript yazmak için Python sözdizimini kullanmanıza izin vermek olduğu. Bu, Transcrypt'in Python anlambiliminden temel düzeyde sapan doğruluk farkı gibi şeyler yapmaya istekli olduğu ve aynı zamanda JavaScript kitaplıklarını kullanan koda yönelik olduğu anlamına gelir; Brython ise her şeyi Python'da yapacağınız düşüncesiyle Python'u olabildiğince yakından kopyalamaya çalışır.
BrenBarn

12

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

Bu sayfa üç adayı karşılaştırıyor. Brython açık bir kazanan olarak ortaya çıkıyor.

SO'nun bu tür sorular için iyi olmadığını açıklayan 'yardım'a rağmen, bu durumda kısa bir yanıtın mümkün olduğu görülmektedir.

Belki insanlar çok aceleci davranıyor?


5
Brython'u en son kontrol ettiğimde tam bir python uygulaması değildi. Ayrıca "en iyi" nin nasıl veya "bunlar arasında nasıl seçim yapılacağı" nın nasıl ölçüleceği açık değildir. En hızlı? Python çoğunlukla hız için kullanılmaz. Çoğu işlevi / kitaplığı uyguluyor mu? Bir tarayıcıda asla kullanmayacağınız modüller olabilir. Genel işlemler (ağaç işleme) için ekstra (cpython ile uyumlu olmayan) sözdizimi bir artı mı yoksa eksi mi? Bir kıyaslamadaki performansın o kadar anlamlı olduğunu düşünmüyorum.
syntonym

Performans kıyaslaması, yaklaşık% 20 -% 40 daha hızlı olmadığında - bazı operasyonlarda yaklaşık% 1000 iyileştirme olduğunda önemli bir faktördür. Brython, javascript'ten daha hafif bir katmandır, bu yüzden farklıdır. Ayrıca, proje bugünlerde Python3 ile çok uyumludur - yaptığı şey, projeye ihtiyaç duyulduğunda, örneğin büyük tamsayı işleme için birkaç, iyi bilinen ve olgun Javascript kütüphanelerini dahil etmektir.
jsbueno

12

Ben de pypyjs kadar skulpt kullandım ve taahhüt ettim. Ve bana sorarsanız, bunların üçü de çok farklı, herhangi bir karşılaştırma tartışmalı.

Hangisinin daha mantıklı olduğuna bağlı.

PyPyJS

pypyjs çok büyük, pypy sanal makinenin tamamını içeren 12MB'lık bir javascript dosyası. Python uygulamasının eksiksiz olmasını istiyorsanız bu sizin bebeğinizdir. Gerçekten iyi çalışan bir javascript köprüsüne sahiptir, ancak javascript web sitesi kodunu python'da yazmak için uygun bir seçenek değildir. Ancak size izin verecektir import compiler.

Emscripten ile oluşturulmuştur ve pystone kıyaslamasını çalıştırmada CPython'dan daha hızlıdır .

Pypyj'ler hakkında kısa bir konuşma yaptım işte slaytlar.

Skulpt

Bir öğretme aracıdır (veya zamanla buna dönüşmüştür), python'unuzu cpython derleyicisini çok yakından taklit eden bir durum makinesinde derler. Özünde, python derleyicisinin javascript'teki el yazısı uygulamasıdır. Aşağıdakileri yapmanıza izin veren eşzamansız yürütmeye izin verir:

while (True):
    print "hi"

Tarayıcıyı kilitlemeden.

Skulpt, eşzamansız sürekliliği destekleyen tek programdır, bazı eşzamansız şeyleri çözerken, python'un yürütülmesini duraklatmanıza izin verir. Bu işi yapmak:

from time import sleep
sleep(1)

Skulpt, pystone'u karşılaştırırken CPython hızının yaklaşık onda biri hızında çalışır.

Brython

En azından bu konuda biliyorum, belki @ olemis-lang bunu genişletebilir. Ancak Brython'un py3 ve diğerlerinin py2 olduğu bariz farkın yanında. Brython aynı zamanda bir aktarıcıdır.

Brython, pystone kıyaslamasını çalıştırmaz çünkü time.clock uygulanmaz, çünkü resmi olarak bir donanım işlevidir.


PyPyJS geliştiricileri geliştirmeyi durdurdu. Ayrıca Python3 desteği hala bitmemiş görünüyor. github.com/pypyjs/pypyjs/issues/213 ve github.com/pypyjs/pypyjs/issues/172
Roland Pihlakas

Devam ettirilmiyor, ama bu işe yaramadığı anlamına gelmiyor :) trinket.io/pypyjs ama bu alanı izleyin, eminim ki bir şeylerin eninde sonunda tekrar patlayacak . Ayrıca, kendiniz yapmadığınız sürece açık kaynağın korunmasını bekleyemezsiniz. :)
albertjan

Bana öyle geliyor ki Python 2 ile Trinket tarayıcı tarafında çalışıyor, Python 3 ile Trinket (ve numpy) sunucu tarafında çalışıyor. Kod sunucu tarafında çalışsa bile, tarayıcıda görsel çizime sahip olmayı başardıkları hala etkileyici. Bunu nasıl başardıklarını bilmek çok faydalı olacaktır. Hiç fikrin var mı?
Roland Pihlakas

1
Trinket, Python'u JavaScript'e aktarmak için RapydScript-NG'yi ve 3D animasyonları üretmek için WebGL'yi kullanan GlowScript kitaplığını (glowscript.org) kullanır. Hem transpiling hem de yürütme tarayıcıda yapılır. GlowScript mimarisine genel bir bakış: vpython.org/contents/VPythonArchitecture.pdf
user1114907

7

Öncelikle ben bir Brython görevlisiyim. Yine de, objektif bir değerlendirme yapmak adına mümkün olduğunca tarafsız olmaya çalışacağım.

Skulpt'ı en son kullandığımda, jeneratör ifadeleri gibi özellikleri desteklemiyordu. Brython ve PyPy.js bunu yapar, bu nedenle IMHO özellik düzeyinde daha sonrası üstündür.

Brython (şu anda) hala devam ediyor. Bazı modüller içe aktarılamaz (örn. Xml.ElementTree ). Bununla birlikte, standartlarla tam uyumluluğa ulaşmamıza rağmen (en azından mantıklı olduğunda) tüm CPython test paketini çalıştırmaya çalıştığımız için bu durum değişmeye başlıyor.

Brython ayrıca modül içe aktarımlarını hızlandırmak için .vfs.js'yi de destekler.

PyPy.js, PyPy (JIT derlemesi, iyi test edilmiş, ...) tarafından desteklendiği gerçeğinden yola çıkan bir dizi özelliğe sahiptir, ancak tarayıcıda çalıştırmaya uygun olup olmadığından emin değilim. Proje geliştikçe bu değişebilir.

TODO: Cevabımı güvenilir ölçütlerle tamamlamaya çalışacağım.


8
Bir yorumcu olarak, jeneratör ifadelerini desteklediğini söyleyebilirim. :)
albertjan

6

Burada bahsedilmeyen RapydScript veya RapydScript-NG'dir. GlowScript VPython'da (glowscript.org) kullanılan çok verimli JavaScript kodu üretirler. Eskiden Alex Tsepkov'un orijinal RapydScript'ini ( https://github.com/atsepkov/RapydScript ) kullanıyordum, ancak yakın zamanda Kovid Goyal'in RapydScript-NG'sine ( https://github.com/kovidgoyal/rapydscript-ng ) geçtim . Yakın zamanda CPython, RapydScript ve Brython'da pystone kıyaslamasını çalıştırdım ve sonuçları burada görebilirsiniz:

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


Sonuçları özetleyebilir misiniz?
Jay

1
18 Haziran'da Pierre Quentel, "Tamam, performans sorunu var, ancak işler daha iyi hale geliyor; şu anda üzerinde çalıştığım sürüm (3.2.7), pystone test 2.5'i 3.2.6'dan daha hızlı çalıştırıyor. Hala 15 CPython'dan kat daha yavaş, ancak ilk günlerde binlerce kat daha yavaştı. "
user1114907

1
Rapydscript-ng aktarıcısını kullanarak pystones kıyaslamasını çalıştırdım ve Windows 10 bilgisayarımda CPython hızının 5 katı, 600000 pystone / sn'ye 125000 pystone / sn kıyaslama yaptı. GlowScript VPython'da kullanılan operatör aşırı yüklemesini kapatırsam rapydscript-ng için CPython hızının yaklaşık 5 katı CPython hızının yaklaşık 7 katına çıkar, örneğin a + b'nin ["+"] (b) 'ye dönüştürülmesi ; bu, 3B vektörlerin kolay manipülasyonuna izin vermek için yapılır.
user1114907

Quentel'in yorumunun Brython'a atıfta bulunduğunu söyleyemedim.
user1114907

2
Daha fazla kıyaslama yapmadım. RapydScript'in gelişimi durduğunda başlangıçta RapydScript-NG'ye geçtim. Daha sonra Alex Tsepkov gelişime döndüğünde onunla bir görüşme yaptım ve kendisi bile Kovid Goyal'in NG projesinin glowscript.org'daki özel kullanımım için daha uygun olduğunu kabul etti. Tsepkov, web programcıları için karma bir Python / JavaScript dili oluşturmak istiyor, oysa Goyal, standart Python'a yaklaşmayı vurguluyor ve tarayıcıda derleme için iyi destek sağlıyor, her ikisi de işimin anahtarı.
user1114907

4

Kimse bahsetmediğinden , önceden derlenmiş Python bayt kodunu çalıştırmak için Python sanal makinesini uygulayan Batavia'dan bahsetmeye değeceğini düşündüm .

Sadece denedim ve ilginç bir konsept olmasına rağmen, çok az dokümantasyon olduğu için hala erken aşamalarda.

Sonunda ne yapmaya çalıştığınıza bağlı olacaktır. Transcrypt'i bir göz attıktan sonra seçtim çünkü daha pragmatik ve daha iyi performans gösteriyordu, ayrıca daha yakın zamanda piyasaya sürüldü / sürdürüldü.


Skulpt, oldukça büyük bir kullanıcı tabanı tarafından hala aktif olarak korunmakta ve kullanılmaktadır (cousera üzerinde çok sayıda çok yönlü kurslar), transcrypt kadar sürümleri almayabilir, ancak üzerinde bir ürün inşa eden çok daha fazla bakımcı, bakımcı vardır. Yani uzun vadede işin içindeler. :)
albertjan

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.