2009-02-16 10 views
20

जोस्केल, wxwidgets (wxHaskell के माध्यम से) या जीटीके (Gtk2HS के माध्यम से) के साथ जीयूआई अनुप्रयोगों के विकास के लिए बेहतर है?WxHaskell और Gtk2HS की सापेक्ष योग्यता क्या हैं?

प्रत्येक के पेशेवर और विपक्ष क्या हैं? क्या आप जिस प्लेटफॉर्म को लक्षित कर रहे हैं उसके आधार पर यह अलग-अलग होता है (मैं मुख्य रूप से ओएस एक्स पर काम कर रहा हूं लेकिन क्या मेरे प्रोग्राम लिनक्स और विंडोज पर भी काम करना चाहते हैं)?

उत्तर

23

[अस्वीकरण: मैं एक wxHaskell मेंटेनर हूँ]

दोनों स्थिर और काफी पूरा जीयूआई बाइंडिंग कर रहे हैं, और आप या तो विश्वास के साथ सबसे परियोजनाओं के लिए चुन सकते हैं। दोनों में 'उच्च स्तरीय' हास्केल बाइंडिंग की कुछ डिग्री है, लेकिन दोनों मामलों में आपको चीजों को पूरा करने के लिए अनिवार्य 'सी' शैली कोडिंग में गिरावट की आवश्यकता होगी। मेरी धारणा यह है कि WxHaskell आपको उच्च स्तरीय बाइंडिंग में थोड़ा और समय बिताने की अनुमति देता है, लेकिन मैंने बहुत अधिक GTK2HS नहीं किया है, और किसी भी घटना में, आप निश्चित रूप से दोनों पुस्तकालयों के लिए रैपर के पतले छोर पर काम करते हैं - और मुझे लगता है कि समग्र प्रोग्रामिंग 'जटिलता' दोनों मामलों में समान है।

इसलिए, चलिए बुनियादी कार्यक्षमता को दिए गए और मतभेदों पर ध्यान केंद्रित करते हैं। कृपया ध्यान दें कि मैं वास्तव में विश्वास करता हूं कि जीटीके 2 एचएस काम का एक उत्कृष्ट टुकड़ा है, और यदि आप इसे चुनते हैं तो आप खुश होंगे। जो कुछ मैं नीचे कहता हूं वह अंतरों पर व्यक्तिगत रूप से लेता है, और मैं स्वयं wxHaskell पर और साथ काम करने का विकल्प क्यों चुनता हूं।

GTK2HS पर एक बड़ी टीम काम कर रही है, और इसे नियमित रूप से जारी किया जाता है। wxHaskell को अक्सर अद्यतन नहीं किया जाता है, लेकिन कोर टीम सक्रिय होती है, और नियमित बगफिक्स होते हैं, लेकिन बड़ी नई कार्यक्षमता को धीरे-धीरे जोड़ना पड़ता है जितना हम चाहते हैं (हम सभी को दिन की नौकरियां होती हैं)।

wxHaskell बॉक्स के बाहर सभी समर्थित प्लेटफ़ॉर्म पर वास्तविक मूल एप्लिकेशन उपस्थिति देता है। जीटीके 2 एचएस, ज़ाहिर है, लिनक्स पर मूल है और विंडोज़ पर एक बहुत अच्छी मूल थीम है (यानी पैडेंट के अलावा सभी को संतुष्ट करने के लिए पर्याप्त ...), लेकिन जीएसके ओएसएक्स पर दिखता है और महसूस करता है, और एक्स 11 स्थापित करने पर निर्भर करता है। मेरा मानना ​​है कि एक ओएसएक्स 'मूल' जीटीके लाइब्रेरी विकास में है, लेकिन अपेक्षाकृत अपरिपक्व माना जाता है। एक बार यह स्थिर हो जाने पर, जीटीके 2 एचएस को 'आंशिक रूप से देशी' देखो और महसूस से आसानी से लाभ प्राप्त करने में सक्षम होना चाहिए (उदा। GTK OSX screenshot)।

wxHaskell शायद लिनक्स पर नहीं है (जीटीके 2 एचएस लिनक्स होस्ट किए जाने पर संभवतः आसान है) बनाने के लिए थोड़ा आसान है, लेकिन दोनों ईमानदार होने के लिए निर्माण करने के लिए बहुत जटिल हैं, क्योंकि बड़ी संख्या में निर्भरताएं हैं दोनों मामलों में।

यह WxHaskell के आधार पर अनुप्रयोगों को वितरित करने के लिए थोड़ा आसान (IMHO) है, क्योंकि इसकी कम लाइब्रेरी निर्भरताएं हैं। मैं विंडोज़ पर मुख्य रूप से इनोसेटअप और ओएसएक्स पर ऐप बंडल के रूप में एप्लिकेशन वितरित करता हूं। मैं मानता हूं कि केवल थोड़ी सी अतिरिक्त काम के साथ, जीटीके 2 एचएस के साथ भी ऐसा किया जा सकता है, इसलिए शायद यह WxHaskell के पक्ष में सबसे कमजोर तर्क है।

