Sebuah library Entity Component System (ECS) baru untuk Lua yang disebut evolved-lun telah muncul dalam komunitas pengembangan game, memposisikan dirinya sebagai alternatif yang berfokus pada performa dibandingkan solusi yang sudah ada. Library ini bertujuan memberikan konsep evolusi modern kepada pengembang web sambil mempertahankan fleksibilitas untuk aplikasi kompleks melalui integrasi WebAssembly dan dukungan multi-threading.
Fitur Utama Library:
- Penyimpanan komponen Structure of Arrays (SoA) untuk performa
- Integrasi WebAssembly untuk transformasi
- Dukungan multi-threading untuk pemrosesan paralel
- Kalkulasi evolusi incremental
- Dukungan untuk manajemen state yang immutable, mutable, atau hybrid
- React hooks untuk rendering entitas dan fragmen
Klaim Performa Mendapat Sorotan Komunitas
Janji performa inti dari library ini berpusat pada implementasi Structure of Arrays (SoA) untuk penyimpanan komponen. Pendekatan ini menyimpan komponen dalam array yang berurutan, secara teoritis memungkinkan iterasi dan pemrosesan yang lebih cepat. Namun, komunitas telah mengajukan pertanyaan penting tentang apakah manfaat ini benar-benar terwujud dalam lingkungan runtime Lua.
Kekhawatiran utama berkisar pada model memori Lua. Karena elemen array dalam Lua biasanya adalah pointer ke objek yang dialokasikan di heap, pengembang mempertanyakan apakah pendekatan SoA memberikan peningkatan performa yang berarti ketika sistem masih perlu mengikuti pointer untuk mengakses nilai sebenarnya. Perdebatan teknis ini menyoroti tantangan fundamental dalam mengoptimalkan struktur data untuk bahasa yang diinterpretasi.
Beberapa anggota komunitas telah memberikan argumen tandingan, mencatat bahwa LuaJIT memang dapat memperoleh manfaat dari organisasi SoA. Mereka menunjukkan bahwa Lua menggunakan tagged union untuk penyimpanan primitif, memungkinkan beberapa nilai disimpan secara inline dalam tabel. Selain itu, bahkan dengan indirection pointer, SoA dapat mengurangi alokasi memori dan tekanan garbage collection.
Kekhawatiran Transparansi Benchmark
Kesenjangan yang mencolok dalam presentasi library ini adalah tidak adanya benchmark komparatif yang dipublikasikan. Ketika ditanya tentang klaim performa, penulis library mengakui memiliki benchmark internal tetapi mengakui bahwa benchmark tersebut tidak dirancang untuk evaluasi eksternal atau perbandingan dengan library ECS lainnya.
Benchmark komparatif adalah tugas besar tersendiri, dan biasanya library milik penulis yang menang di dalamnya.
Pengakuan jujur ini mencerminkan tantangan umum dalam ekosistem open-source di mana klaim performa sering kali kurang verifikasi independen. Permintaan komunitas untuk benchmark konkret menggarisbawahi pentingnya evaluasi performa yang transparan dalam library teknis.
Alternatif Lua ECS yang Disebutkan:
- tiny-ecs: Library yang sudah mapan (https://bakpakin.github.io/tiny-ecs/doc/)
- JECS: Alternatif yang lebih baru dengan konsep berbasis chunk (https://github.com/Ukendio/jecs)
- evolved-lun: Pendatang baru dengan dokumentasi komprehensif dan fitur scheduler
Kompetisi di Ruang ECS Lua
Library ini memasuki pasar dengan alternatif yang sudah mapan seperti tiny-ecs dan library JECS yang lebih baru. Anggota komunitas yang familiar dengan alternatif ini telah mencatat kesamaan dalam konsep inti, khususnya seputar pemrosesan berbasis chunk. Namun, evolved-lun membedakan dirinya melalui dokumentasi yang lebih komprehensif dan fungsionalitas scheduler bawaan.
Motivasi penulis untuk membuat library ECS lain berasal dari solusi yang ada yang tidak cukup sesuai dengan kebutuhan spesifik mereka, yang merupakan pendorong umum untuk proyek open-source baru. Ini menyoroti bagaimana persyaratan khusus sering mengarah pada diversifikasi ekosistem daripada konsolidasi di sekitar satu solusi tunggal.
Library ini masih dalam tahap awal tanpa proyek yang dipublikasikan menggunakannya, meskipun penulis berencana untuk menampilkannya dalam proyek pribadi yang akan datang. Untuk saat ini, komunitas pengembangan game Lua terus mengevaluasi apakah manfaat performa yang dijanjikan evolved-lun membenarkan adopsi dibandingkan alternatif yang sudah mapan.
Referensi: evolved-lun [work in progress]