Cara mengonversi Python ke JavaScript (dan kembali lagi)

Python atau JavaScript? Sementara kami masih berdebat tentang mana yang lebih unggul atau masa depan yang lebih cerah, ada sedikit keraguan tentang siapa yang memiliki ujung depan web. Ini JavaScript di browser atau tidak sama sekali.

Yah, mungkin bukan apaapa.  JavaScript adalah bahasa target favorit untuk "transpiler" yang mengubah satu bahasa pemrograman ke bahasa lain (lihat: TypeScript, Emscripten, Cheerp, Cor). Dan banyaknya pengikut Python dan kekayaan pustaka yang tersedia menjadikannya kandidat yang bagus untuk dikonversi, yaitu ditranspilasi, menjadi JavaScript.

Berikut adalah empat proyek saat ini untuk membuat Python berguna di dunia JavaScript. Seseorang menonjol dengan kemampuannya untuk mengkonversi di kedua arah.

Brython

Salah satu janji yang dibuat oleh WebAssembly adalah memungkinkan kami menggunakan bahasa apa pun yang kami pilih untuk dikembangkan untuk web, meskipun ini tetap merupakan tujuan yang jauh. Filosofi di balik Brython, setidaknya sejauh menyangkut Python 3, mengapa harus menunggu?

Brython mengimplementasikan versi Python 3 untuk pemrograman web sisi klien melalui pustaka JavaScript yang mengemulasi semua kata kunci dan sebagian besar bawaan untuk Python 3. Skrip yang ditulis dengan Python dapat disertakan langsung di halaman web. Brython menyediakan antarmuka modul Python tingkat tinggi (  browser paket) untuk berinteraksi dengan DOM dan browser, yaitu untuk menangani semua pekerjaan yang biasanya dilakukan secara langsung dalam JavaScript.

Banyak contoh kode langsung dan galeri aplikasi mini mendemonstrasikan cara kerjanya. Bahkan dimungkinkan untuk menggunakan Brython untuk menulis aplikasi Android asli dengan Python. Fungsionalitas Async tersedia, meskipun Anda harus menggunakan asyncmodul Brython daripada modul Python asyncio.

Brython tidak luput dari pembatasan yang diberlakukan pada JavaScript di browser. Misalnya, tidak ada dukungan untuk menangani sistem file lokal. Namun, ada dukungan untuk menggunakan penyimpanan lokal HTML5, jika yang Anda butuhkan hanyalah beberapa cara untuk menyimpan data per aplikasi.

JavaScripthon

JavaScripthon berfokus secara ketat pada penerjemahan Python 3.5 dan kode yang lebih baru ke JavaScript, tanpa mencoba memberikan dukungan penuh dalam browser sesuai proyek seperti Brython. Ini memancarkan kode ES6 untuk meminimalkan kebutuhan akan polyfill di sisi browser, dan berfungsi dengan baik dengan alat seperti Webpack dengan mempertahankan peta sumber.

Sebagian besar kata kunci dan perilaku umum Python didukung, termasuk asyncdan await, f-string Python 3.6, serta metode dan warisan kelas Python. Anda juga dapat menyisipkan JavaScript sebaris melalui pemanggilan fungsi khusus, jika Anda perlu turun ke JavaScript secara langsung.

Perhatikan bahwa komitmen terakhir untuk proyek JavaScripthon terjadi pada Mei 2018, jadi belum menerima dukungan untuk fitur Python terbaru seperti "operator walrus." Tetapi siapa pun yang menggunakan fitur Python 3.6 harus didukung dengan baik.

[Juga di: 24 pustaka Python untuk setiap pengembang Python]

Jiphy

Nama Jiphy adalah singkatan dari "JavaScript in, Python out". Dengan kata lain, Jiphy bertobat di kedua arah antara dua bahasa. Selain itu, kode dari kedua bahasa dapat dicampur sebelum diubah ke salah satu bahasa target.

Sebelum Anda menyelami dan mulai mengonversi semua OpenStack ke JavaScript, perhatikan: Jiphy bukan tentang konversi basis kode penuh. Sebaliknya, fungsinya adalah, seperti yang dikatakan README, "untuk mengurangi pengalihan konteks yang diperlukan oleh pengembang Python untuk menulis kode JavaScript dan sebaliknya."

