13 poin oleh GN⁺ 2025-07-15 | 2 komentar | Bagikan ke WhatsApp
  • 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

 
cnaa97 2025-07-15

Sejak awal, vendor pembuat komponen untuk memproduksi perangkat pun umumnya tidak terlalu mendukung Lua maupun Python. Paling banter C?

 
GN⁺ 2025-07-15
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_State di Lua yang memungkinkan banyak interpreter berjalan bersamaan atau sandboxing
    Dengan kata lain, MicroPython lebih cocok untuk 'membaca data sensor dengan Python di board IoT' daripada 'pengembangan iteratif cepat dengan scripting di dalam game engine'

    • MicroPython memang tidak embeddable seperti Lua, tetapi bukan berarti sama sekali tidak bisa
      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

    • Soal pernyataan bahwa 'untuk memakai micropython butuh resource yang longgar', ada komentar singkat bahwa bahkan di 2350 pun itu berjalan baik
  • 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

    • Pada akhirnya tetap dikompilasi menjadi bytecode, jadi bisa juga dianggap semacam 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