Python di Browser: Bagaimana memilih antara Brython, PyPy.js, Skulpt, dan Transcrypt?

91

Saya sangat senang melihat bahwa sekarang mungkin untuk membuat kode Python di browser. Berikut adalah kandidat utama (harap tambahkan yang mungkin telah saya abaikan):

Tapi bagaimana memilih di antara mereka? Satu-satunya perbedaan jelas yang dapat saya lihat adalah Skulpt didasarkan pada Python 2, sedangkan Brython didasarkan pada Python 3.

Harap diperhatikan: Ini bukan permintaan untuk rekomendasi atau opini. Saya mencari fakta obyektif yang akan menginformasikan pilihan terpelajar.

P i
sumber
6
Meminta kami untuk merekomendasikan pustaka terbaik untuk sesuatu adalah salah satu kasus di mana bantuan tersebut secara eksplisit menjelaskan bahwa StackOverflow tidak baik. Ini pertanyaan yang bagus, hanya saja bukan untuk format situs ini; Anda mungkin menginginkan sesuatu yang berbasis diskusi, seperti milis atau forum.
abarnert
2
Transcrypt ( transcrypt.org ) mengkompilasi dari sebagian besar python3.5 inc. multiple inheritance, menghasilkan cepat (call memoizing), kecil, kode yang dapat dibaca, mendukung peta sumber multilevel dan dapat menggunakan JS lib tanpa adaptasi. Penafian: Saya menulisnya.
Jacques de Hooge
1
Hai fzzylogic, saya telah menambahkan tag tersebut, sehingga orang sekarang dapat mengajukan pertanyaan tentang SO menggunakannya. Mengganti tag JS dengan itu, karena itu yang paling tidak mungkin untuk dicari jika Anda lebih suka menggunakan Python di browser.
Jacques de Hooge
1
Saya telah menulis semacam tutorial untuk Transcrypt untuk pemula. Anda dapat melihatnya di github.com/bunkahle/Transcrypt-Examples/blob/master/alerts/… dan github.com/bunkahle/Transcrypt-Examples/blob/master/cookies/…
bunkus
1
Jawaban yang dihapus oleh dstromberg dengan 27 suara positif memiliki tautan perbandingan yang bagus: stromberg.dnsalias.org/~strombrg/pybrowser/python-browser.html
Cees Timmerman

Jawaban:

30

Menjalankan Python di Browser adalah artikel yang sangat bagus dan terbaru (per 2019) yang membandingkan Brython, Skulpt, PyPy.js, Transcrypt, Pyodide, Batavia . Saya sangat merekomendasikan membacanya.

Ringkasan yang bagus bisa dilihat pada gambar berikut.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

laike9m
sumber
62

Berikut beberapa info tentang Brython vs Transcrypt (Juli 2016, sejak Transcrypt ditambahkan sebagai opsi pada pertanyaan ini oleh OP), dikumpulkan dengan memulai proyek dengan Brython beberapa bulan yang lalu dan pindah ke Transcrypt (selesai pindah minggu lalu). Saya suka Brython dan Transcrypt dan dapat melihat kegunaan keduanya.

Untuk orang yang baru mengenal ini, Brython dan Transcrypt keduanya 'transpile' input python ke javascript (Sunting: mungkin lebih baik melihat Brython sebagai 'implementasi Python untuk browser' karena tidak menghasilkan javascript mandiri). Keduanya membutuhkan sintaks Python 3. Brython menyertakan sejumlah besar pustaka standar Python dan beberapa di antaranya sendiri untuk menangani hal-hal terkait web, sedangkan Transcrypt menghindarinya untuk sebagian besar dan menyarankan menggunakan pustaka Javascript sebagai gantinya.

