- Dalam pengembangan sistem embedded, Lua menawarkan stabilitas dan skalabilitas yang lebih tinggi dibandingkan MicroPython
- Lua memiliki struktur yang mudah diintegrasikan dengan C, ringan, dan deterministik, serta memberikan keuntungan lebih besar dalam kemudahan pemeliharaan kode dan penghematan biaya jangka panjang
- MicroPython cocok untuk prototyping cepat, tetapi menghadapi batasan dalam proyek berskala besar atau lingkungan produksi
- Lua dapat dibangun menjadi berkas eksekusi yang kecil dan efisien, sehingga dapat dijalankan tanpa fitur yang tidak perlu, serta memiliki skalabilitas dan kemudahan pemeliharaan tinggi dari prototyping hingga menjadi produk
- Framework Xedge mengoptimalkan Lua untuk sistem embedded dan menyediakan kemampuan IoT serta web yang kuat
Lua vs. MicroPython di Lingkungan Embedded Profesional
- Dalam proyek embedded profesional seperti otomasi industri, perangkat medis, dan IoT komersial, lingkungan tingkat tinggi namun ringan semakin disukai
- MicroPython unggul untuk prototyping cepat dan deployment di lapangan, tetapi ekosistemnya terutama berpusat pada board hobi/edukasi
- Library besar yang menjadi kekuatan Python seperti NumPy, pandas tidak tersedia di MicroPython, dan standard library-nya juga sangat dipangkas
- Integrasi dengan ekstensi C pada MicroPython juga relatif lebih rumit
- Lua sejak awal mengadopsi filosofi integrasi dengan aplikasi C
- Menyediakan C API yang stabil dan minimalis serta mesin virtual bytecode
- Fungsi dan struktur data C/C++ dapat diekspos ke Lua dengan mudah
- Library ANSI C Lua dirancang untuk embedded, sehingga strukturnya ringkas, ringan, dan deterministik
- MicroPython adalah reimplementasi Python 3, sehingga masih membawa asumsi dari bahasa yang berorientasi desktop dan batasannya cepat terlihat di lingkungan dengan sumber daya terbatas
Integrasi C yang Seamless adalah Inti Lua
- Keunggulan terbesar Lua adalah integrasinya yang mulus dengan C
- API-nya stabil dan minimal, dan fungsi serta struktur data C/C++ milik sendiri dapat diekspos ke Lua dengan mudah
- MicroPython juga mendukung ekstensi C, tetapi memerlukan build firmware kustom dan alur kerjanya lebih kompleks
- Pada Lua, interoperabilitas dengan C memang merupakan filosofi desainnya
- Dapat menggunakan Lua C API secara manual, atau memanfaatkan alat binding otomatis seperti SWIG agar fungsi/struct C bisa dipanggil dari Lua
- Logika yang membutuhkan performa C dapat ditulis dalam C, sedangkan logika bisnis tingkat tinggi dipisahkan ke Lua untuk meningkatkan kemudahan pemeliharaan dan skalabilitas
Jejak Memori Minimal dan Skalabilitas
- Lua memiliki interpreter inti yang sangat kecil, dan fitur yang tidak diperlukan dapat dengan mudah dihapus
- MicroPython juga dioptimalkan untuk embedded, tetapi image default-nya besar, dan ukurannya bertambah saat modul penting diaktifkan
- Keduanya cocok untuk prototyping cepat, tetapi Lua memiliki skalabilitas yang lebih baik hingga tahap produksi
- Lua memudahkan perancangan struktur pemisahan high-level dan low-level, sehingga prototipe dapat dikembangkan cepat lalu ditingkatkan menjadi arsitektur hybrid yang mudah dipelihara
- Lua sejak awal digabungkan dengan kode C sehingga scale-up terasa alami dan alur pengembangan tidak terputus
- Pada MicroPython, setelah prototipe selesai, logika inti mungkin harus ditulis ulang atau akan menemui batasan
Ekosistem dan Aksesibilitas Library - Quality Over Quantity
- MicroPython memiliki ekosistem aktif yang berfokus pada perangkat keras hobi/edukasi seperti board Wi-Fi, tetapi tidak memiliki banyak library utama dari ekosistem Python besar
- Lua memiliki jumlah library yang lebih sedikit, tetapi mudah diperluas dengan C, sehingga lebih jarang terbentur keterbatasan ekosistem
Keunggulan dari Sisi Pemeliharaan dan Biaya
- Lua memiliki codebase yang kecil, serta lebih mudah diuji, di-debug, dan diserahterimakan
- Saat proyek berkembang, pemisahan layer antara skrip Lua dan core C tetap terjaga, sehingga menguntungkan untuk handover dan kolaborasi
- MicroPython juga memiliki keterbacaan tinggi, tetapi semakin besar proyek, semakin cenderung kode sistem dan layer scripting bercampur, sehingga biaya pemeliharaan dapat meningkat
Kesimpulan: Choose What Scales
- Untuk tujuan edukasi dan prototyping, MicroPython tetap merupakan pilihan yang sangat baik
- Untuk produk embedded yang mengutamakan keamanan, keandalan, dan pemeliharaan, Lua lebih praktis karena memberikan skalabilitas, fleksibilitas, dan stabilitas sekaligus
- Lua bukan sekadar bahasa scripting, melainkan strategi pengembangan embedded
Cara Mengintegrasikan Library C Lua di Perangkat Embedded
- Library C Lua ringan, kompatibel dengan ANSI C, dan hampir tidak memiliki dependensi selain standard C library
- Cocok untuk bare metal dan sistem berbasis RTOS, meski beberapa elemen standar C seperti stdin/stdout perlu diperhatikan saat proses porting
-
Xedge Framework dari Real Time Logic
- Xedge Framework menyediakan runtime Lua dan kumpulan API yang dioptimalkan untuk lingkungan embedded
- Fitur IoT/web bawaan mencakup komunikasi aman seperti TLS, MQTT5, WebSocket, layanan web RESTful, pemrosesan data real-time, serta protokol Modbus/OPC UA
- Sambil mempertahankan fleksibilitas dan sifat ringan Lua, framework ini juga menyediakan framework embedded lengkap yang siap digunakan di lingkungan nyata
- Jika ingin menanamkan Lua ke dalam produk embedded, Xedge adalah pilihan yang paling praktis karena menyederhanakan integrasi, mempercepat pengembangan, dan memungkinkan fokus pada logika yang benar-benar membedakan produk
2 komentar
Sejak awal, vendor pembuat komponen untuk memproduksi perangkat pun umumnya tidak terlalu mendukung Lua maupun Python. Paling banter C?
Opini Hacker News
Saat memutuskan membuat game engine dan menulis seluruh game dalam bahasa scripting, sempat mempertimbangkan tiga opsi: JavaScript (QuickJS), Python (Boost.Python), dan Lua (Sol2)
Menanamkan Lua sangat mudah, dan bahkan jika dipakai bersama wrapper C++ pun tetap sangat praktis
Dalam waktu singkat, sudah bisa punya engine yang terasa 'ini sudah siap langsung dipakai'
Selain itu, Lua VM juga sangat ringan
Detailnya bisa dilihat di proyek carimbo
Saya suka fakta bahwa kalau sebuah engine atau aplikasi mendukung Lua sebagai script, maka kita juga bisa memakai Fennel
Fennel adalah bahasa yang ditranspilasi ke Lua
Tautan resmi Fennel
Secara pribadi, saya merasa Boost.Python kurang bagus sebagai alat scripting
Menurut saya ini juga bisa memengaruhi penilaian
Saya penasaran apakah Sol2 itu Lua VM, atau cuma wrapper untuk Lua VM standar
Saya merasa sulit menerima frasa 'Lua bukan sekadar bahasa tingkat tinggi sederhana, melainkan strategi pengembangan embedded'
Tulisan yang memakai ungkapan seperti ini sulit dianggap serius
Secara keseluruhan, ini terasa seperti tulisan 'saya sudah lama memakai Lua, jadi sekarang saya bisa menyimpulkan'
Penulis tampaknya tidak punya banyak pengalaman nyata dengan MicroPython, tetapi tetap melontarkan beberapa kritik yang terkesan berlebihan
Misalnya, klaim bahwa "proyek MicroPython mencampur kode sistem dan lapisan script sehingga sulit dirawat" terasa lemah dasarnya
Itu bisa saja dipengaruhi oleh bahasa yang dipakai atau cara pengelolaan proyek/perancangan struktur, jadi menurut saya penyebabnya perlu dievaluasi dengan lebih ketat
Tulisan ini terasa lebih seperti iklan framework Xedge daripada artikel yang sebenarnya
Ini cuma iklan
Secara umum, gaya tulisannya terasa seperti chatgpt
Untuk tulisan iklan, mau ditulis manusia atau LLM tampaknya tidak terlalu penting
Seperti juga disebut di komentar-komentar, karena terasa seperti chatgpt saya jadi kurang menikmati membaca artikelnya
Di daftar PLDB Top 1000, Lua berada di peringkat lebih tinggi daripada MicroPython
Dalam tulisan perbandingan ini, pengguna Github SkipKaczinksi menilai Lua umumnya lebih cepat
Michael Polia dalam artikel Hackaday juga menyebut Lua kecil dan cepat
Bahasa Toit mengklaim 30 kali lebih cepat daripada MicroPython
Pendiri Toit adalah salah satu penanggung jawab awal pengembangan V8
Konsep "embedded" dan "embeddable" perlu dibedakan
MicroPython dipakai di platform embedded, tetapi bukan 'runtime yang embeddable' yang bisa diintegrasikan ke aplikasi yang sudah ada seperti Lua
Tujuan MicroPython adalah menggantikan runtime C tradisional, sehingga cukup diinisialisasi dengan wrapper C minimal lalu sisa logika bisnis ditulis sebagai script MicroPython
Tidak ada struktur seperti
lua_Statedi Lua yang memungkinkan banyak interpreter berjalan bersamaan atau sandboxingDengan kata lain, MicroPython lebih cocok untuk 'membaca data sensor dengan Python di board IoT' daripada 'pengembangan iteratif cepat dengan scripting di dalam game engine'
Tidak bisa langsung dipakai begitu saja, dan tetap perlu sedikit glue code
Sebagai referensi, lihat contoh port embed
Saya juga menganggap Lua bahasa yang sangat bagus untuk penggunaan embedded
Saya juga menilai produk berbasis Lua bagus, tetapi tulisan ini kurang meyakinkan dalam menjelaskan 'mengapa Lua mengalahkan MicroPython'
Memperluas MicroPython dengan C ternyata lebih mudah daripada yang dibayangkan, dan modul eksternal bisa dikembangkan dengan cara yang sama seperti modul resmi
Jadi saat membuat custom build firmware, modul seperti itu bisa ditambahkan tanpa terlalu sulit
Lalu ada kritik bahwa library ekosistem Python seperti numpy tidak bisa dipakai, tetapi kenyataannya ada juga library ulab yang mengimplementasikan ulang sebagian numpy dan scipy
Dari sudut pandang saya, ini terdengar seperti kalimat pemasaran
Jika mikrokontroler punya resource yang cukup, saya pakai micropython
Kalau kontrol daya, memori, dan CPU benar-benar penting, pada akhirnya saya pakai C/C++
Pengembangan terkait jaringan memang sulit di C/C++, tetapi dulu opsinya sedikit untuk melakukan itu dengan cepat dan aman (meski belakangan dukungan TLS bawaan mungkin sudah jauh lebih baik)
Lua terasa seperti pembungkus halus di atas C
Akan bagus kalau library-nya kaya, tetapi bebannya besar karena harus mem-porting sendiri toolchain Lua, toolchain mikrokontroler, dan semua library yang dibutuhkan
Jadi kalau ini memang tulisan pemasaran, menurut saya pesannya adalah pakailah produk Xedge dan serahkan pekerjaannya ke pihak luar
Saya penasaran apakah benar ada orang yang memakai micropython atau lua untuk pengembangan embedded secara 'serius'
Selama hampir 20 tahun saya bekerja lepas membuat produk embedded berbasis Lua
Saya memakai Lua di berbagai bidang seperti perangkat VOIP, otomasi rumah, router industri, dan perekam video digital
Biasanya sistem terdiri dari kernel Linux, libc, interpreter Lua, dan beberapa library eksternal
Kode sumber aplikasi Lua biasanya sekitar 30 ribu sampai 100 ribu baris, dan menurut standar sekarang bahkan ada produk yang tergolong 'kecil' (flash 8MB, RAM 64MB, dan sebagainya)
Lua berjalan sangat baik di lingkungan seperti ini
Semua ini adalah produk aktif yang benar-benar menghasilkan uang bagi pelanggan
Integrasi Lua dan C sangat mudah, dan untuk pekerjaan asinkron pun Lua sudah lama menyelesaikan hal-hal yang sampai sekarang masih dipikirkan bahasa modern
Bahasanya sederhana tetapi kuat, dan dengan coroutine, closure, metatable, dan sebagainya, banyak paradigma bisa dipakai
Untuk proyek dengan skala seperti ini, saya masih akan memilih kombinasi Lua + C/C++
Saya juga sudah mencoba ekosistem lain seperti Elixir, Rust, dan Nim, tetapi belum menemukan bahasa yang sekuat dan sefleksibel Lua
Kami bahkan mengembangkan perangkat medis kelas B dengan MicroPython
Dunia embedded itu cakupannya sangat luas
Kalau menyangkut keselamatan, aturan bisa melarangnya, tetapi untuk alat uji dan sejenisnya yang tidak terlalu terikat regulasi, orang akan memakai apa yang paling nyaman
Di ranah IoT juga pada dasarnya semua orang memakai apa yang paling praktis bagi mereka
MicroPython juga benar-benar dipakai dalam misi satelit seperti cubesat
Ada juga contoh terkait di konferensi dan podcast
Ribuan produk memakai Lua secara internal, atau setidaknya di sebagian komponennya
Saya juga baru-baru ini melihat lagi LuaJIT dan merasa itu terlalu diremehkan
Saya rasa 'pengembang embedded yang serius' kebanyakan memakai bahasa terkompilasi
Untuk hobi saya cukup memakai Arduino (Platformio)
Di mikrokontroler, proses compile dan flash cepat sekali, jadi sebenarnya tidak terlalu perlu interpreter
Saya juga ingin suatu hari mencoba bahasa terkompilasi lain yang bisa menggantikan C++
Saya penasaran apakah ada bahasa yang direkomendasikan dan berjalan baik di Raspberry Pi Pico
Saya bukan ahli, tetapi rasanya Rust adalah salah satu alternatif yang paling populer
Ini terasa trendi, banyak memperbaiki masalah C++, dan tooling-nya juga lumayan bagus
Zig juga terlihat menarik dan ingin saya coba
Raspberry Pi punya spesifikasi yang cukup bagus, jadi bahasa non-sistem pun masih bisa berjalan
Saya juga suka Kotlin, dan walau pada dasarnya butuh JVM, build native juga memungkinkan
Hanya saja, untuk mengendalikan GPIO di Pico mungkin perlu langsung menyentuh filesystem (tambahan lagi, saya tidak yakin dukungan Kotlin di Pico benar-benar ada)
Nim tampak seperti opsi yang cukup bagus
Untuk referensi terkait, lihat dukungan Nim di picostdlib
Lua pada dasarnya adalah bahasa yang jauh lebih sederhana
Python punya keyakinan 'hanya ada satu cara', tetapi dalam praktiknya justru terasa seperti 'alat serbaguna' yang memasukkan segala macam hal
Ini memang membuatnya lebih mudah untuk mulai dan lebih kaya library sehingga pengembangan jadi lebih gampang
Tetapi itu kurang cocok untuk lingkungan yang resource-nya terbatas
Ada batas untuk seberapa jauh kursi mewah bisa dipaksa berubah menjadi kursi Eames yang terbuat dari papan
Python itu mudah, sedangkan Lua itu sederhana
Masalah dengan 'mudah' adalah kompleksitas internalnya disembunyikan, sementara 'sederhana' berarti pengguna harus berusaha lebih banyak
Kompatibilitas versi Python rapuh, sehingga saat berpindah dari 3.x ke 3.x+1 sering muncul masalah
Lua juga tidak sempurna, tetapi setidaknya banyak kasus yang mendukung beberapa versi Lua sekaligus, jadi ada keuntungan karena tidak dipaksa melakukan upgrade versi besar secara mendadak