10 पॉइंट द्वारा GN⁺ 2024-12-27 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • egui, Rust में लिखी गई एक Immediate Mode GUI लाइब्रेरी है, जो वेब और native environment दोनों में चलती है
  • वेब पर यह WebAssembly में compile होकर WebGL के ज़रिए render होती है, जबकि native environment में Mac, Linux, Windows जैसे कई platforms को support करती है
  • यह DOM, HTML, JS, CSS के बिना केवल pure Rust से implement की गई है
  • इसे इस्तेमाल में आसान, बेहद portable, और तेज़ performance देने के लिए डिज़ाइन किया गया है

मुख्य विशेषताएँ

1. Immediate Mode

  • यह GUI बनाना आसान करता है और code flow को अधिक संक्षिप्त बनाता है
  • उदाहरण:
    if ui.button("Save").clicked() {  
        my_state.save();  
    }  
    
  • बटन की state store करने या callback इस्तेमाल करने की ज़रूरत नहीं होती
  • Immediate mode usability बढ़ाता है और complexity कम करता है, लेकिन layout और performance में कुछ सीमाएँ हो सकती हैं

2. Platform compatibility

  • वेब: WebAssembly और WebGL के माध्यम से चलता है
  • Native: Mac, Linux, Windows, Android आदि को support करता है
  • game engine के साथ integrate किया जा सकता है (जैसे Bevy integration)

3. Rust ecosystem के साथ integration

  • official framework eframe उपलब्ध है
  • उसी code से वेब और native applications लिखी जा सकती हैं
  • lightweight dependencies:
  • egui, Rust की ab_glyph, ahash जैसी न्यूनतम dependencies ही इस्तेमाल करता है
  • भारी dependencies को अलग crate में विभाजित किया गया है (egui_extras आदि)

मुख्य फ़ंक्शन

  • widgets: button, slider, checkbox, radio button, text editing, color picker आदि
  • layout: horizontal, vertical, column-based, auto line wrapping support
  • text editing: multiline, copy/paste, emoji support
  • window: move, resize, minimize/close
  • rendering: anti-aliased text और shapes rendering
  • accessibility: AccessKit integration के साथ screen reader support

फायदे और नुकसान

  • फायदे
    • सरलता: callback के बिना संक्षिप्त code से GUI लिखा जा सकता है
    • portability: उसी code से वेब और native environment दोनों में चलाया जा सकता है
    • usability: application state और GUI state के बीच synchronization की समस्या नहीं होती
  • नुकसान
    • layout complexity: Immediate mode की प्रकृति के कारण complex layout के लिए अतिरिक्त काम चाहिए
    • CPU usage: हर frame में पूरा layout calculate करना पड़ता है, इसलिए बड़े UI में performance घट सकती है

लक्षित उपयोगकर्ता

  • ऐसे developers जो जल्दी से एक सरल GUI बनाना चाहते हैं
  • ऐसे उपयोगकर्ता जो Rust-आधारित game engine या project में GUI जोड़ना चाहते हैं
  • ऐसे application authors जो वेब और native environment दोनों को support करना चाहते हैं

Immediate Mode पर अतिरिक्त विवरण

  • Immediate mode, callback-आधारित retained mode के विपरीत, हर frame में state को तुरंत process करता है
  • उदाहरण: if ui.button("Save").clicked() { save(); }
  • फायदा: code flow सरल हो जाता है और state synchronization की समस्या नहीं रहती
  • नुकसान: layout calculation जटिल हो सकती है, और बड़े UI में performance पर असर पड़ सकता है

1 टिप्पणियां

 
GN⁺ 2024-12-27
Hacker News टिप्पणियाँ
  • Rust framework का उपयोग करके गणित की समस्याओं को समझने की कोशिश की, लेकिन edit-compile-run cycle बहुत लंबा होने के कारण कठिनाई हुई। सोच रहे हैं कि क्या project को modules में बाँटने से सुधार हो सकता है

  • अगर browser sub-pixel rendering को support नहीं करता, तो canvas-आधारित UI rendering libraries high-resolution devices को छोड़कर DOM-आधारित विकल्पों की तुलना में कमज़ोर होती हैं। egui library भी इस समस्या को पहचानती है

  • browser environment में compiled demo page तकनीकी रूप से प्रभावशाली है, लेकिन egui का उपयोग करके बने apps की संभावनाओं की कल्पना करना मुश्किल है। सोच रहे हैं कि egui के कुछ मज़ेदार examples हैं या नहीं

  • Christmas पर naughty व्यवहार के कारण pattern matching की जगह Option को force unwrap कर दिया, जिससे error हुआ। यह Brave mobile version में हुआ

  • internationalization support सीमित है। उदाहरण के लिए, Arabic "hello" को paste करने पर वह चौकोर boxes के रूप में दिखता है

  • यह जानने की जिज्ञासा है कि "immediate mode" क्या है। UI में widgets जोड़ने के लिए .add() का उपयोग होता है। सोच रहे हैं कि क्या इन widgets के लिए fluent builder API ही इसे "immediate mode" बनाती है

  • यह जानने की जिज्ञासा है कि web browser में ऐसे interfaces को debug कैसे किया जाए। क्या इन्हें JavaScript या C++ WebAssembly की तरह debug किया जा सकता है

  • window resizing में समस्या है। "Highlighting" example में नीचे दाएँ कोने के grab area पर click करने पर diagonal arrow vertical arrow में बदल जाता है और केवल vertical resize ही संभव होता है। दूसरे default examples में भी लगता है कि vertical और horizontal दोनों दिशाओं में एक साथ resize होना चाहिए, लेकिन vertical resize नहीं हो पाता

  • input response बहुत धीमा है। तेज़ी से typing करने पर input साथ नहीं दे पाता। text selection और copy करना संभव नहीं है, जो custom GUI implementation के लिए बड़ी समस्या है। सभी को साल के अंत की शुभकामनाएँ