Pikiran tentang Karat 2019

Kolega, selamat malam semuanya!

Kami dengan senang hati menawarkan kepada Anda terjemahan dari artikel yang benar-benar terprogram dari Raf Levin , yang karya besarnya tentang pengembangan bahasa Rust membangkitkan rasa hormat dan hormat:



Tanpa kerendahan hati palsu dan tanpa kebencian, seorang penulis yang dihormati secara objektif dan antusias menanggapi permohonan komunitas Rust, yang diterbitkan dengan referensi di awal artikel ini. Kami berharap ini ternyata menarik dan meneguhkan hidup.


Baru-baru ini, Tim Inti Rust mengusulkan penulisan artikel dengan pendapat tentang bagaimana Rust seharusnya tumbuh pada tahun 2019. Ini pendapat saya.

Pematangan siklus hidup

Dalam artikel ini saya akan mempertimbangkan siklus hidup pematangan dalam bentuk yang sangat sederhana. Biarkan itu hanya terdiri dari tiga tahap: penelitian, pengembangan, pemolesan. Berbagai elemen Rust berbeda dalam berbagai tingkat kedewasaannya. Ini penting untuk dipertimbangkan ketika mencoba untuk secara akurat menandai tahap perkembangan bahasa saat ini, dan idealnya, membawanya ke tahap berikutnya. Sebagai contoh, bagi saya tampaknya bahasanya terutama pada tahap "pemolesan". Jika Anda bertahan pada kenyataan bahwa tahap "penelitian" belum selesai, maka bahasa dapat diperkaya dengan tipe dependen, struktur virtual , dll., Yang akan menarik, tetapi kontraproduktif. Kebalikannya juga benar: kita tidak dapat merumuskan dengan tepat apa yang kita lewatkan dalam antarmuka pengguna grafis, sehingga upaya prematur untuk membawa pencarian ini ke solusi standar cenderung menghasilkan hasil yang kurang optimal.

Di banyak produk matang, rilis berganti, beberapa di antaranya dikhususkan untuk menjalankan fitur baru, sementara yang lain dikhususkan untuk stabilisasi. Misalnya, misalnya, adalah sistem tik Intel. Versi Android dari Kat Kit dan Marshmallow stabil, sementara Lollipop aktif menyekop). Pada tahun 2018, Rust diperkaya dengan banyak fitur baru, jadi saya percaya bahwa saatnya telah tiba untuk fase stabilisasi. Dalam hal ini saya setuju dengan Jonathan Turner , serta dengan banyak orang lain.

Bahasa karat

Saya pikir, pada umumnya, bahasa Rust sudah siap. Tampaknya masyarakat telah sepakat tentang kebutuhan untuk "mendarat" fitur-fitur yang masih "on the fly" (dalam pengembangan): kita berbicara tentang async / menunggu, const generics, dan seorang interpreter (yang kemungkinan akan memberi kita revisi) tipe terkait generik ). Namun, saya pikir di atas ini kita tidak boleh terlalu bersemangat dalam mengisi pipa dengan fitur-fitur baru.

Ganti biaya uang. Pada 2018, dua buku bagus telah ditulis tentang Rust, tetapi keduanya sudah sedikit usang. Konvensi untuk jalur yang berkualitas berbeda di dalamnya, sekarang kami menggunakan dyn Trait , dll. Semakin dinamis perubahan, semakin banyak ketidaknyamanan bagi pengguna.

Ada banyak faktor yang membatasi keberhasilan Rust; Saya tidak berpikir bahwa sebagian besar kekurangan ini melekat dalam bahasa itu sendiri.

Tali-temali

Rig Rust bisa jauh lebih baik. Saya bereksperimen dengan RLS, tetapi selalu kembali ke editor teks biasa dan loop baris perintah (jujur, saya belum menetapkan eksperimen seperti ini akhir-akhir ini). Saya pikir dalam jangka panjang diperlukan untuk memodifikasi alat Rust secara signifikan untuk setidaknya meringankan kurva belajar. Saya punya beberapa ide (saya harap ada waktu untuk menjelaskannya secara lebih rinci) tentang bahasa rumah kaca yang lebih, di mana saya tidak yakin di mana itu layak, di mana tidak akan ada perbedaan yang jelas antara nilai dan tautan ke sana, nilainya dapat digunakan setelah pindah, dll. . Pada prinsipnya, bahasa seperti itu akan memungkinkan string diperlakukan sebagai angka. Server menerima program yang ditulis dalam bahasa ini, dengan cepat mengoreksinya dan mengubahnya menjadi Karat lengkap.