Brython ( Github) dapat melakukan konversi di browser. Jadi Anda menulis dengan python dan mesin brython.js mengubahnya menjadi javascript dengan cepat ketika halaman dimuat. Ini sangat nyaman, dan jauh lebih cepat dari yang Anda kira. Namun, mesin brython.js yang perlu Anda sertakan di halaman Anda berukuran sekitar 500Kb. Juga, ada masalah mengimpor pustaka standar, yang ditangani Brython dengan mengambil file .js terpisah dengan permintaan XHR. Beberapa lib sudah dikompilasi menjadi brython.js, jadi tidak setiap impor akan menarik file baru, tetapi jika Anda menggunakan banyak impor, semuanya bisa menjadi lambat. Namun, ada cara untuk mengatasi ini. Apa yang saya lakukan adalah memeriksa tab jaringan di alat pengembang browser untuk melihat file apa yang ditarik saat halaman dimuat, lalu hapus semua file yang tidak digunakan proyek saya dalam salinan folder src Brython, dan jalankan skrip yang disertakan dengan Brython (menurut saya ada di Brython / www / scripts / make_VFS.py) yang mengkompilasi semua lib yang tersedia menjadi satu file bernama py_VFS.js yang juga perlu Anda tautkan dari html Anda. Biasanya, itu akan membuat satu file besar 2MB +, tetapi jika Anda menghapus hal-hal yang tidak Anda gunakan, itu bisa sangat kecil. Melakukannya dengan cara ini, berarti Anda hanya perlu menarik brython.js, py_VFS.js dan kode python Anda, dan tidak ada permintaan XHR tambahan yang diperlukan.

Transcrypt ( Github ) di sisi lain, didistribusikan sebagai paket python 3yang dapat Anda gunakan secara manual, atau terhubung ke toolchain Anda, untuk mengkompilasi python ke javascript terlebih dahulu. Jadi dengan Transcrypt, Anda menulis dengan python, menjalankan transcrypt terhadap python dan itu mengeluarkan javascript yang dapat Anda tautkan dalam proyek Anda. Ini lebih seperti kompiler tradisional karena menawarkan beberapa kontrol atas output. Misalnya, Anda dapat memilih untuk mengompilasi ke ES6 atau ES5, atau memintanya untuk mengeluarkan peta sumber (bahwa selama debugging biarkan browser membawa Anda langsung ke kode python yang sesuai, selain kode javascript yang dihasilkan.) Output javascript Transcrypt cukup singkat ( atau dengan kata lain, itu cantik dan singkat). Dalam kasus saya, 150kB python diubah menjadi 165kB javascript ES5 tanpa ukuran. Sebagai perbandingan, versi Brython dari proyek saya menggunakan sekitar 800Kb setelah konversi.

Namun, untuk mendapatkan manfaat dari ketegasan Transcrypts, membutuhkan membaca dokumen sedikit (benar-benar hanya sedikit). Misalnya, dengan Transcrypt, 'kebenaran' Python untuk struktur data seperti dict, set, dan list tidak diaktifkan secara default dan mengaktifkannya secara global tidak disarankan karena potensi masalah kinerja terkait dengan pemeriksaan ketik. Untuk kejelasan: Di bawah CPython, sebuah dict, set atau list kosong memiliki nilai kebenaran False, sedangkan di Javascript dianggap 'true' .. Contoh:

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

Setidaknya ada tiga cara untuk mengatasinya:

  • Gunakan tanda -t saat mengonversi python ke javascript misalnya: $ transcrypt -t python.py (tidak disarankan, tetapi mungkin tidak menjadi masalah kecuali Anda memeriksa kebenarannya berkali-kali di loop dalam dari kode sensitif kinerja ..)
  • Gunakan __pragma__(tconv)atau di __pragma__(notconv)dalam kode Anda untuk memberi tahu kompilator transcrypt untuk mengaktifkan konversi otomatis ke nilai kebenaran seperti python secara lokal.
  • Alih-alih memeriksa nilai kebenaran, hindari masalah sama sekali dengan hanya memeriksa len (myList)> 0 ... Mungkin itu akan baik-baik saja untuk sebagian besar situasi, lakukan pekerjaan untuk penggunaan ringan saya.

