Cara menukar Python ke JavaScript (dan kembali lagi)

Python atau JavaScript? Walaupun kami masih berdebat tentang mana yang memiliki kelebihan atau masa depan yang lebih cerah, masih ada sedikit keraguan tentang siapa yang memiliki bahagian depan web. Ini JavaScript dalam penyemak imbas atau apa-apa.

Mungkin bukan  apa-apa.  JavaScript adalah bahasa sasaran kegemaran untuk "transpilers" yang mengubah satu bahasa pengaturcaraan menjadi bahasa lain (lihat: TypeScript, Emscripten, Cheerp, Cor). Pengikut Python yang sangat banyak dan banyak perpustakaan yang ada menjadikannya calon yang bagus untuk ditukarkan, iaitu diubah, menjadi JavaScript.

Berikut adalah empat projek semasa untuk menjadikan Python berguna dalam dunia JavaScript. Seseorang menonjol dengan dapat menukar ke dua arah.

Brython

Salah satu janji yang dibuat oleh WebAss Assembly adalah mengizinkan kami menggunakan bahasa yang kami pilih untuk dikembangkan untuk web, walaupun ini tetap menjadi tujuan yang jauh. Falsafah di sebalik Brython, sekurang-kurangnya sejauh Python 3, mengapa menunggu?

Brython mengimplementasikan versi Python 3 untuk pengaturcaraan web pihak pelanggan melalui pustaka JavaScript yang meniru semua kata kunci dan sebahagian besar bawaan untuk Python 3. Skrip yang ditulis dalam Python dapat disertakan secara langsung dalam laman web. Brython menyediakan antara muka modul Python peringkat tinggi (  browser paket) untuk berinteraksi dengan DOM dan penyemak imbas, iaitu untuk menangani semua kerja yang biasanya dilakukan secara langsung dalam JavaScript.

Banyak contoh kod langsung dan galeri aplikasi mini menunjukkan bagaimana semuanya berfungsi. Bahkan mungkin menggunakan Brython untuk menulis aplikasi Android asli di Python. Fungsi Async tersedia, walaupun anda harus menggunakan asyncmodul Brython dan bukannya Python's asyncio.

Brython tidak terlepas dari sekatan yang dikenakan pada JavaScript di penyemak imbas. Sebagai contoh, tidak ada sokongan untuk menangani sistem fail tempatan. Namun, ada dukungan untuk menggunakan penyimpanan lokal HTML5, jika semua yang Anda perlukan adalah cara untuk mempertahankan data berdasarkan setiap aplikasi.

JavaScripthon

JavaScripthon menumpukan perhatian sepenuhnya pada menterjemahkan kod Python 3.5 dan yang lebih baru ke JavaScript, tanpa berusaha memberikan sokongan penyemak imbas sepenuhnya seperti pada projek seperti Brython. Ini memancarkan kod ES6 untuk meminimumkan keperluan polyfill di sisi penyemak imbas, dan bermain dengan baik dengan alat seperti Webpack dengan menyimpan peta sumber.

Sebilangan besar kata kunci dan tingkah laku umum Python disokong, termasuk asyncdan await, kaedah dan warisan kelas Python 3.6, dan Python. Anda juga dapat memasukkan JavaScript sebaris melalui panggilan fungsi khas, jika anda perlu turun ke JavaScript secara langsung.

Perhatikan bahawa komitmen terakhir untuk projek JavaScripthon adalah pada bulan Mei 2018, jadi belum mendapat sokongan untuk fitur Python terbaru seperti "operator walrus." Tetapi sesiapa yang menggunakan ciri Python 3.6 harus disokong dengan baik.

[Juga pada: 24 perpustakaan Python untuk setiap pembangun Python]

Jiphy

Nama Jiphy adalah singkatan dari "JavaScript in, Python out." Dengan kata lain, Jiphy menukar ke dua arah antara kedua-dua bahasa. Selain itu, kod dari kedua-dua bahasa boleh dicampurkan sebelum ditukarkan ke salah satu bahasa sasaran.

Sebelum anda masuk dan mula menukar semua OpenStack ke JavaScript, perhatikan: Jiphy bukan mengenai penukaran pangkalan data yang lengkap. Sebaliknya, fungsinya adalah, seperti yang dibacakan oleh README, "untuk mengurangkan peralihan konteks yang diperlukan bagi pembangun Python untuk menulis kod JavaScript dan sebaliknya."

