Menulis Lua yang Ramah JIT
Hindari bail-out JIT: pertahankan tipe tetap, minimalkan perubahan ukuran tabel, dan gunakan variabel lokal.
Menulis Lua yang Ramah JIT adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Mengapa Keramahan terhadap JIT Penting
Kompiler JIT bekerja paling baik pada kode yang stabil jenis dan dapat diprediksi. Jenis dan percabangan yang tidak dapat diprediksi menyebabkan pembatalan jejak dan bailout, sehingga eksekusi kembali ke interpreter.
Jaga agar Jenis Tetap Stabil
Sebuah variabel sebaiknya selalu menyimpan jenis yang sama. Jika variabel bergantian menyimpan bilangan dan string, JIT tidak dapat melakukan spesialisasi dan harus menyisipkan pemeriksaan jenis di setiap tempat.
-- BAD: type unstable
local x = 1
if cond then x = "one" end -- JIT cannot specialize x
-- GOOD: separate variables
local xNum = 1
local xStr = "one"Gunakan Variabel Lokal
Variabel lokal disimpan di stack Lua (dialokasikan ke register oleh JIT). Akses global dan upvalue lebih lambat. Simpan nilai global ke variabel lokal di awal fungsi panas.
local sin = math.sin -- cache as local
for i = 1, 1e6 do
result = sin(i) -- fast local access
endHindari Pengubahan Ukuran Tabel dalam Perulangan
Alokasikan tabel terlebih dahulu sesuai ukuran yang diharapkan. Memperbesar tabel dalam perulangan (melewati batas pangkat dua berikutnya) akan mengalokasikan ulang dan menyalin larik, sehingga merusak jejak JIT.
local t = table.new(1000, 0) -- LuaJIT extension
for i = 1, 1000 do t[i] = i endHindari Pencampuran Larik dan Hash
Pertahankan bagian larik sebagai larik (kunci bilangan bulat mulai dari 1). Mencampurkan kunci bilangan bulat dan string dalam tabel yang sama mencegah optimisasi larik.
Hindari Closure dalam Perulangan Dalam yang Panas
Membuat closure baru pada setiap iterasi mengalokasikan memori dan dapat meningkatkan tekanan pada pengumpul sampah. Alokasikan closure terlebih dahulu di luar perulangan.
-- BAD: closure created every iteration
for i = 1, 1e6 do
local fn = function() return i end -- allocation!
end
-- GOOD: use a local function outside
local function work(i) return i end
for i = 1, 1e6 do work(i) endHindari Pemanggilan Polimorfik
Memanggil objek fungsi yang berbeda melalui titik pemanggilan yang sama (fungsi berbeda pada setiap iterasi) membuat titik pemanggilan polimorfik yang tidak dapat di-inline oleh JIT.
Hindari Fitur NYI (Belum Diimplementasikan)
Beberapa fitur Lua belum diimplementasikan dalam JIT LuaJIT (NYI): string.format dengan beberapa penentu format, pcall di dalam jejak JIT, serta pairs/next. Periksa keluaran jit.v.
jit.v untuk Detail Jejak
Aktifkan keluaran JIT yang terperinci untuk melihat jejak mana yang dikompilasi dan mana yang dibatalkan.
-- Run script with: luajit -jv script.lua
-- Or in code:
jit.attach(function(event, ...)
if event == "abort" then print("ABORT:", ...) end
end, "all")Gunakan Larik Berukuran Tetap
Saat larik memiliki ukuran tetap yang diketahui, mendeklarasikannya sebagai larik C berukuran konstan melalui FFI dapat jauh lebih cepat daripada menggunakan tabel Lua.
Buat Profil Sebelum Mengoptimalkan
Ukur terlebih dahulu. Optimisasi prematur adalah sumber segala masalah. Buat profil untuk menemukan jalur yang benar-benar panas sebelum menghabiskan waktu menulis ulang kode agar ramah terhadap JIT.
Pertanyaan tentang Keramahan terhadap JIT
Mengapa Anda sebaiknya menghindari pembuatan closure di dalam perulangan dalam yang panas?
Ringkasan: Lua yang Ramah terhadap JIT
Jaga jenis tetap stabil, gunakan variabel lokal, alokasikan tabel terlebih dahulu, hindari closure dalam perulangan panas, dan periksa fitur NYI dengan jit.v. Buat profil terlebih dahulu — optimalkan hanya hambatan performa yang telah terbukti.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menulis Lua yang Ramah JIT” gratis?
Ya — teks lengkap “Menulis Lua yang Ramah JIT” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menulis Lua yang Ramah JIT”?
Hindari bail-out JIT: pertahankan tipe tetap, minimalkan perubahan ukuran tabel, dan gunakan variabel lokal. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Menulis Lua yang Ramah JIT” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Gambaran Umum Arsitektur LuaJIT
- Menulis Lua yang Ramah JIT
- Pembuatan Profil dengan jit.p dan perf
- Pola Benchmark