Seorang developer baru-baru ini menguji fitur interoperabilitas Python terbaru dari Mojo dengan menerjemahkan kode Cython dari scikit-learn ke dalam Mojo. Eksperimen ini mengungkap baik potensi maupun keterbatasan saat ini dalam menggunakan Mojo sebagai pengganti tools akselerasi Python yang sudah ada.
Pengujian ini berfokus pada penerjemahan inner loop dari algoritma clustering DBSCAN dari scikit-learn, yang awalnya ditulis dalam Cython. Algoritma ini melabeli core points dalam cluster data dan menyebarkan label tersebut ke titik-titik tetangga - sebuah kasus klasik di mana Python membutuhkan bantuan dari bahasa yang lebih cepat.
Hasil Performa Menunjukkan Hasil yang Beragam
Upaya penerjemahan awal ternyata mengejutkan karena sangat mudah, dengan sebagian besar kode Cython bekerja hampir tanpa perubahan di Mojo berkat sintaks berbasis Python-nya. Namun, hasil performa menunjukkan cerita yang berbeda. Versi pertama berjalan sekitar 800 kali lebih lambat dari implementasi Cython asli, terutama karena Mojo memproses objek Python generik yang tidak dapat dioptimalkan dengan baik.
Setelah beberapa penyesuaian untuk mengkonversi objek Python menjadi tipe data native Mojo yang disebut Spans, performa meningkat secara dramatis menjadi hanya 3 kali lebih lambat dari Cython. Meskipun ini merupakan peningkatan yang signifikan dari upaya awal, masih belum berhasil menyamai kecepatan Cython.
Hasil Perbandingan Performa
| Implementasi | Performa Relatif |
|---|---|
| Cython Original | Baseline (tercepat) |
| Mojo (percobaan awal) | ~800x lebih lambat |
| Mojo (dioptimalkan dengan Spans) | ~3x lebih lambat |
Komunitas Memperdebatkan Pendekatan Alternatif
Komunitas programming menunjukkan reaksi yang beragam terhadap eksperimen ini. Beberapa developer menunjukkan bahwa Cython sendiri menghadapi tantangan adopsi, terutama ketergantungannya pada sistem build lama yang dianggap banyak orang sudah ketinggalan zaman di tahun 2025. Yang lain menyarankan bahwa tools seperti Numba, Julia, atau Rust dengan PyO3 mungkin menjadi alternatif yang lebih baik untuk mempercepat kode Python.
Di sudut khusus saya dalam scientific computing, rasanya seperti Cython sebagian besar telah digantikan oleh Numba dan CFFI, atau hanya Julia saja.
Diskusi ini juga menyoroti keterbatasan Mojo saat ini, termasuk pembatasan platform (saat ini dukungan Linux terbatas), masalah lisensi, dan fakta bahwa masih dalam tahap pengembangan awal dengan proyeksi rilis 1.0 sekitar tahun 2027.
Alat Akselerasi Python Alternatif yang Disebutkan
- Numba: Kompiler JIT untuk Python
- CFFI: C Foreign Function Interface untuk Python
- Julia: Bahasa pemrograman berperforma tinggi
- Rust + PyO3/Maturin: Binding Rust untuk Python
- pybind11: Binding C++ untuk Python
- ctypes: Library bawaan Python untuk memanggil fungsi C
Potensi Masa Depan Meskipun Ada Keterbatasan Saat Ini
Meskipun ada kesenjangan performa, eksperimen ini menunjukkan bahwa menerjemahkan kode akselerasi yang sudah ada ke Mojo relatif sederhana. Tantangan utama terletak pada konversi tipe data Python ke tipe native Mojo untuk membuka performa yang lebih baik. Developer menyarankan bahwa algoritma yang lebih kompleks yang dapat memanfaatkan kemampuan vektorisasi dan GPU Mojo mungkin menunjukkan hasil yang lebih baik.
Pengujian ini hanya merupakan langkah kecil menuju potensi penggantian bagian yang lebih besar dari codebase Cython scikit-learn dengan Mojo. Mengingat popularitas besar scikit-learn dengan lebih dari 100 juta unduhan per bulan, setiap peningkatan performa dapat menguntungkan sejumlah besar pengguna. Namun, proyek ambisius seperti itu kemungkinan perlu menunggu hingga Mojo mencapai kematangan dan stabilitas yang lebih besar.
Referensi: Translating Cython to Mojo, a first attempt
