Seorang pembangun baru-baru ini menguji ciri kebolehoperasian Python baharu Mojo dengan menterjemahkan kod Cython daripada scikit-learn ke dalam Mojo . Eksperimen ini mendedahkan kedua-dua potensi dan batasan semasa penggunaan Mojo sebagai pengganti untuk alat pecutan Python sedia ada.
Ujian ini memfokuskan pada penterjemahan gelung dalaman algoritma pengelompokan DBSCAN daripada scikit-learn , yang pada asalnya ditulis dalam Cython . Algoritma ini melabelkan titik teras dalam kelompok data dan menyebarkan label tersebut kepada titik berjiran - kes klasik di mana Python memerlukan bantuan daripada bahasa yang lebih pantas.
Keputusan Prestasi Menunjukkan Hasil Bercampur
Percubaan terjemahan awal adalah mudah secara mengejutkan, dengan kebanyakan kod Cython berfungsi hampir tidak berubah dalam Mojo berkat sintaks berasaskan Python nya. Walau bagaimanapun, keputusan prestasi menceritakan kisah yang berbeza. Versi pertama berjalan kira-kira 800 kali lebih perlahan daripada pelaksanaan Cython asal, terutamanya kerana Mojo memproses objek Python generik yang tidak dapat dioptimumkan dengan betul.
Selepas beberapa penambahbaikan untuk menukar objek Python kepada jenis data asli Mojo yang dipanggil Spans , prestasi bertambah baik secara dramatik kepada hanya 3 kali lebih perlahan daripada Cython . Walaupun ini mewakili peningkatan yang ketara daripada percubaan awal, ia masih gagal menyamai kelajuan Cython .
Keputusan Perbandingan Prestasi
Pelaksanaan | Prestasi Relatif |
---|---|
Cython Asal | Garis dasar (terpantas) |
Mojo (percubaan awal) | ~800x lebih perlahan |
Mojo (dioptimumkan dengan Spans ) | ~3x lebih perlahan |
Komuniti Membahaskan Pendekatan Alternatif
Komuniti pengaturcaraan telah menunjukkan reaksi bercampur terhadap eksperimen ini. Sesetengah pembangun menunjukkan bahawa Cython sendiri menghadapi cabaran penggunaan, terutamanya pergantungannya pada sistem binaan lama yang dianggap usang oleh ramai pada tahun 2025. Yang lain mencadangkan bahawa alat seperti Numba , Julia , atau Rust dengan PyO3 mungkin alternatif yang lebih baik untuk mempercepatkan kod Python .
Dalam sudut khusus pengkomputeran saintifik saya, ia terasa seperti Cython sebahagian besarnya telah digantikan oleh Numba dan CFFI , atau hanya Julia .
Perbincangan juga menyerlahkan batasan semasa Mojo , termasuk sekatan platform (sokongan Linux terhad pada masa ini), kebimbangan pelesenan, dan fakta bahawa ia masih dalam peringkat pembangunan awal dengan unjuran keluaran 1.0 sekitar 2027.
Alat Pempercepatkan Python Alternatif Yang Disebut
- Numba: Pengkompil JIT untuk Python
- CFFI: Antara Muka Fungsi Asing C untuk Python
- Julia: Bahasa pengaturcaraan berprestasi tinggi
- Rust + PyO3/Maturin: Ikatan Rust untuk Python
- pybind11: Ikatan C++ untuk Python
- ctypes: Perpustakaan Python terbina dalam untuk memanggil fungsi C
Potensi Masa Depan Walaupun Terdapat Batasan Semasa
Walaupun terdapat jurang prestasi, eksperimen ini menunjukkan bahawa menterjemahkan kod pecutan sedia ada kepada Mojo adalah agak mudah. Cabaran utama terletak pada menukar jenis data Python kepada jenis asli Mojo untuk membuka kunci prestasi yang lebih baik. Pembangun mencadangkan bahawa algoritma yang lebih kompleks yang boleh memanfaatkan keupayaan vektorisasi dan GPU Mojo mungkin menunjukkan keputusan yang lebih baik.
Ujian ini hanya mewakili langkah kecil ke arah berpotensi menggantikan bahagian yang lebih besar daripada pangkalan kod Cython scikit-learn dengan Mojo . Memandangkan populariti besar scikit-learn dengan lebih 100 juta muat turun sebulan, sebarang peningkatan prestasi boleh memberi manfaat kepada sejumlah besar pengguna. Walau bagaimanapun, projek bercita-cita tinggi sedemikian mungkin perlu menunggu sehingga Mojo mencapai kematangan dan kestabilan yang lebih besar.