Mengelola Keadaan dan Menangani Galat
Gunakan lua_pcall untuk pemanggilan terlindungi dan tangani galat di lapisan C.
Mengelola Keadaan dan Menangani Galat adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Beberapa State Lua
Anda dapat menjalankan beberapa instans lua_State dalam proses yang sama. Masing-masing sepenuhnya independen: global terpisah, stack terpisah, dan secara default tidak ada memori bersama.
State Thread
lua_newthread(L) membuat thread anak (coroutine) yang berbagi lingkungan global yang sama, tetapi memiliki stack sendiri. Inilah cara coroutine Lua diimplementasikan dalam C.
Berbagi Data Antar-State
Data tidak dapat diteruskan secara langsung antar-state Lua yang independen. Serialisasikan data menjadi string atau gunakan struktur memori bersama di sisi C yang dapat diakses melalui userdata.
Pemanggilan Terlindungi vs Pemanggilan Mentah
lua_pcall menangkap error (menggunakan setjmp/longjmp di balik layar). lua_call meneruskan error dan menghentikan program. Selalu gunakan lua_pcall dalam produksi.
// Safe:
if (lua_pcall(L, nargs, nresults, 0) != LUA_OK) {
const char *err = lua_tostring(L, -1);
lua_pop(L, 1);
// handle error
}Objek Error
Error di Lua dapat berupa nilai apa pun — tidak hanya string. error({code=404, msg="not found"}) mendorong tabel sebagai error. Kode C membacanya dari stack ketika pcall gagal.
Penangan Panic
Jika error keluar dari pcall (misalnya dari fungsi C yang dipanggil tanpa perlindungan), Lua memanggil penangan panic yang ditetapkan melalui lua_atpanic(L, fn) sebelum menghentikan program.
// C code
lua_atpanic(L, function(lua_State *L) {
fprintf(stderr, "PANIC: %s\n", lua_tostring(L, -1));
exit(1);
return 0;
});Pemulihan Stack saat Error
Setelah error lua_pcall, stack dikembalikan ke keadaan sebelum pemanggilan (dikurangi fungsi dan argumen, ditambah objek error di bagian atas).
Pembersihan State
Selalu tutup state dengan lua_close(L) setelah selesai. Ini memicu semua finalizer __gc dan membebaskan seluruh memori yang dialokasikan.
Keamanan Thread
State Lua tidak aman untuk thread. Jangan pernah memanggil dua fungsi API C pada state yang sama secara bersamaan. Gunakan satu state per thread OS, atau gunakan mutex untuk membuat akses berlangsung secara serial.
Pengalokasi Memori
Secara default, Lua menggunakan realloc. Sediakan pengalokasi khusus dengan lua_newstate(allocFn, ud) untuk pelacakan memori, pembatasan, atau kumpulan memori khusus.
Sandbox dengan Beberapa State
Jalankan kode yang tidak tepercaya dalam state Lua baru yang terisolasi tanpa membuka pustaka standar. Kerusakan atau kehabisan sumber daya apa pun akan terbatas pada state tersebut.
Pertanyaan tentang Penanganan Error
Apa perbedaan antara lua_call dan lua_pcall?
Ringkasan: Mengelola State dan Error
Gunakan lua_pcall (jangan pernah lua_call) dalam produksi. Tetapkan penangan panic untuk pemulihan sebagai upaya terakhir. Gunakan satu state per thread. Gunakan beberapa state terisolasi untuk sandbox. Selalu panggil lua_close untuk melakukan pembersihan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengelola Keadaan dan Menangani Galat” gratis?
Ya — teks lengkap “Mengelola Keadaan dan Menangani Galat” 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 “Mengelola Keadaan dan Menangani Galat”?
Gunakan lua_pcall untuk pemanggilan terlindungi dan tangani galat di lapisan C. 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 4 dari 4.
Berapa lama pelajaran “Mengelola Keadaan dan Menangani Galat” 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
- Model Stack API C Lua
- Memanggil Fungsi Lua dari C
- Mendaftarkan Fungsi C dalam Lua
- Mengelola Keadaan dan Menangani Galat