यह मेरी व्यक्तिगत राय है कि wxHaskell बंद स्रोत (जैसे वाणिज्यिक) विकास के लिए मित्रवत है। यह निश्चित रूप से, अंतहीन लौ युद्धों का विषय है, इसलिए मैं केवल इतना कहूंगा कि wxHaskell wxWidgets license के तहत है जो अनजाने में बंद स्रोत विकास के लिए अनुमति देता है। जीटीके 2 एचएस एलजीपीएल है, इसलिए आपको अपने वकील से पूछना होगा - हालांकि मुझे यह स्पष्ट करना होगा कि कई लोगों और कंपनियों ने निष्कर्ष निकाला है कि एलजीपीएल वाणिज्यिक विकास के साथ संगत है; जिस कंपनी के लिए मैंने काम किया है, उसके वकीलों ने निष्कर्ष निकाला है कि यह हमारी परियोजनाओं के लिए अनुचित है।

मुझे लगता है कि यदि लिनक्स मेरा मुख्य विकास और वितरण मंच था, तो शायद मैं GTK2HS का उपयोग करता। हालांकि, यह मुख्य रूप से कभी-कभी ओएसएक्स के साथ विंडोज़ को वितरित नहीं करता है, और मुझे लगता है कि WxHaskell इन प्लेटफ़ॉर्म के लिए एक बेहतर मिलान है, हालांकि दोनों विकल्प सभी तीन प्लेटफॉर्म का समर्थन करते हैं।

मुझे आशा है कि यह आपकी पसंद के साथ आपकी मदद करेगा।

3

मेरे पास बहुत अपूर्ण जानकारी है, लेकिन चूंकि आपके पास अभी तक कोई जवाब नहीं है, हो सकता है कि अपूर्ण जानकारी किसी से भी बेहतर न हो।

प्रश्न पूछने का सवाल यह है: टूलकिट केवल सी-जैसी कार्यक्षमता के आसपास एक रैपर है, या क्या कोई अतिरिक्त परत है जो टूलकिट को "मूल हास्केल जैसी" एपीआई प्रदान करती है? जब WaskHaskell की पहली बार हास्केल कार्यशाला में घोषणा की गई थी, मूल हास्केल एपीआई का विकास बेहद आशाजनक लग रहा था, लेकिन अभी भी अपूर्ण था। ऐसा लगता है कि WxHaskell के लिए "Haskellized" API अभी भी काम कर रहा है, जबकि Gtk2Hs प्रोजेक्ट इस समस्या का बिल्कुल उल्लेख नहीं करता है। इसी कारण से मैं wxHaskell की सिफारिश करता हूं।

4

एक विचार यह है कि वर्तमान में यह मैक ओएस एक्स पर मूल रूप से काम करने के लिए wxHaskell प्राप्त करना थोड़ा आसान है। जीटीके 2 एचएस जीटीके पर निर्भर करता है, जिसमें मैक ओएस एक्स पर मूल विजेट का उपयोग करके कार्यान्वयन होता है, लेकिन यह कार्यान्वयन आसानी से नहीं बनाया गया है क्योंकि मैक ओएस एक्स के लिए wxwidgets कार्यान्वयन है।

इसलिए, यदि आप X11.app के बिना चलाने के लिए कोड विकसित करना चाहते हैं, तो वर्तमान में आप wxHaskell के साथ थोड़ा बेहतर हैं।

नोट तथापि है कि इस जल्दी से बदल रहा है: http://www.haskell.org/haskellwiki/Gtk2Hs#Using_the_GTK.2B_OS_X_Framework दिखाता है कि कैसे मैक ओएस एक्स पर देशी जीटीके + के साथ GTK2HS उपयोग करने के लिए GTK2HS की

एक लाभ यह अपने GLADE समर्थन है, सरल यूआई के विकास बहुत जल्दी हो जाता है। WxHaskell में उच्च स्तरीय संयोजक उस लाभ के अधिकांश को कम करते हैं, लेकिन उन्हें आपके इंटरफ़ेस को देखने और व्यवहार करने के तरीके के बारे में गहरी समझ की आवश्यकता होती है, और इसलिए खोजी फैशन में उपयोग करना कठिन होता है।

0

व्यक्तिगत रूप से मैं कुछ प्रकार के प्रतिक्रियाशील पैकेज/एक्सटेंशन को देखता हूं। ऐसा लगता है कि प्रतिमान बहुत करीब है। अपनी ग्राफिकल सामग्री को अनिवार्य रूप से निर्दिष्ट करने के बजाय, आप इसे घोषणात्मक रूप से कर सकते हैं। उदाहरण (किसी विशेष भाषा या कार्यान्वयन की नहीं प्रतिनिधि):

x, y, z    :: Int 
click, buttonclicked :: Bool 
x = <X coordinate of mouse> 
y = <Y coordinate of mouse> 
click = <Whether mouse button is currently being pressed> 
z = x + y 
buttonclicked = (x == 10 && y == 10 && click) 

Buttonclicked और z स्वचालित रूप से हर बार x और y परिवर्तन अद्यतन किया जाएगा।

if buttonclicked then <do something> else <do something else> 

यह हालांकि बहुत फजी सब है:

फिर आप कुछ तर्क कुछ इस तरह दिखता है कि हो सकता है कहीं। बस कुछ वास्तविक प्रतिक्रियाशील इंटरफेस देखें

संबंधित मुद्दे