0Pricing
Lua Academy · Pelajaran

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
end

Hindari 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 end

Hindari 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) end

Hindari 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

  1. Gambaran Umum Arsitektur LuaJIT
  2. Menulis Lua yang Ramah JIT
  3. Pembuatan Profil dengan jit.p dan perf
  4. Pola Benchmark
← Kembali ke Lua Academy