Benar, jadi proyek saya semakin besar dan saya ingin melakukan pra-kompilasi untuk mendapatkan kinerja tetapi merasa sulit melakukannya dengan Brython (meskipun secara teknis memungkinkan, cara mudah untuk menggunakan editor online dan klik tombol javascript untuk melihat hasil). Saya melakukan itu dan menautkan ke javascript yang dihasilkan dari project.html tetapi tidak berhasil karena beberapa alasan. Juga, saya merasa sulit untuk memahami pesan kesalahan dari Brython sehingga saya tidak tahu harus mulai dari mana setelah langkah ini gagal. Juga, ukuran besar kode yang dikeluarkan dan ukuran mesin brython mulai mengganggu saya. Jadi saya memutuskan untuk melihat lebih dekat Transcrypt, yang pada awalnya tampak memiliki nilai yang lebih tinggi karena saya lebih suka instruksi bodoh yang memberi tahu saya cara memulai segera (ini telah ditambahkan).

Hal utama untuk menyiapkannya setelah menginstal Python3.5 adalah:

  1. Gunakan venv (ini seperti versi virtualenv bawaan baru yang menggunakan lebih sedikit ruang untuk setiap proyek) untuk menyiapkan folder proyek python3.5 (cukup ketik: python3.5 -m venv nama folder - solusi untuk ubuntu dengan masalah paket untuk 3.5 ). Ini membuat 'nama folder' dengan subfolder bin antara lain.
  2. Instal paket Transcrypt python dengan pip ('foldername / bin / pip install transcrypt') yang menginstalnya ke foldername / lib / python3.5 / site-packages / transcrypt.
  3. activateterminal saat ini jika Anda tidak ingin harus mengetikkan path lengkap ke nama folder / bin / python3.5 setiap saat. Aktifkan dengan mengetik: 'nama folder sumber / bin / aktifkan'
  4. Mulailah menulis kode dan kompilasi ke javascript untuk pengujian. Kompilasi dari dalam folder tempat Anda menulis kode Anda. Misalnya, saya menggunakan nama folder / www / proyek. Jadi CD ke folder itu dan jalankan: 'transcrypt -b your_python_script.py'. Itu menempatkan output dalam subfolder yang disebut __javascript__. Anda kemudian dapat menautkan ke javascript yang dikeluarkan dari html Anda.

Masalah utama berpindah

