7 poin oleh GN⁺ 2024-11-19 | 1 komentar | Bagikan ke WhatsApp
  • Nova adalah mesin JavaScript dengan ciri desain berorientasi data, yang mengadopsi struktur yang dirancang untuk memaksimalkan performa dan efisiensi cache
    • Secara bersamaan menargetkan pencegahan kerentanan memori dan optimasi performa
  • Fitur utama:
    • Semua data yang dialokasikan di heap JavaScript disimpan dalam vektor berdasarkan jenisnya (angka di vektor angka, string di vektor string, dan seterusnya).
    • Referensi heap diproses sebagai indeks yang dibedakan menurut jenisnya, yang memberikan keamanan memori dan efisiensi ukuran.
    • Objek dibagi menurut jenisnya lalu disimpan dalam vektor (objek umum, array, DataView, dll.).
    • Objek non-umum dirancang untuk merujuk ke data objek umum hanya saat diperlukan.
    • Objek disimpan secara agresif dalam bentuk terpisah untuk menghindari pembacaan data yang tidak digunakan.
  • Masih dalam pengembangan. Mesin ini memiliki fitur yang sangat terbatas sehingga baru lulus sekitar 47% dari rangkaian pengujian test262

1 komentar

 
GN⁺ 2024-11-19
Komentar Hacker News
  • Diskusi tentang pilihan arsitektural memang menarik, tetapi kebanyakan orang tidak punya cukup konteks untuk membandingkannya. Sulit memahami keunggulannya jika dibandingkan dengan arsitektur V8
  • Saya pernah memikirkan proyek seperti interpreter Lisp, dan mengidentifikasi beberapa keunggulan utama
    • Alokasi yang seragam berarti tidak ada celah alignment
    • Keuntungan akses linear dalam garbage collection
    • Indeks yang lebih kecil daripada pointer
    • Indeks yang dibedakan berdasarkan tipe dapat menghemat ukuran
  • Tidak perlu langsung membandingkannya dengan V8. V8 adalah proyek bernilai miliaran dolar
  • Sepertinya bagus juga untuk merujuk ke JS engine buatan Fabrice Bellard
  • Cara alokasi data di V8
    • Semua data dialokasikan ke salah satu dari beberapa bagian heap
    • Referensi heap adalah pointer nyata atau, jika menggunakan pointer compression, offset dari heap base
    • Objek di V8 memuat semua data yang diperlukan, dan sebagian besar disimpan dalam satu alokasi
  • Desain berorientasi data didorong oleh pemahaman tentang cara data akan diakses. Saya penasaran mengapa diasumsikan bahwa akses data yang umum adalah akses linear terhadap objek dengan tipe yang sama
  • "Angka masuk ke vektor angka" bukan pendekatan yang umum. JS engine biasanya memakai NaN-boxing atau small integer inline
  • Saya penasaran apakah penggunaan NaN-boxing pernah dipertimbangkan. Saya juga penasaran apakah vektor per tipe dipadatkan oleh GC, atau mempertahankan free list
  • Saya merekomendasikan membaca "Don’t Stop the BIBOP: Flexible and Efficient Storage Management for Dynamically Typed Languages"
  • Saya penasaran apakah JS engine ini bersifat eksperimental, atau memang mencoba mengimplementasikan seluruh spesifikasi ECMAscript
  • Saya mengikuti proyek Rust Boa, tetapi menurut saya itu masih belum siap untuk produksi
  • Pendekatan berorientasi data dan vektor per tipe cukup berbeda dari arsitektur tradisional seperti V8
    • Performa dalam skenario nyata: saya penasaran apakah ada benchmark yang membandingkan Nova dengan V8 atau SpiderMonkey dalam skenario yang mencakup pola akses data yang kompleks dan non-linear
    • Trade-off dalam garbage collection: saya penasaran apakah pertumbuhan dan pemadatan vektor dapat menyebabkan fragmentasi memori atau bottleneck performa
  • Saya penasaran apakah ada profil aplikasi tertentu yang memang dituju
    • Bisa berguna untuk menyematkan scripting engine ke dalam game
  • Saya penasaran apa arti kata "kind" dalam "kind-specific vectors"
    • Apakah function X(a) { this.a = a; } dan function Y(b) { this.b = b; } dianggap sebagai jenis objek yang berbeda
    • Saat membuat objek dengan literal, apakah {a: 1} dan {b: 2} dianggap sebagai jenis objek yang berbeda