LLVM Creator Membangunkan Bahasa Pengaturcaraan Mojo Baharu

Chris Lattner, pengasas dan ketua arkitek LLVM dan pencipta bahasa pengaturcaraan Swift, dan Tim Davis, bekas ketua projek AI Google seperti Tensorflow dan JAX, memperkenalkan bahasa pengaturcaraan baharu, Mojo, yang menggabungkan kemudahan penggunaan untuk pembangunan penyelidikan dan prototaip pantas dengan potensi untuk merumuskan produk akhir berprestasi tinggi. Yang pertama dicapai melalui penggunaan sintaks bahasa Python yang biasa, dan yang kedua melalui keupayaan untuk menyusun ke dalam kod mesin, mekanisme selamat memori, dan penggunaan alat pecutan perkakasan.

Projek ini memberi tumpuan kepada penggunaan untuk pembangunan dalam bidang pembelajaran mesin, tetapi dipersembahkan sebagai bahasa tujuan umum yang memperluaskan keupayaan Python dengan alat pengaturcaraan sistem dan sesuai untuk pelbagai tugas. Sebagai contoh, bahasa tersebut boleh digunakan untuk bidang seperti pengkomputeran berprestasi tinggi, pemprosesan data dan transformasi. Ciri menarik Mojo ialah keupayaan untuk menentukan aksara emoji "πŸ”₯" sebagai sambungan untuk fail kod (contohnya, "helloworld.πŸ”₯"), sebagai tambahan kepada sambungan teks ".mojo".

Pada masa ini, bahasa itu berada di peringkat pembangunan intensif dan hanya antara muka dalam talian ditawarkan untuk ujian. Perhimpunan berasingan untuk dijalankan pada sistem tempatan dijanjikan akan diterbitkan kemudian, selepas menerima maklum balas mengenai pengendalian persekitaran web interaktif. Kod sumber untuk pengkompil, JIT dan perkembangan lain yang berkaitan dengan projek itu dirancang untuk dibuka selepas seni bina dalaman siap (model untuk membangunkan prototaip kerja di sebalik pintu tertutup mengingatkan pada peringkat awal pembangunan LLVM, Clang dan Swift). Memandangkan sintaks Mojo adalah berdasarkan bahasa Python, dan sistem jenisnya hampir dengan C/C++, pada masa hadapan mereka merancang untuk membangunkan alatan untuk memudahkan terjemahan projek sedia ada yang ditulis dalam C/C++ dan Python kepada Mojo, serta untuk membangunkan projek hibrid yang menggabungkan kod Python dan Mojo.

Projek ini direka bentuk untuk melibatkan sumber perkakasan sistem heterogen yang tersedia dalam melaksanakan pengiraan. Contohnya, GPU, pemecut pembelajaran mesin khusus dan vektor arahan pemproses (SIMD) boleh digunakan untuk menjalankan aplikasi Mojo dan menyelaraskan pengiraan. Sebab yang diberikan untuk membangunkan subset berasingan bahasa Python dan bukannya menyertai kerja pengoptimuman CPython sedia ada termasuk tumpuan pada penyusunan, penyepaduan keupayaan pengaturcaraan sistem dan penggunaan seni bina dalaman yang berbeza asasnya yang membolehkan kod dijalankan pada GPU dan pelbagai pemecut perkakasan. Walau bagaimanapun, pembangun Mojo berhasrat untuk kekal serasi dengan CPython sebanyak mungkin.

Mojo boleh digunakan dalam mod tafsiran menggunakan JIT dan untuk penyusunan ke dalam fail boleh laku (AOT, lebih awal). Pengkompil mempunyai teknologi moden terbina dalam untuk pengoptimuman automatik, caching dan kompilasi teragih. Teks sumber dalam bahasa Mojo ditukar kepada kod perantaraan peringkat rendah MLIR (Perwakilan Perantaraan Berbilang Tahap), yang dibangunkan oleh projek LLVM dan menyediakan keupayaan tambahan untuk mengoptimumkan pemprosesan graf aliran data. Pengkompil membolehkan anda menggunakan pelbagai bahagian belakang yang menyokong MLIR untuk menjana kod mesin.

Menggunakan mekanisme perkakasan tambahan untuk mempercepatkan pengiraan memungkinkan untuk mencapai prestasi yang lebih baik daripada aplikasi C/C++ semasa pengiraan intensif. Sebagai contoh, apabila menguji aplikasi untuk menjana set Mandelbrot, aplikasi yang disusun dalam bahasa Mojo apabila dilaksanakan dalam awan AWS (r7iz.metal-16xl) ternyata 6 kali lebih pantas daripada pelaksanaan dalam C++ (0.03 saat vs. . 0.20 saat), dan juga 35 ribu kali lebih pantas daripada aplikasi Python apabila menggunakan CPython 3.10.9 standard (0.03 saat lwn. 1027 saat) dan 1500 kali lebih pantas apabila menggunakan PYPY (0.03 saat lwn. 46.1 saat) .

Apabila menilai prestasi dalam bidang menyelesaikan masalah pembelajaran mesin, Enjin Inferens Modular tindanan AI, yang ditulis dalam bahasa Mojo, berbanding penyelesaian berdasarkan perpustakaan TensorFlow, adalah 3 kali lebih pantas apabila memproses model bahasa pada sistem dengan pemproses Intel, 6.4 kali lebih pantas apabila memproses pelaksanaan model penjanaan pengesyoran dan 2.1 kali lebih pantas apabila bekerja dengan model untuk memproses maklumat visual. Apabila menggunakan pemproses AMD, keuntungan apabila menggunakan Mojo ialah 3.2, 5 dan 2.2 kali, dan apabila menggunakan pemproses ARM - masing-masing 5.3, 7.5 dan 1.7 kali. Penyelesaian berasaskan PyTorch ketinggalan di belakang Mojo sebanyak 1.4, 1.1 dan 1.5 kali pada CPU Intel, 2.1, 1.2 dan 1.5 kali pada CPU AMD dan 4, 4.3 dan 1.3 kali pada CPU ARM.

LLVM Creator Membangunkan Bahasa Pengaturcaraan Mojo Baharu

Bahasa ini menyokong penaipan statik dan ciri selamat memori tahap rendah yang mengingatkan Rust, seperti rujukan penjejakan seumur hidup dan pemeriksa pinjaman. Selain kemudahan untuk kerja selamat dengan penunjuk, bahasa ini juga menyediakan ciri untuk kerja peringkat rendah, contohnya, akses terus ke memori dalam mod tidak selamat menggunakan jenis Penunjuk, memanggil arahan SIMD individu atau mengakses sambungan perkakasan seperti TensorCores dan AMX .

LLVM Creator Membangunkan Bahasa Pengaturcaraan Mojo Baharu

Untuk memudahkan pemisahan kod Python klasik dan dioptimumkan untuk fungsi dengan definisi jenis eksplisit untuk semua pembolehubah, adalah dicadangkan untuk menggunakan kata kunci berasingan "fn" dan bukannya "def". Begitu juga untuk kelas, jika anda perlu mengemas data secara statik dalam ingatan semasa penyusunan (seperti dalam C), anda boleh menggunakan jenis "struct" dan bukannya "kelas". Anda juga boleh mengimport modul dalam bahasa C/C++ sahaja, sebagai contoh, untuk mengimport fungsi cos daripada pustaka matematik, anda boleh menentukan "daripada "math.h" import cos".

Sumber: opennet.ru

Tambah komen