Saya memiliki kebutuhan yang agak sederhana, jadi jarak tempuh Anda mungkin berbeda.

  • Anda perlu mengganti lib standar brython atau python dengan libs javascript. Jadi misalnya 'import json' disediakan oleh Brython, tetapi di bawah Transcrypt Anda dapat menggunakan javascript lib atau hanya menggunakan JSON.parse / JSON.stringify langsung di kode Python Anda. Untuk menyertakan versi perpustakaan javascript yang dikecilkan secara langsung di kode python Anda, gunakan format ini (perhatikan tanda kutip tiga):

    __pragma__ ('js', '{}', '''
    // javascript code
    ''')
    
  • Fungsi spesifik html Brython jelas tidak berfungsi dengan Transcrypt. Cukup gunakan cara javascript biasa. Contoh: 1) di bawah Brython, Anda mungkin merujuk ke tag HTML tertentu menggunakan 'document [' id ']', tetapi dengan Transcrypt Anda akan menggunakan 'document.getElementById (' id ') (yang sama seperti yang Anda lakukan itu dari javascript). 2) Anda tidak dapat menghapus node dengan 'del nodeName' (bcs itu adalah fungsi brython). Gunakan sesuatu seperti 'node.parentNode.removeChild (node)'. 3) ganti semua fungsi DOM brython dengan alternatif javascript. misalnya class_name = className; text = textContent; html = innerHTML; parent = parentNode; children = childNodes dll. Saya kira jika Anda membutuhkan sesuatu yang berisi alternatif yang dibutuhkan oleh beberapa browser lama maka ada perpustakaan javascript untuk itu. 4) Set_timeout Brython diganti dengan javascripts setTimeout 5) Tag html Brython seperti BR () perlu diganti menggunakan cara javascript normal serta mengulang tempat yang Anda gunakan <= dom manipulation syntax. Masukkan markup teks biasa sebagai innerHTML atau buat elemen menggunakan sintaks javascript, lalu lampirkan menggunakan sintaks DOM javascript normal. Saya juga memperhatikan bahwa untuk kotak centang, brython menggunakan "if checkbox = 'memeriksa':" tetapi Transcrypt senang dengan "jika kotak centang:" .. Masukkan markup teks biasa sebagai innerHTML atau buat elemen menggunakan sintaks javascript, lalu lampirkan menggunakan sintaks DOM javascript normal. Saya juga memperhatikan bahwa untuk kotak centang, brython menggunakan "if checkbox = 'memeriksa':" tetapi Transcrypt senang dengan "jika kotak centang:" .. Masukkan markup teks biasa sebagai innerHTML atau buat elemen menggunakan sintaks javascript, lalu lampirkan menggunakan sintaks DOM javascript normal. Saya juga memperhatikan bahwa untuk kotak centang, brython menggunakan "if checkbox = 'memeriksa':" tetapi Transcrypt senang dengan "jika kotak centang:" ..

  • Saya selesai memindahkan proyek 2700 baris selama minggu lalu di mana Transcrypt tidak memiliki dukungan untuk beberapa hal kecil (meskipun cukup mudah untuk diganti dengan pengisi), ini adalah 1) str.lower, str.split (str. split ada, tetapi tampaknya merupakan pemisahan javascript, yang bekerja secara berbeda dengan versi python, perilaku yang saya andalkan), 2) putaran (ini tampaknya didukung dalam versi dev sekarang) dan 3) isinstance tidak tidak bekerja pada str, int dan float, hanya pada dict, list dan set. 4) Perbedaan lain dari Brython yang saya perhatikan adalah bahwa jika saya menarik representasi JSON dari sebuah dict, saya perlu melakukannya menggunakan 'myDict = dict (data)', sedangkan brython senang dengan 'myDict = data'. Tapi itu mungkin terkait dengan sesuatu di json.loads Brython, yang saya ganti langsung dengan JSON.parse.__pragma__('opov')untuk lokal), Anda tidak dapat melakukan hal-hal seperti operasi set menggunakan format kelebihan beban, tetapi perlu menggunakan fungsi yang sesuai. Misalnya

    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) Selain itu, Anda tidak dapat mengulang dicts secara default menggunakan 'for i in dict:', tanpa mengaktifkannya (cmd line -i atau __pragma__('iconv'), tetapi Anda dapat menghindari keharusan untuk mengaktifkannya hanya dengan menggunakan keys () anggota misalnya:

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

Untuk meringkas

  • Saya suka Brython karena mudah untuk menggunakannya dan untuk menguji kode Anda (hanya F5). Ini lebih dekat dengan python sejati karena sebagian besar lib standar ada di sana. Saya tidak suka harus menyertakan mesin transpilasi (Sunting: Atau orang mungkin melihatnya sebagai VM python) di browser dan ukuran javascript keluaran besar. Jika saya harus melakukan banyak hal (tetapi masih menggunakan Brython), saya akan menggunakan metode javascript untuk memanipulasi DOM dari brython (yang dapat Anda lakukan ..), alih-alih banyak bersandar pada metode brython karena itu membuang waktu untuk berpindah ke transpiler lain saat kebutuhan saya berubah.

  • Saya suka Transcrypt karena javascript yang dikeluarkan benar-benar 'ramping dan berarti' dan karena satu-satunya hal yang Anda muat di sisi browser adalah kode javascript yang Anda buat yang ukurannya serupa dengan kode python Anda. Juga karena ia mendukung peta sumber dan karena memberi saya ukuran kendali atas javascript yang dikeluarkan. Dan menggunakannya mengajari saya sedikit tentang pengoptimalan.

Harapan yang membantu seseorang melihat mana di antara ini yang mungkin baik untuk proyek khusus mereka.

fzzylogic.dll
sumber
1
Apakah Anda yakin Brython adalah transpiler? Saya cukup yakin ini mengimplementasikan interpreter Python dalam JavaScript. Jika itu transpiler, Anda tidak perlu memaketkannya dengan aplikasi Anda.
Carl Smith
@Carl Smith Yang menarik, belum pernah terpikir seperti itu. Brython mengubah kode python menjadi javascript, tetapi karena javascript tidak memiliki bytecode standar, mungkin seseorang dapat melihat javascript yang dihasilkan sebagai 'bytecode' untuk mesin Brython.
fzzylogic
1
Anda salah paham. Saya tidak berpikir Brython memindahkan Python ke JavaScript sama sekali. Ini hanya mengimplementasikan interpreter Python di JS, bukan C. Menurut GitHub README mereka "Brython (Browser Python) adalah implementasi Python 3 yang berjalan di browser, dengan antarmuka ke elemen DOM dan event".
Carl Smith
4
@jsbueno Saat ini tersedia seed, randint, choice, dan random, yang dimaksudkan hanya sebagai titik awal. Sebenarnya kami berharap seseorang akan mengambilnya dan menyelesaikannya, sama seperti yang dilakukan untuk ulang, yang berada di urutan teratas dalam daftar kami. Seharusnya tidak terlalu sulit. Jumlah perpustakaan telah berkembang tetapi kontribusinya sangat disambut baik. Sementara aksen akan tetap menggunakan JS libs, saya pribadi akan menyambut lebih banyak standardlibs.
Jacques de Hooge
1
Gambaran yang bagus. Secara keseluruhan apa yang saya lihat sebagai perbedaan utama (yang Anda nyatakan tetapi tidak ditekankan) adalah bahwa tujuan Brython sebenarnya adalah membiarkan Anda menggunakan Python di browser, sedangkan tampaknya tujuan Transcrypt adalah membiarkan Anda menggunakan sintaks Python untuk menulis JavaScript. Ini berarti Transcrypt bersedia melakukan hal-hal seperti perbedaan kebenaran yang menyimpang pada tingkat dasar dari semantik Python, dan juga sepertinya ditujukan pada kode yang memanfaatkan perpustakaan JavaScript; sedangkan Brython mencoba mereplikasi Python sedekat mungkin dengan gagasan bahwa Anda akan melakukan semuanya dengan Python.
BrenBarn
12

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

Halaman ini menjadi tolok ukur ketiga kandidat. Brython muncul sebagai pemenang yang jelas.

Terlepas dari 'bantuan' yang menjelaskan bahwa SO tidak baik untuk pertanyaan semacam ini, tampaknya jawaban yang ringkas dalam kasus ini adalah mungkin.

Mungkin orang-orang terlalu terburu-buru?

P i
sumber
5
Terakhir kali saya memeriksa brython, itu bukan implementasi lengkap python. Juga tidak jelas bagaimana seharusnya mengukur "terbaik" atau "bagaimana memilih di antara ini". Tercepat? Python kebanyakan tidak digunakan untuk kecepatan. Menerapkan sebagian besar fungsi / pustaka? Mungkin ada modul yang tidak akan pernah Anda gunakan di browser. Apakah sintaks ekstra (tidak kompatibel dengan cpython) untuk operasi umum (manipulasi pohon) plus atau minus? Saya tidak berpikir bahwa kinerja dalam tolok ukur itu berarti.
syntonym
Tolok ukur kinerja merupakan faktor penting ketika tidak sekitar 20 - 40% lebih cepat - melainkan sekitar 1000% peningkatan dalam beberapa operasi. Brython adalah lapisan kelas atas di atas javascript, jadi ini berbeda. Juga, proyek ini sangat sesuai dengan Python3 hari-hari ini - yang dilakukannya adalah menggabungkan beberapa perpustakaan Javascript yang terkenal dan matang dalam proyek sesuai kebutuhan, misalnya untuk penanganan bilangan bulat besar.
jsbueno
12

Saya telah menggunakan dan berkomitmen untuk memahat serta pypyjs. Dan ketiganya sangat berbeda sehingga setiap perbandingan bisa diperdebatkan jika Anda bertanya kepada saya.

Itu tergantung pada apa yang Anda cari yang paling masuk akal.

PyPyJS

pypyjs sangat besar, ini adalah file javascript 12MB yang berisi seluruh mesin virtual pypy. Jadi jika Anda ingin kelengkapan implementasi python ini adalah buah hati Anda. Ini memiliki jembatan javascript yang berfungsi sangat baik tetapi itu bukan pilihan yang layak untuk menulis kode situs web javascript Anda dengan python. Namun itu akan membiarkan Anda import compiler.

Itu dibangun dengan emscripten dan lebih cepat dari CPython, dalam menjalankan benchmark pystone.

Saya memberikan ceramah singkat tentang pypyjs di sini adalah slide.

Skulpt

Merupakan alat pengajaran (atau telah berkembang seiring waktu), alat ini mengkompilasi python Anda menjadi mesin negara yang sangat mirip dengan meniru compiler cpython. Pada intinya, ini adalah implementasi compiler python dalam javascript dengan tulisan tangan. Ini memungkinkan eksekusi asinkron yang memungkinkan Anda melakukan:

while (True):
    print "hi"

Tanpa mengunci browser.

Skulpt adalah satu-satunya yang mendukung kelanjutan asinkron, ini memungkinkan Anda menjeda eksekusi python sementara itu menyelesaikan beberapa hal asinkron yang akan terjadi. Membuat ini berhasil:

from time import sleep
sleep(1)

Skulpt berjalan sekitar sepersepuluh dari kecepatan CPython, saat membandingkan pystone.

Brython

Sedikit yang saya tahu tentang yang ini mungkin @ olemis-lang bisa mengembangkan yang ini. Tetapi di samping perbedaan yang jelas bahwa Brython adalah py3 dan yang lainnya py2. Brython juga merupakan transpiler.

Brython tidak menjalankan benchmark pystone karena time.clock tidak diimplementasikan, karena secara resmi ini adalah fungsi perangkat keras.

albertjan.dll
sumber
Pengembang PyPyJS telah menghentikan pengembangan. Juga dukungan Python3 sepertinya masih belum selesai. github.com/pypyjs/pypyjs/issues/213 dan github.com/pypyjs/pypyjs/issues/172
Roland Pihlakas
Itu tidak terawat, tapi bukan berarti tidak berfungsi :) trinket.io/pypyjs tapi perhatikan ruang ini Saya cukup yakin sesuatu akan menggelembung lagi pada akhirnya. Anda juga tidak dapat mengharapkan open source dipertahankan, kecuali Anda melakukannya sendiri. :)
albertjan
Menurut saya, Trinket dengan Python 2 berjalan di sisi browser, sedangkan Trinket dengan Python 3 (dan numpy) berjalan di sisi server. Masih mengesankan bahwa mereka berhasil membuat plotting visual di browser, meskipun kodenya berjalan di sisi server. Akan sangat berguna untuk mengetahui bagaimana mereka mencapai itu. Apakah Anda punya ide?
Roland Pihlakas
1
Trinket menggunakan pustaka GlowScript (glowscript.org) yang menggunakan RapydScript-NG untuk mentranspilasi Python ke JavaScript, dan WebGL untuk menghasilkan animasi 3D. Baik transpiling dan eksekusi dilakukan di browser. Berikut ini ikhtisar arsitektur GlowScript
user1114907
7

