- सरल cross-platform reactive GUI टूलकिट
- सरलता: इसे प्रोजेक्ट में आसानी से जोड़कर तुरंत UI बनाया जा सकता है। किसी अतिरिक्त टूल या code generation step की ज़रूरत नहीं है। Go code लिखकर self-contained binary के रूप में native GUI application बनाया जा सकता है
- Cross-platform: जहाँ संभव हो, native widgets का उपयोग करता है, और compile करते समय चल रहे platform के लिए सबसे उपयुक्त backend अपने आप चुनता है। अभी FLTK-आधारित और Cocoa-आधारित दो backend implementation उपलब्ध हैं
- Reactive: application state बदलने पर UI अपने आप update हो जाता है। यह side-effect-free rendering function देता है और application state को manage करने के लिए
UseState hook का उपयोग करता है
- विस्तृत widget support: Spot में button, label, text input, slider, dropdown जैसे कई UI controls built-in मिलते हैं
अक्सर पूछे जाने वाले सवाल (FAQs)
"Reactive" का क्या मतलब है?
- Spot में reactive का मतलब है कि application state बदलने पर UI अपने आप update हो जाता है। यह state change होने पर immutable component tree को फिर से build करके, उसे पिछले state से compare कर यह तय करता है कि किन UI controls को update करना है।
Spot जिन "native widgets" का उपयोग करता है, वे क्या हैं?
- अभी Spot macOS पर Cocoa backend का उपयोग करता है, और बाकी सभी platforms पर FLTK-आधारित backend का उपयोग करता है। चाहें तो Mac पर FLTK का भी उपयोग किया जा सकता है। आगे चलकर Windows के लिए बेहतर support की योजना है।
क्या मैं अपने hooks implement कर सकता हूँ?
- हाँ, React की तरह आप अपने hooks implement कर सकते हैं। इसके लिए ऐसा function बनाया जा सकता है जो पहले argument के रूप में
*spot.RenderContext ले, और उसके जरिए Spot lifecycle में "hook" किया जा सकता है।
custom component कैसे लिखें?
- Spot में UI को components में बाँटने के कई तरीके हैं। मुख्य तरीका है ऐसा struct बनाना जो
spot.Component interface को implement करे। इस interface में सिर्फ एक method होता है: Render(ctx *spot.RenderContext) spot.Component।
क्या दिए गए widgets के अलावा कोई दूसरी widget library इस्तेमाल की जा सकती है?
- हाँ, किया जा सकता है। इसके लिए ऐसा struct बनाना होगा जो
spot.Component interface को implement करे और native widgets को manage करे।
क्या Cocoa या FLTK के अलावा कोई और backend इस्तेमाल किया जा सकता है?
- फिलहाल सिर्फ यही दो backend supported हैं। अगर आप कोई दूसरा backend जोड़ना चाहते हैं, तो PR submit कर सकते हैं।
spot/ui और spot में क्या अंतर है?
spot वह core package है जो reactive model और rendering functionality देता है। यह backend-agnostic है और spot.Control interface को implement करने वाले किसी भी control set के साथ काम कर सकता है।
spot/ui एक pre-built cross-platform GUI control set देता है, जिसे spot के साथ इस्तेमाल किया जा सकता है।
"component" और "control" में क्या अंतर है?
- Spot में component application की एक logical unit है, जिसमें business logic और state शामिल होते हैं। हर component दूसरे components से बना होता है और अंत में एक या अधिक "controls" के रूप में render होता है।
- control एक खास तरह का component है, जो UI tree में mount होता है और स्क्रीन पर visual element को दर्शाता है।
Spot में "make", "render", "build", "mount", "update" शब्दों का क्या मतलब है?
- Make: नया component instance बनाने की प्रक्रिया। यह
spot.Component interface को implement करने वाले struct के instance को refer करके या render function के साथ spot.Make call करके किया जाता है।
- Render: component की state को building blocks पर लागू करके दूसरा component instance लौटाने की प्रक्रिया। यह component instance पर
Render method call करके किया जाता है।
- Build: component instance से नया UI tree बनाने की प्रक्रिया। इसमें components को recursively render करके control tree बनाई जाती है।
- Mount: (virtual) control tree से वास्तविक UI controls बनाने की प्रक्रिया। यह tree node पर
Mount call करके, या component instance या render function के साथ spot.Mount call करके किया जाता है।
- Update: (mounted) control tree को update करने की प्रक्रिया। यह tree node पर
Update call करके किया जाता है।
वे सुविधाएँ जिन्हें Spot अभी support नहीं करता
- automatic layout
- multiple windows
- modal dialog
- resizable windows
- menu bar
- custom widgets
- native widget access
- drag and drop
- internationalization
supported UI controls की सूची
- Button: action शुरू करने के लिए सरल button (Fl_Button, NSButton)
- Checkbox: दो परस्पर-विरोधी विकल्पों में से एक चुनने वाला control (Fl_Check_Button, NSButton (NSButtonTypeSwitch))
- ComboBox: text input वाला dropdown menu (ComboBox, NSComboBox)
- Dial: circular state control (Fl_Dial, NSProgressIndicator (with
NSCircular style))
- Dropdown: कई विकल्पों में से एक चुनने वाला dropdown menu (Fl_Choice, NSComboBox)
- Image: image control (Image, NSImageView)
- Label: सरल, edit न किया जा सकने वाला text label (Fl_Box, NSTextField)
- ListBox: scroll किया जा सकने वाला control, जिसमें दी गई सूची से एक या कई items चुने जा सकते हैं (Fl_Select_Browser/Fl_Multi_Browser, NSTableView)
- ProgressBar: लंबे समय तक चलने वाले काम की प्रगति दिखाने वाला progress bar control (Fl_Progress, NSProgressIndicator)
- Slider: horizontal slider input control (Fl_Slider, NSSlider)
- Spinner: ऊपर/नीचे button वाला numeric input control (Fl_Spinner, NSTextField+NSStepper)
- TextField: single-line text input control (Fl_Input, NSTextField)
- TextView/TextEditor: multi-line text content को देखने/संपादित करने के लिए general-purpose text box (Text, NSTextView)
- Window: स्क्रीन पर (top-level) window को दर्शाने वाला control (Fl_Window, NSWindow)
GN⁺ की राय
- Spot, Go भाषा में cross-platform GUI applications को आसानी से विकसित करने में मदद करता है। खासकर इसका reactive model डेवलपर को UI updates की चिंता किए बिना application logic पर ध्यान देने देता है।
- अभी कई सुविधाएँ support नहीं होतीं, इसलिए complex applications बनाते समय सीमाएँ आ सकती हैं। खासकर अगर automatic layout या multiple windows जैसी सुविधाएँ चाहिएँ, तो किसी दूसरे toolkit पर विचार करना चाहिए।
- Spot की सरलता और cross-platform support छोटे projects या prototypes के लिए बहुत उपयोगी हो सकते हैं। लेकिन बड़े applications में functionality की सीमाएँ हो सकती हैं।
- अगर Spot की community और documentation और बेहतर होती है, तो ज़्यादा डेवलपर्स इसे आसानी से अपना और उपयोग कर पाएँगे। खासकर custom hooks और components लिखने के तरीकों पर और उदाहरण हों तो अच्छा होगा।
- Spot के backend को बढ़ाने की संभावना दिलचस्प है। खासकर अगर Windows के लिए बेहतर support जुड़ता है, तो और अधिक डेवलपर्स इसका उपयोग कर सकेंगे।
1 टिप्पणियां
Hacker News राय
Hacker News टिप्पणियों का सार