Kelemahan terbesar Jiphy adalah ia hanya mendukung sebagian fitur Python. Baik class maupun argumen default tidak tersedia, meskipun dekorator dan pengecualian didukung. Sebagian besar karena Jiphy mengupayakan hubungan baris-ke-baris antara kode sumber dan target, tetapi pengembangnya telah mengamati fitur-fitur baru di ES6 untuk dukungan fitur Python yang lebih canggih.

Perhatikan bahwa proyek Jiphy belum diperbarui sejak akhir 2017. Jiphy harus dianggap benar-benar eksperimental sampai pekerjaannya dilanjutkan.

JS2Py

JS2Py mengubah JavaScript ke Python, seperti namanya, menggunakan mesin konversi Python murni. Ini memiliki dukungan resmi hanya untuk ES5 sekarang, meskipun ada dukungan ES6 eksperimental untuk yang berani dan berani.

JS2Py mendukung banyak interoperasi silang antara Python dan JavaScript. Anda dapat mengimpor modul Node.js yang ada dalam kode Python Anda, melalui sebuah js2py.requiremetode. Variabel dari sisi JavaScript dapat dievaluasi di sisi Python, dan objek Python juga dapat digunakan dari kode JavaScript.

JS2Py juga menyertakan mesin virtual yang sangat eksperimental yang mengevaluasi kode JavaScript dari Python, tetapi belum disarankan untuk penggunaan produksi.

RapydScript

RapydScript menjanjikan "JavaScript Pythonic yang tidak payah". Proyek ini mirip dengan CoffeeScript karena menyerap kode yang ditulis dalam bahasa alternatif - dalam hal ini, rasa Python - dan menghasilkan JavaScript yang dapat berjalan di mana saja. 

Jadi RapydScript memberikan yang terbaik dari kedua dunia, membawa sintaksis bersih Python ke kemampuan JavaScript seperti fungsi anonim, manipulasi DOM, dan kemampuan untuk memanfaatkan pustaka JavaScript seperti jQuery atau inti Node.js. Benar — Anda dapat menggunakan kode yang dihasilkan Rapydscript untuk mendorong laman web atau aplikasi Node. 

Fitur nyaman lainnya dari RapydScrypt: Ia menawarkan nomenklatur Python dan JavaScript untuk operasi tertentu bila memungkinkan. Misalnya, $simbol khusus yang digunakan oleh jQuery berfungsi sebagaimana adanya di RapydScript, dan array dapat mendukung metode .push(JavaScript) dan .append(Python).

Transcrypt

Jika Anda mendengar nama Transcrypt dan berpikir TypeScript, Anda tidak jauh dari sasaran. Transcrypt mengikuti ide dasar yang sama — itu mentransformasikan Python ke JavaScript. Ia juga mencoba untuk melestarikan, sedapat mungkin, struktur dan idiom dari kode Python asli, termasuk konstruksi seperti lambda dan beberapa pewarisan antar kelas.

Terlebih lagi, peta sumber dapat dibuat untuk kode transparan yang mengarah kembali ke Python asli, sehingga pengembang dapat men-debug menggunakan kode itu alih-alih JavaScript yang dihasilkan. Menurut dokumentasi, Transcrypt menyelesaikan tugas-tugas ini dengan modul Pohon Sintaks Abstrak CPython, yang memungkinkan akses programatik ke cara Python mem-parsing kodenya sendiri.

Salah satu keuntungan terbesar Transcrypt adalah akses otomatis ke Document Object Model (DOM) JavaScript. Jika Anda mencoba mengakses  document.getElementById dengan Python, misalnya, kode yang dikonversi akan menggunakan yang sebenarnya  document.getElementById dalam JavaScript.

Proyek terkait, dan yang masih sangat dirahasiakan, adalah Numscrypt, yang memport pustaka matematika dan statistik NumPy ke JavaScript. Sejauh ini Numscrypt hanya menyediakan sebagian dari fitur NumPy, meskipun fitur ini (misalnya, matematika matriks) adalah yang paling umum digunakan. Namun, Numscrypt belum diperbarui sejak 2018.