Secara alami, RLS hanya setengah sesuai dengan ini, pengguna berinteraksi dengannya melalui editor. Bekerja dengan xi-editor itu mudah, meskipun biasanya memerlukan beberapa panduan dan dukungan. Pekerjaan ini dilakukan oleh komunitas yang dipimpin oleh Colin Rofles , dan saya senang melihat bagaimana editor ini meningkat (sudah menjadi editor utama saya). Ini memberikan dukungan untuk server bahasa, serta fitur-fitur baru, misalnya, mekanisme anotasi umum, yang akan jauh lebih baik diselesaikan pada tahun 2019.

Ekosistem perpustakaan

Karya terpanas sekarang dalam ayunan penuh dalam menciptakan perpustakaan untuk Rust. Di bawah ini saya daftar hal-hal yang saya rencanakan untuk dilakukan sendiri.

Salah satu topik yang ingin saya bahas adalah “koherensi”, yang, menurut pendapat saya, adalah salah satu fitur paling berharga dari Rust, bersama dengan komponen teknis dari sistem tipenya . Banyak komponen "mesin permainan" dalam C ++ adalah pilihan perpustakaan yang disiapkan dengan hati-hati yang saling berinteraksi dengan baik. Tetapi di Rust, banyak dari hal ini terjadi secara organik. Wadah benar-benar biasanya diasah untuk digunakan dalam bundel, dan jika Anda benar menggunakan hal-hal seperti into , maka semakin banyak semakin baik. Contoh yang sangat meyakinkan dari jenis kedua adalah mint , yang memastikan interoperabilitas dari banyak wadah matematika, meskipun konvensi yang digunakan untuk menentukan jenis vektor tidak sesuai di dalamnya.

SIMD

Saya pikir perpustakaan SIMD masih diselidiki. Ada banyak pustaka pembungkus, masing-masing menawarkan perspektif yang sedikit berbeda dan satu set pengorbanan yang berbeda : simdeez , packed_simd , lebih cepat dan, tentu saja, my_simd fearless_simd saya sendiri. Kompromi ini jauh dari tanpa syarat, karena beberapa pengguna perlu memeras semua kinerja dari bahasa ke tetes terakhir dan, jika Anda tertarik pada ekstrem seperti itu, Anda harus menggunakan instruksi terbaik untuk prosesor tertentu. Orang lain akan menghargai portabilitas dan keamanan.

Salah satu bug SIMD yang paling penting adalah bahwa masih banyak pekerjaan yang harus dilakukan dalam kompiler, sebagian besar untuk interaksi dengan AVX-512 dan arsitektur SIMD non-x86. Mungkin juga bahwa perpustakaan pembungkus memerlukan beberapa perubahan pada tingkat bahasa untuk membuat pekerjaan senyaman mungkin; Jadi, saat ini, penyematan dan cfg(target_feature = ...) berinteraksi dengan buruk. Menurut pendapat saya, ini adalah masalah lain yang membutuhkan penelitian. Sangat menarik untuk memahami sejauh mana kita bisa melangkah tanpa dukungan tambahan di tingkat bahasa, dan fitur apa yang akan membantu untuk secara mendasar meningkatkan kenyamanan bekerja dengannya?

Audio

Ada wadah audio tingkat rendah yang nyaman, di antaranya cpal harus sangat diperhatikan. Namun, mungkin ada kesulitan dengan itu di tingkat kinerja (wadah tidak selalu menggunakan aliran waktu nyata), beberapa kemungkinan. Penting untuk menemukan cara optimal: memodifikasi cpal, atau mengembangkan wadah baru yang akan memperbaiki masalah tertentu. Untuk ini, khususnya, Anda harus hati-hati melihat perpustakaan C ++, misalnya, RtAudio , yang memecahkan masalah ini dengan baik.