Pertama-tama, saya adalah pelaku Brython. Namun demikian, saya akan mencoba untuk bersikap tidak memihak mungkin demi melakukan penilaian yang obyektif.

Terakhir kali saya menggunakannya, Skulpt tidak mendukung fitur seperti ekspresi generator. Brython dan PyPy.js melakukannya, jadi di tingkat fitur IMHO lebih unggul.

Brython (saat ini) masih dalam proses. Beberapa modul tidak dapat diimpor (misalnya xml.ElementTree ). Namun demikian situasi ini mulai berubah karena kami sedang bekerja untuk menjalankan seluruh rangkaian pengujian CPython meskipun telah mencapai kompatibilitas penuh dengan standar (setidaknya jika masuk akal).

Brython juga mendukung .vfs.js untuk mempercepat impor modul.

PyPy.js memiliki sejumlah karakteristik yang mengikuti langsung dari kenyataan bahwa itu didukung oleh PyPy (kompilasi JIT, teruji dengan baik, ...) tetapi saya tidak yakin apakah itu cocok untuk dijalankan di browser. Ini mungkin berubah seiring dengan perkembangan proyek.

TODO: Saya akan mencoba melengkapi jawaban saya dengan tolok ukur yang dapat diandalkan.

Olemis Lang
sumber
8
Sebagai pelaku skulpt, saya dapat memberi tahu Anda bahwa itu mendukung ekspresi generator. :)
albertjan
6

