13 puan yazan GN⁺ 2025-07-15 | 2 yorum | WhatsApp'ta paylaş
  • 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

 
cnaa97 2025-07-15

Zaten ekipman üreten bileşen üreticileri en başta ne Lua’yı ne de Python’u pek iyi destekliyor. Ancak C seviyesinde diyebiliriz?

 
GN⁺ 2025-07-15
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_State gibi birden fazla yorumlayıcıyı aynı anda çalıştırma ya da sandbox yapısı yok
    Yani 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

    • MicroPython, Lua kadar embeddable olmasa da tamamen imkânsız değil
      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 (numpy vb.) çalışmadığı söylenmiş ama gerçekte numpy ve scipy’nin bir kısmını yeniden uygulayan ulab kütüphanesi de mevcut

  • Benim 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

    • “micropython kullanmak için bol kaynak gerekir” sözüne karşılık
      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

    • Sonuçta bytecode’a derlendiği için bir bakıma derlenmiş dil sayılabilir
  • 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