NativeJIT Menunjukkan Potensi Tetapi Menghadapi Cabaran Pembangunan dan Kebimbangan Pengoptimuman

Pasukan Komuniti BigGo
NativeJIT Menunjukkan Potensi Tetapi Menghadapi Cabaran Pembangunan dan Kebimbangan Pengoptimuman

Perpustakaan NativeJIT Microsoft, yang pada asalnya dibangunkan oleh pasukan Bing untuk kompilasi just-in-time berprestasi tinggi, telah mencetuskan perbincangan ketara dalam komuniti pembangun mengenai keadaan semasa dan batasan praktikalnya. Walaupun perpustakaan sumber terbuka ini menjanjikan kompilasi pantas ungkapan ke dalam kod x64 yang dioptimumkan, maklum balas komuniti terkini mendedahkan beberapa kebimbangan tentang trajektori pembangunan dan pelaksanaan teknikalnya.

Ciri-ciri Utama:

  • Perpustakaan kompilasi JIT merentas platform
  • Tiada kebergantungan selain daripada runtime C++ standard
  • Peruntukan daftar yang dioptimumkan
  • Sokongan untuk operasi aritmetik/logik, kondisional, akses medan struktur
  • Keupayaan panggilan fungsi kepada fungsi C

Jurang Antara Versi Dalaman dan Sumber Terbuka

Kebimbangan utama yang dibangkitkan oleh pembangun adalah pemisahan yang jelas antara versi dalaman Microsoft dan kod yang tersedia secara umum. Ahli komuniti telah mendapati bahawa Bing menggunakan versi dalaman NativeJIT yang jauh lebih baik, tetapi penambahbaikan ini tidak digabungkan semula ke dalam repositori GitHub. Ini mewujudkan situasi yang mengecewakan di mana komuniti sumber terbuka tidak dapat memanfaatkan penambahbaikan dunia sebenar yang telah dibangunkan oleh Microsoft untuk kegunaan produksi.

Persoalan Kualiti Penjanaan Kod

Keupayaan penjanaan kod perpustakaan ini telah mendapat perhatian daripada pembangun yang berfokus kepada prestasi. Analisis kod assembly yang dijana mendedahkan output yang tidak optimum, terutamanya berkenaan operasi persediaan dan pembongkaran rangka kerja tindanan yang tidak perlu yang biasanya akan dioptimumkan oleh pengkompil moden. Ini menimbulkan persoalan sama ada NativeJIT memberikan kelebihan bermakna berbanding pendekatan tradisional seperti mengkompil kod dan menggunakan pemuatan dinamik melalui fungsi dlopen atau LoadLibrary.

Perdebatan Reka Bentuk API

Antara muka pengaturcaraan perpustakaan ini telah mencetuskan perdebatan tentang kebolehgunaan dan amalan C++ moden. Walaupun NativeJIT memerlukan pembangun untuk membina ungkapan menggunakan panggilan kaedah seperti expression.Mul(), sesetengah ahli komuniti berhujah untuk sokongan operator overloading yang akan membolehkan sintaks yang lebih semula jadi serupa dengan perpustakaan seperti Eigen atau z3 Python. Ini akan membolehkan pembangun menulis ungkapan menggunakan notasi matematik yang biasa dan bukannya rantai kaedah yang bertele-tele.

Ya, tetapi apa yang saya syak pengulas itu katakan ialah anda boleh membina ungkapan menggunakan operator overloading juga, jadi anda boleh menaip 'a + b', bukan 'a.Add(b)'

Determinisme dan Potensi Caching

Perbincangan teknikal yang menarik telah muncul mengenai sifat deterministik penjanaan kod NativeJIT. Pembangun mempersoalkan sama ada memberikan pokok ungkapan yang sama kepada pengkompil menghasilkan output yang sama bait demi bait merentasi beberapa larian. Jika output adalah deterministik, ini boleh membolehkan strategi memoization yang berkuasa di mana kod yang dikompil boleh dicache dan digunakan semula, meningkatkan prestasi dengan ketara untuk ungkapan berulang.

Penyelesaian Alternatif dan Persaingan

Perbincangan komuniti telah menyerlahkan beberapa pendekatan dan alat yang bersaing dalam ruang kompilasi JIT. Pembangun telah menyebut projek ORC LLVM, Clang-REPL, dan libgccjit sebagai alternatif yang patut dipertimbangkan. Ada yang bahkan mencadangkan bahawa bahasa dengan pelaksanaan JIT yang matang, seperti HotSpot VM Java, mungkin lebih sesuai untuk senario yang memerlukan kompilasi dan pengoptimuman ungkapan masa jalan.

Walaupun NativeJIT mewakili pendekatan yang menarik untuk penjanaan kod masa jalan, maklum balas komuniti menunjukkan bahawa pengguna berpotensi harus menilai dengan teliti sama ada batasan semasanya melebihi faedahnya. Jurang antara versi dalaman dan awam, digabungkan dengan kebimbangan kualiti penjanaan kod, mungkin mendorong pembangun ke arah alternatif yang lebih matang sehingga isu-isu ini ditangani.

Rujukan: NativeJIT