Tidak disebutkan di sini adalah RapydScript atau RapydScript-NG. Mereka menghasilkan kode JavaScript yang sangat efisien, yang digunakan di GlowScript VPython (glowscript.org). Saya dulu menggunakan RapydScript asli Alex Tsepkov ( https://github.com/atsepkov/RapydScript ) tetapi baru-baru ini beralih ke RapydScript-NG dari Kovid Goyal ( https://github.com/kovidgoyal/rapydscript-ng ). Saya baru-baru ini menjalankan benchmark pystone di CPython, RapydScript, dan Brython, dan Anda dapat melihat hasilnya di sini:

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

pengguna1114907
sumber
Bisakah Anda meringkas hasilnya?
Jay
1
Pada tanggal 18 Juni, Pierre Quentel berkata, "Oke, ada masalah kinerja, tetapi semuanya menjadi lebih baik; rilis yang sedang saya kerjakan (3.2.7) menjalankan uji pystone 2.5 lebih cepat dari 3.2.6. Masih 15 kali lebih lambat dari CPython, tetapi pada awalnya itu ribuan kali lebih lambat. "
pengguna1114907
1
Saya menjalankan benchmark pystones menggunakan transpiler rapydscript-ng, dan itu mengukur 5 kali kecepatan CPython di komputer Windows 10 saya, 600.000 pystones / detik vs. 125.000 pystones / detik. Faktor kecepatan CPython sekitar 5 kali lipat untuk rapydscript-ng meningkat menjadi sekitar 7 kali CPython jika saya mematikan operator overloading yang digunakan dalam GlowScript VPython, di mana misalnya a + b diubah menjadi ["+"] (b) ; ini dilakukan untuk memudahkan manipulasi vektor 3D.
pengguna1114907
Saya gagal mengatakan bahwa komentar Quentel mengacu pada Brython.
pengguna1114907
2
Saya belum menjalankan benchmark lagi. Saya awalnya beralih ke RapydScript-NG saat pengembangan RapydScript terhenti. Kemudian, ketika Alex Tsepkov kembali ke pengembangan, saya bertukar pikiran dengannya di mana dia bahkan setuju bahwa proyek NG Kovid Goyal lebih sesuai untuk penggunaan khusus saya di glowscript.org. Tsepkov ingin membuat bahasa campuran Python / JavaScript untuk pemrogram web, sedangkan Goyal menekankan pendekatan Python standar dan memberikan dukungan yang baik untuk kompilasi di browser, keduanya adalah kunci pekerjaan saya.
pengguna1114907
4

Karena tidak ada yang menyebutkannya, saya pikir pantas untuk menyebutkan Batavia yang mengimplementasikan mesin virtual Python untuk menjalankan bytecode Python yang telah dikompilasi.

Saya baru mencobanya dan, meskipun ini konsep yang menarik, ini masih dalam tahap awal karena hanya ada sedikit dokumentasi.

Pada akhirnya itu akan tergantung pada apa yang Anda coba lakukan. Saya memilih Transcrypt setelah melihat-lihat karena lebih pragmatis dan performanya lebih baik, juga lebih baru dirilis / dipertahankan.

icarito
sumber
Skulpt masih secara aktif dipelihara dan digunakan oleh basis pengguna yang cukup besar (beberapa kursus yang sangat polular di cousera) mungkin tidak mendapatkan rilis sebanyak transcrypt, tetapi ada lebih banyak pengelola, pengelola yang membangun produk di atasnya. Jadi mereka ada di dalamnya untuk jangka panjang. :)
albertjan
3

Ini adalah konferensi yang diperbarui yang membandingkan semua opsi yang tersedia di pasar saat ini:

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

Pembicaranya adalah Russell Keith-Magee, yang merupakan pengembang terkenal di daerah tersebut.

Daian Gan
sumber