Kelemahan terbesar pada Jiphy ialah ia hanya menyokong sebahagian daripada ciri-ciri Python. Tidak ada kelas atau argumen lalai yang tersedia, walaupun penghias dan pengecualian disokong. Sebahagian besarnya adalah kerana Jiphy berusaha untuk mendapatkan hubungan antara baris dengan kod sumber dan sasaran, tetapi pembangunnya telah melihat ciri-ciri baru di ES6 untuk sokongan ciri Python yang lebih maju.

Perhatikan bahawa projek Jiphy belum dikemas kini sejak akhir tahun 2017. Jiphy harus dianggap eksperimen sepenuhnya sehingga kerja di dalamnya disambung semula.

JS2Py

JS2Py menukar JavaScript ke Python, seperti namanya, menggunakan mesin penukaran Python tulen. Ia mempunyai sokongan rasmi hanya untuk ES5 sekarang, walaupun terdapat sokongan eksperimental ES6 untuk yang berani dan berani.

JS2Py menyokong banyak kerjasama antara Python dan JavaScript. Anda boleh mengimport modul Node.js yang ada dalam kod Python anda, dengan js2py.requirekaedah. Pemboleh ubah dari sisi JavaScript dapat dinilai di sisi Python, dan objek Python juga dapat digunakan dari kod JavaScript.

JS2Py juga menyertakan mesin maya yang sangat eksperimental yang menilai kod JavaScript dari Python, tetapi ia belum digalakkan untuk penggunaan pengeluaran.

RapydScript

RapydScript menjanjikan "JavaScript Pythonic yang tidak menghisap." Projek ini serupa dengan CoffeeScript kerana ia menggunakan kod yang ditulis dalam bahasa alternatif - dalam kes ini, rasa Python - dan menghasilkan JavaScript yang dapat berjalan di mana saja. 

Oleh itu, RapydScript memberikan yang terbaik dari kedua-dua dunia, membawa sintaks bersih Python ke kemampuan JavaScript seperti fungsi tanpa nama, manipulasi DOM, dan kemampuan untuk memanfaatkan perpustakaan JavaScript seperti jQuery atau inti Node.js. Betul — anda boleh menggunakan kod yang dihasilkan Rapydscript untuk mendorong halaman web atau aplikasi Node. 

Satu lagi ciri mudah RapydScrypt: Ia menawarkan nomenatur Python dan JavaScript untuk operasi tertentu apabila mungkin. Sebagai contoh, $simbol khas yang digunakan oleh jQuery berfungsi sebagaimana adanya dalam RapydScript, dan tatasusunan dapat menyokong kaedah .push(JavaScript) dan .append(Python).

Transkrip

Sekiranya anda mendengar nama Transcrypt dan berfikir TypeScript, anda tidak jauh dari tanda. Transcrypt mengikuti idea asas yang sama - ia melancarkan Python ke JavaScript. Ia juga berusaha untuk mengekalkan, sedapat mungkin, struktur dan simpulan kod Python yang asal, termasuk konstruksi seperti lambdas dan pelbagai warisan di seluruh kelas.

Lebih-lebih lagi, peta sumber dapat dihasilkan untuk kod transpil yang menunjuk ke Python yang asal, jadi pembangun dapat melakukan debug menggunakan kod tersebut dan bukannya JavaScript yang dihasilkan. Menurut dokumentasi, Transcrypt menyelesaikan tugas-tugas ini dengan modul CPython's Abstract Syntax Tree, yang membolehkan akses program melalui cara Python menguraikan kodnya sendiri.

Salah satu kelebihan terbesar Transcrypt adalah akses automatik ke Model Objek Dokumen (DOM) JavaScript. Sekiranya anda cuba mengakses  document.getElementById di Python, misalnya, kod yang ditukar akan menggunakan yang sebenarnya  document.getElementById dalam JavaScript.

Projek yang berkaitan, dan satu yang masih tersekat, adalah Numscrypt, yang mengangkut perpustakaan matematik dan statistik NumPy ke JavaScript. Setakat ini Numscrypt hanya menyediakan sebahagian daripada ciri-ciri NumPy, walaupun ciri-ciri ini (misalnya matriks matriks) adalah antara yang paling biasa digunakan. Walau bagaimanapun, Numscrypt belum dikemas kini sejak 2018.