- Gömülü sistem geliştirmede Lua, MicroPython’a göre daha yüksek kararlılık ve ölçeklenebilirlik sunar
- Lua, C ile kolay entegrasyon, hafiflik ve deterministik bir yapı sunarken, kod bakım kolaylığı ve uzun vadeli maliyetleri düşürme açısından daha büyük avantaj sağlar
- MicroPython hızlı prototipleme için uygun olsa da, büyük ölçekli projelerde veya üretim ortamlarında sınırlara takılır
- Lua, gereksiz özellikler olmadan çalışabilecek şekilde küçük ve verimli yürütülebilir dosyalar olarak derlenebilir; prototiplemeden ürünleştirmeye kadar yüksek ölçeklenebilirlik ve bakım kolaylığı sunar
- Xedge framework’ü, Lua’yı gömülü sistemler için optimize ederek güçlü IoT ve web özellikleri sağlar
Profesyonel gömülü ortamda Lua vs. MicroPython
- Endüstriyel otomasyon, tıbbi cihazlar, ticari IoT gibi profesyonel gömülü projelerde yüksek seviyeli ama hafif ortamlar giderek daha fazla tercih ediliyor
- MicroPython, hızlı prototipleme ve sahada dağıtım konusunda güçlü olsa da, ekosistemi çoğunlukla hobi/eğitim odaklı kartlar etrafında şekilleniyor
- Python’un güçlü yönleri olan NumPy, pandas gibi büyük kütüphaneler MicroPython’da yoktur ve standart kütüphane de ciddi ölçüde küçültülmüştür
- C eklentileriyle entegrasyon da MicroPython’da görece daha karmaşıktır
- Lua ise C uygulamalarıyla entegrasyonu temel felsefesi olarak benimser
- Kararlı ve minimal bir C API ile bir bytecode sanal makinesi sunar
- C/C++ fonksiyonları ve veri yapılarını Lua’ya kolayca açabilirsiniz
- Lua ANSI C kütüphanesi, gömülü kullanım için tasarlanmıştır; yapısı yalın, hafif ve deterministiktir
- MicroPython, Python 3’ün yeniden uygulanmış bir sürümüdür; masaüstü odaklı dil varsayımlarını hâlâ taşıdığı için kaynakları kısıtlı ortamlarda sınırları daha hızlı görünür hâle gelir
Kusursuz C entegrasyonu, Lua’nın temel gücü
- Lua’nın en büyük avantajı C ile sorunsuz entegrasyonudur
- API’si kararlı ve minimaldir; kendi C/C++ fonksiyonlarınızı ve veri yapılarını Lua’ya kolayca açmanıza imkân verir
- MicroPython da C eklentilerini destekler, ancak özel firmware derlemesi gerektirir ve iş akışı daha karmaşıktır
- Lua’da C entegrasyonunun kendisi tasarım felsefesidir
- Lua C API’sini manuel olarak kullanabilir veya SWIG gibi otomatik binding araçlarıyla C fonksiyonlarını/yapılarını Lua’dan çağırabilirsiniz
- Performansın kritik olduğu mantığı C’de, yüksek seviyeli iş mantığını Lua’da ayırarak bakım kolaylığını ve ölçeklenebilirliği artırabilirsiniz
Minimal ayak izi ve ölçeklenebilirlik
- Lua’nın çekirdek yorumlayıcısı çok küçüktür ve gereksiz özellikler kolayca çıkarılabilir
- MicroPython da gömülü kullanım için optimize edilmiştir, ancak temel imajı daha büyüktür ve gerekli modüller etkinleştirildikçe boyutu artar
- Her ikisi de hızlı prototipleme için uygundur, ancak Lua üretime kadar çok daha iyi ölçeklenir
- Lua, yüksek seviye-düşük seviye ayrımını tasarlamayı kolaylaştırır; hızlı bir prototipten sonra bakımı yapılabilir hibrit bir yapıya evrilebilir
- Lua, en baştan C koduyla birlikte çalışacak şekilde kurgulanabildiği için ölçek büyütme doğal olur ve geliştirme akışı kesintiye uğramaz
- MicroPython’da prototipten sonra çekirdek mantığı yeniden yazmak gerekebilir ya da sistem sınırlarına takılınabilir
Ekosistem ve kütüphane erişimi - Quantity’den çok Quality
- MicroPython’ın Wi‑Fi kartları gibi hobi/eğitim odaklı donanımlar etrafında canlı bir ekosistemi vardır, ancak büyük Python ekosisteminin başlıca kütüphaneleri yoktur
- Lua’da kütüphane sayısı daha azdır, ancak C ile kolayca genişletilebilir ve bu yüzden ekosistem sınırlarına daha az takılır
Bakım ve maliyet açısından avantajlar
- Lua’da kod tabanı küçüktür; test, hata ayıklama ve devir süreci daha kolaydır
- Proje büyüdükçe Lua betikleri ile C çekirdeği arasında katman ayrımını korumak daha kolaydır; bu da devir ve ekip içi iş birliği açısından avantaj sağlar
- MicroPython da yüksek okunabilirlik sunar, ancak proje büyüdükçe sistem kodu ile betik katmanının iç içe geçme eğilimi nedeniyle bakım maliyetleri artabilir
Sonuç: Ölçekleneni seçin
- Amaç eğitim ve prototipleme ise MicroPython da mükemmel bir seçim olabilir
- Güvenlik, güvenilirlik ve bakımın önemli olduğu gömülü ürünlerde Lua daha pratiktir ve ölçeklenebilirlik, esneklik ve kararlılığı aynı anda sunar
- Lua yalnızca bir betik dili değil, gömülü geliştirme stratejisidir
Gömülü cihazlarda Lua C kütüphanesi nasıl entegre edilir
- Lua C kütüphanesi hafiftir, ANSI C uyumludur ve standart C kütüphanesi dışında neredeyse hiç bağımlılığı yoktur
- Bare-metal ve RTOS tabanlı sistemler için uygundur; standart C’nin stdin/stdout gibi bazı unsurlarında portlama sırasında dikkat gerekir
-
Real Time Logic’in Xedge Framework’ü
- Xedge Framework’ü, gömülü ortamlara optimize edilmiş Lua runtime’ı ve API seti sunar
- TLS, MQTT5, WebSocket gibi güvenli iletişim, RESTful web servisleri, gerçek zamanlı veri işleme, Modbus/OPC UA protokolleri gibi IoT/web özelliklerini yerleşik olarak sağlar
- Lua’nın esnekliğini ve hafifliğini korurken, gerçek dünyada kullanıma hazır tamamlanmış bir gömülü framework sunar
- Lua’yı gömülü ürüne yerleştirmek için Xedge, entegrasyonu basitleştiren, geliştirme hızını artıran ve farklılaştırıcı mantığa odaklanmayı sağlayan en pratik seçenek olarak öne çıkar
2 yorum
Zaten ekipman üreten bileşen üreticileri en başta ne Lua’yı ne de Python’u pek iyi destekliyor. Ancak C seviyesinde diyebiliriz?
Hacker News görüşleri
Bir oyun motoru yapıp tüm oyunu bir betik diliyle yazmaya karar verdiğimde, JavaScript (QuickJS), Python (Boost.Python) ve Lua (Sol2) arasında kaldım
Lua’yı gömmek gerçekten çok kolay ve C++ sarmalayıcısıyla birlikte kullanmak da son derece pratik
Kısa süre içinde, “bunu artık doğrudan kullanabilirim” diyeceğim bir motor ortaya çıkmış oldu
Üstelik Lua VM’i çok hafif
Ayrıntılar için carimbo projesine bakılabilir
Bir motorun ya da uygulamanın Lua ile betik desteği sunduğunu görünce, Fennel kullanabilme fikri hoşuma gidiyor
Fennel, Lua’ya transpile edilen bir dil
Fennel resmi bağlantısı
Kişisel olarak Boost.Python’ın betik aracı olarak pek iyi olmadığını düşünüyorum
Bu da kararı etkilemiş olabilir
Sol2’nin Lua VM’in kendisi mi, yoksa yalnızca standart Lua VM’i için bir sarmalayıcı mı olduğunu merak ediyorum
“Lua, yalnızca basit bir yüksek seviyeli dil değil, bir gömülü geliştirme stratejisidir” ifadesi bana pek inandırıcı gelmiyor
Böyle bir anlatım içeren yazıları ciddiye almak zor oluyor
Genel olarak yazı, “Lua’yı uzun zamandır kullandım, artık sonuca varabilirim” hissi veriyor
MicroPython konusunda ise gerçek deneyim pek yokmuş gibi duruyor ve birkaç abartılı eleştiri var
Örneğin, “MicroPython projesinde sistem kodu ile betik katmanı birbirine karışıyor ve bakım zorlaşıyor” iddiası yeterince temellendirilmiş görünmüyor
Bunun nedeni dilin kendisi ya da proje yönetimi/mimari tasarımı olabilir; bence sebep daha titiz değerlendirilmelidir
Bu yazı, gerçek bir makaleden çok Xedge Lua framework reklamı gibi hissettiriyor
Bildiğin reklam
Genel olarak yazı ChatGPT tarzı gibi
Reklam yazılarında bunu ister insan yazmış olsun ister LLM, çok fark etmiyor gibi duruyor
Yorumlarda da söylendiği gibi ChatGPT havası verdiği için yazıyı okumak pek keyifli değildi
PLDB Top 1000 listesinde Lua, MicroPython’dan daha üst sırada yer alıyor
Bu karşılaştırma yazısında GitHub kullanıcısı SkipKaczinksi, Lua’nın genel olarak daha hızlı olduğunu düşünüyor
Hackaday yazısında Michael Polia da Lua’nın küçük ve hızlı olduğunu belirtiyor
Toit dili ise MicroPython’dan 30 kat daha hızlı olduğunu iddia ediyor
Toit’in kurucusu, V8’in ilk dönem geliştirme lideriydi
“Embedded” ile “embeddable” kavramlarını ayırmak gerekiyor
MicroPython, gömülü platformlarda kullanılır ama Lua gibi mevcut bir uygulamaya entegre edilen bir “embeddable runtime” değildir
MicroPython’ın amacı, geleneksel C runtime’ın yerini almak; minimum C sarmalayıcıyla başlatma yapıp iş mantığının geri kalanını MicroPython betikleriyle yazmaktır
Lua’daki
lua_Stategibi birden fazla yorumlayıcıyı aynı anda çalıştırma ya da sandbox yapısı yokYani MicroPython, “oyun motoru içinde betikle hızlı iterasyon”dan çok “IoT kartında Python ile sensör verisi okuma” işine optimize edilmiştir
Kutudan çıktığı gibi kullanılamıyor, bir miktar glue code gerekiyor
Referans olarak embed port örneğine bakılabilir
Lua’nın gömülü kullanım için de harika bir dil olduğunu düşünüyorum
Lua tabanlı ürünleri de beğeniyorum, ancak bu yazı “Lua neden MicroPython’dan üstün” sorusunu ikna edici biçimde açıklayamıyor
MicroPython’ı C ile genişletmek sanıldığından daha kolay; resmi modül geliştirme yöntemiyle aynı şekilde harici modüller de geliştirilebiliyor
Bu yüzden firmware’i özelleştirilmiş derlemelerde eklemek zor değil
Ayrıca Python ekosistemi kütüphanelerinin (
numpyvb.) çalışmadığı söylenmiş ama gerçektenumpyvescipy’nin bir kısmını yeniden uygulayanulabkütüphanesi de mevcutBenim kişisel izlenimim, bunun bir pazarlama söylemi olduğu yönünde
Mikrokontrolcüde yeterli kaynak varsa micropython kullanırım
Güç, bellek ve CPU kontrolü gerçekten kritikse sonunda yine C/C++ kullanırım
Ağ tarafındaki geliştirme C/C++’ta zor, ama hızlı ve güvenli yapmak için seçenekler de azdı (gerçi son zamanlarda gömülü TLS desteği de iyileşmiş olabilir)
Lua bana C’nin yumuşatılmış bir paketi gibi geliyor
Kütüphane zenginliği güzel olsa da, Lua toolchain’ini, mikrokontrolcü toolchain’ini ve gereken tüm kütüphaneleri bizzat port etme yükü büyük
O yüzden eğer bu bir pazarlama yazısıysa, verilen mesajın Xedge kullanıp işi dışarıya vermek olduğu kanaatindeyim
2350’de de gayet iyi çalıştığını kısaca belirtiyor
Gerçekten embedded geliştirmede micropython ya da lua’yı “ciddiye alarak” kullanan var mı merak ediyorum
Yaklaşık 20 yıldır serbest çalışan biri olarak Lua merkezli embedded ürünler geliştiriyorum
VOIP cihazları, ev otomasyonu, endüstriyel router’lar, dijital video kayıt cihazları gibi pek çok alanda Lua kullandım
Sistemler genelde Linux kernel, libc, Lua yorumlayıcısı ve birkaç harici kütüphaneden oluşuyor
Lua uygulama kaynak kodu 30 bin ila 100 bin satır arasında oluyor; günümüz ölçülerine göre “küçük” sayılan ürünler bile var (8MB flash, 64MB RAM gibi)
Lua bu ortamlarda gayet iyi çalışıyor
Bunların hepsi aktif ürün ve müşteriye de para kazandırıyor
Lua ile C’nin entegrasyonu çok kolay ve asenkron çalışma konusunda da modern dillerin hâlâ uğraştığı sorunları Lua çok eskiden çözmüştü
Dil basit ama güçlü; coroutine, closure, metatable gibi özelliklerle farklı paradigmalar kullanılabiliyor
Bu ölçekte bir projede olsam yine Lua + C/C++ kombinasyonunu seçerdim
Başka ekosistemleri de denedim (Elixir, Rust, Nim), ama Lua kadar güçlü ve esnek bir dil bulamadım
Biz MicroPython ile class B tıbbi cihazlara kadar geliştiriyoruz
Embedded dünyasının kapsamı çok geniş
Güvenlik hassassa mevzuat gereği kullanamazsınız, ama test ekipmanı gibi alanlar regülasyondan bağımsız olduğu için insanlar rahat olanı kullanıyor
IoT tarafında da herkes kendine uygun olanı kullanıyor denebilir
MicroPython, CubeSat gibi uydu görevlerinde de gerçekten kullanılıyor
Buna dair konferans ve podcast örnekleri de var
Binlerce ürün Lua’yı içeride tamamen ya da kısmen kullanıyor
Yakın zamanda LuaJIT’e de baktım; bence hak ettiği değeri görmüyor
“Ciddi embedded geliştiriciler”in çoğunun derlenen diller kullandığını düşünüyorum
Hobi amaçlı olarak ben sadece Arduino (Platformio) kullanıyorum
Mikrokontrolcülerde derleme yapıp flash’a yazmak zaten çok hızlı, bu yüzden ayrıca bir yorumlayıcıya ihtiyaç duymuyorum
Bir gün C++ yerine geçebilecek başka bir derlenen dili de denemek isterim
Raspberry Pi Pico’da iyi çalışan tavsiye edilecek bir dil var mı diye merak ediyorum
Uzman sayılmam ama Rust’ın en popüler alternatiflerden biri olduğunu düşünüyorum
Trendy, C++’ın birçok sorununu düzeltiyor ve tooling tarafı da fena değil
Zig de ilginç görünüyor, denemek isterim
Raspberry Pi yeterince güçlü olduğu için sistem dili olmayan şeyler de çalışabiliyor
Kotlin’i de seviyorum; temelde JVM istese de native derleme mümkün
Ama Pico’da GPIO kontrolü için dosya sistemine doğrudan erişmek gerekebilir (ayrıca Pico’da Kotlin desteğinden de emin değilim)
Nim de oldukça iyi bir seçenek gibi görünüyor
İlgili kaynak için picostdlib’in Nim desteğine bakılabilir
Lua özü itibarıyla çok daha sade bir dil
Python, “tek bir doğru yol vardır” anlayışını savunsa da pratikte içine her şey konmuş bir İsviçre çakısı gibi duruyor
Bu da başlangıcı kolaylaştırıyor ve bol kütüphane sayesinde hızlı geliştirmeyi mümkün kılıyor
Ama kaynakları kısıtlı, küçük ortamlara pek uygun değil
Gösterişli bir koltuğu tahta kullanarak Eames sandalyesine dönüştürmenin de bir sınırı var
Python kolaydır, Lua ise sadedir
“Kolaylık” meselesinde iç karmaşıklık gizlenir; “sadelik” ise kullanıcıdan daha fazla emek ister
Python’ın sürüm uyumluluğu zayıf; 3.x’ten 3.x+1’e geçerken sık sık sorun çıkıyor
Lua kusursuz değil ama yine de birden fazla Lua sürümünü destekleyen çok örnek var; bu da ani sürüm yükseltmelerine zorlanmamak gibi bir avantaj sağlıyor