Untuk sintesis audio tingkat tinggi, saya punya rencana besar untuk mensintesis-rs . Opsi ini tidak cocok untuk semua orang, tetapi saya pikir ini adalah dasar yang baik untuk berbagai teknik sintesis dan efek audio. Tampaknya hari ini bidang pekerjaan ini berada di antara tahap penelitian dan pengembangan.

Untuk menindaklanjutinya, periksa aliran #synthesizer di obrolan Zulip kami. Pada bulan November, saya memberi kuliah tentang ini, atas dasar yang saya rencanakan untuk menulis posting segera.

GUI

Antarmuka pengguna grafis saat ini adalah salah satu poin terlemah dari Rust. Saya pikir pada tahun 2019 kita akan melihat banyak artikel tentang topik ini di komunitas Rust.
Secara pribadi, menurut saya GUI Rostov sekarang harus dikaitkan dengan fase "penelitian". Banyak pendekatan alternatif sedang dikerjakan, dan sejauh ini tidak ada konsensus tentang mana yang terbaik. Seberapa aktif seharusnya grafik 2D dan primitif antarmuka pengguna lainnya digunakan dalam arsitektur sistem, atau haruskah kita mengimplementasikan seluruh tumpukan ini sendiri? Apakah penyebaran ke web diperlukan (menggunakan wasme)? Haruskah seluruh proses pemrograman dianggap "asli-Rust", atau lebih baik beradaptasi dengan konvensi yang ditetapkan dalam beberapa GUI dewasa? Apakah komunitas Rust memiliki sumber daya yang cukup untuk membuat toolkit GUI baru, dan jika demikian, apakah itu layak?

Saya memulai proyek Druid untuk membuat GUI untuk synthesizer dan permainan saya, tetapi proyek ini adalah penelitian. Ini menyajikan sudut pandang saya, jawaban saya untuk semua pertanyaan yang dirumuskan di atas, dan, menurut pendapat saya, proyek ini berkembang dengan baik. Tapi, saya ulangi, ini adalah proyek penelitian, dan akan sangat bodoh pada tahap ini untuk memperkenalkannya ke proyek lain.

Selain itu, sejumlah proyek pengembangan GUI lainnya sedang berlangsung. Menurut pendapat saya, yang paling menjanjikan dari mereka adalah Azul , karena saya suka WebRender sebagai dasar untuk membangun GUI. Proyek lain yang sangat menjanjikan adalah OrbTK , dibuat atas dasar Redox, tetapi lintas platform dan sangat maju. Anda dapat belajar banyak dari contoh-contoh Conrod , ggez , serta pembungkus alat-alat dari bahasa lain.

Tidak mengherankan, aktivitas pengembangan GUI paling intens di Rust terkait erat dengan game, dan menurut saya ini bagus. Inovasi berakar lebih baik di segmen game, dan kebutuhan akan alat yang matang tidak terlalu akut di sini. Tetapi, segera setelah pendekatan yang sangat baik untuk implementasi GUI di Rust muncul, saya pikir itu akan menemukan aplikasi terluas. Saya juga mencatat bahwa Druid saya berasal berdasarkan tingkat GUI dari editor klien xi untuk Windows .

Markup

Perpustakaan pulldown-cmark digunakan dengan cukup baik, khususnya untuk rustdoc, tetapi sudah usang dalam beberapa hal. Evolusinya tidak sejalan dengan pengembangan spesifikasi CommonMark. Salah satu alasannya menjadi sedikit macet adalah dengan algoritma parsing; Saya sudah punya ide bagaimana menulis algoritma baru untuk tujuan ini, jauh lebih baik dari sebelumnya; tapi saya belum mengerjakan detailnya. Baru-baru ini, saya telah kembali ke pekerjaan ini dan sedang bersiap untuk merilis suatu algoritma. Ketika cabang new_algo ditambahkan ke master, saya pikir komunitas harus mengambil pengembangan lebih lanjut, memperkaya dengan fitur baru. Saya sedang memikirkan kompatibilitas GFM penuh, matematika, dan mungkin hal lain seperti itu.

Terima kasih kepada semua orang di komunitas Rust untuk menyelesaikan bahasa yang saya nikmati.

Source: https://habr.com/ru/post/id433910/


All Articles