سؤال

أيهما أفضل لتطوير تطبيقات واجهة المستخدم الرسومية مع Haskell، Wxwidgets (عبر wxhaskell.) أو GTK (عبر GTK2HS.)?

ما هي إيجابيات وسلبيات كل منها؟ هل تختلف اعتمادا على النظام الأساسي الذي تستهدفه (كنت أعمل في المقام الأول على نظام التشغيل X ولكن هل ترغب برامجي في العمل على نظام Linux و Windows أيضا)؟

هل كانت مفيدة؟

المحلول

إخلاء المسؤولية: أنا محافظة Wxhaskell

كلاهما مستقر وغوي متكامل إلى حد ما، ويمكن أن تختار إما لمعظم المشاريع بثقة. كلاهما يحتوي على درجة من رابط Haskell "أعلى المستوى"، ولكن في كلتا الحالتين، ستحتاج إلى الانتقال إلى ترميز أسلوب "C" الضروري إلى حد ما لإنجاز الأمور. انطباعي هو أن Wxhaskell يتيح لك أن تقضي المزيد من الوقت في الارتباطات ذات المستوى الأعلى، لكنني لم أفعل الكثير من GTK2HS، وأي حال، فمن المؤكد أن تجد نفسك تعمل على النهاية الرفيعة من المجمع لكلا المكتبين - وأعتقد أن البرمجة الشاملة "التعقيد" يشبه في كلتا الحالتين.

لذلك، دعونا نأخذ الوظيفة الأساسية كإجراء معين والتركيز على الاختلافات. يرجى ملاحظة أنني أصدق حقا أن GTK2HS هو قطعة عمل ممتازة، وأنك ستكون سعيدا إذا اخترت ذلك. معظم ما أقوله أدناه هو شخص شخصي في الاختلافات، ولماذا اخترت العمل مع و Wxhaskell نفسي.

GTK2HS لديه فريق أكبر يعمل عليه، ويطلق سراحه بانتظام. لم يتم تحديث Wxhaskell في كثير من الأحيان، لكن الفريق الأساسي نشطا، وهناك بوجفلات عادية، ولكن مع إضافة وظيفة جديدة كبرى ببطء أكثر مما نود (لدينا جميعا وظائف يوم).

يعطي Wxhaskell مظهر تطبيق أصلي حقيقي على جميع المنصات المدعومة خارج الصندوق. GTK2HS هو، بالطبع، مواطن على نظام Linux ولديه موضوع أصلي جيد جدا على Windows (أي جيدة بما يكفي لتلبية جميع الأسباب ولكن المظهر ... أعتقد أن مكتبة GTK "الأصلية" OSX قيد التطوير، ولكنها غير ناضجة نسبيا. بمجرد أن يكون هذا مستقرا، يجب أن يكون GTK2HS قادرا على الاستفادة بسهولة من نفس الشكل "الأصليين جزئيا" (مثل GTK OSX لقطة شاشة).

ربما يكون Wxhaskell أسهل قليلا في البناء إذا لم تكن على Linux (من المحتمل أن تكون GTK2HS أسهل إذا كنت مضيفا Linux)، ولكن كلاهما مجمع للغاية للبناء، ليكون صادقا، حيث يوجد عدد كبير من التبعيات في كلتا الحالتين.

إنه أسهل قليلا (IMHO) لتوزيع التطبيقات بناء على WXHaskell، ببساطة لأنه يحتوي على تبعيات مكتبة أقل. أقوم بتوزيع التطبيقات باستخدام Innosetup بشكل رئيسي على Windows، وكحزم تطبيق على OSX. وأود أن أعترف أنه مع كمية صغيرة فقط من العمل الإضافي، يمكن القيام بذلك مع GTK2HS، لذلك ربما يكون هذا أضعف حجة لصالح Wxhaskell.

من رأيي الشخصي أن WXHASKELL أكثر ودا للمصدر المغلق (مثل التطورات التجارية). هذا هو، بطبيعة الحال، موضوع حروب اللهب الأودية، لذلك سأقول فقط أن wxhaskell تحت Wxwidgets ترخيص التي تسمح بشكل لا لبس فيه تطوير المصادر المغلقة. GTK2HS هو LGPL، لذلك ستحتاج إلى طلب محاميك - على الرغم من أنني يجب أن أتضح أن العديد من الأشخاص والشركات قد خلصت إلى أن LGPL متوافق مع التنمية التجارية؛ لقد خلص المحامون في الشركة التي أعمل فيها إلى أنه غير مناسب لمشاريعنا.

أعتقد أنه إذا كان Linux تطوير وتطويري الرئيسي، فربما أستخدم GTK2HS. ومع ذلك، ليس كذلك: أتقدم أساسا إلى Windows مع OSX عرضي، وأعتقد أن Wxhaskell هي أفضل تطابق لهذه المنصات، على الرغم من دعم كلا الخيارين جميع المنصات الثلاثة.

آمل أن يساعدك ذلك في اختيارك.

نصائح أخرى

الاعتبار هو أنه من الأسهل حاليا الحصول على Wxhaskell للعمل أصليا على نظام التشغيل Mac OS X. يعتمد GTK2HS على GTK، والذي يحتوي على تطبيق يستخدم الحاجيات الأصلية على نظام التشغيل Mac OS X، ولكن هذا التنفيذ ليس بسهولة كتنفيذ WxWidgets لنظام التشغيل Mac OS X هو.

لذلك، إذا كنت ترغب في تطوير التعليمات البرمجية للتشغيل دون X11.App، فأنت حاليا أفضل حالا مع Wxhaskell.

لاحظ أن هذا يتغير بسرعة:http://www.haskell.org/haskellwiki/gtk2hs#using_the_gtk.2b_os_x_framework.يوضح كيفية استخدام GTK2HS مع GTK + GTK + على Mac OS X.

ميزة واحدة من GTK2HS هي دعمها للهاد، مما يجعل تطوير واجهة المستخدم البسيطة سريعة جدا. مجاتن أعلى المستوى في Wxhaskell تخفف من معظم هذه الميزة، لكنها تتطلب فهم أعمق لكيفية أن تنظر واجهةك إلى النظر والتصرف، وبالتالي يصعب استخدامها في أزياء استكشافية.

لدي معلومات غير مكتملة للغاية، ولكن نظرا لعدم وجود إجابات حتى الآن، ربما تكون المعلومات غير المكتملة أفضل من لا شيء.

السؤال الذي يجب طرحه هو: هو مجموعة الأدوات مجرد غلاف حول وظيفة مثل C، أم أن هناك طبقة إضافية تعطي مجموعة الأدوات واجهة برمجة تطبيقية أكثر "مثل Haskell"؟ عندما أعلن Wxhaskell لأول مرة في ورشة عمل Haskell، بدا تطوير واجهة برمجة تطبيقات Haskell الأصلية واعدة للغاية، لكنها لا تزال غير مكتملة. يبدو أنه إذا كان API "Haskellized" ل WXHASKELL قيد التشغيل، في حين أن مشروع GTK2HS لا يذكر هذه المشكلة على الإطلاق. لهذا السبب أوصي Wxhaskell.

شخصيا أود أن أنظر إلى نوع من حزمة / امتداد التفاعل. يبدو أن يجلس مع النموذج أقرب بكثير. بدلا من تحديد الأشياء الرسومية الخاصة بك بالارتياز، يمكنك القيام بذلك بشكل تصريح. مثال (وليس ممثل أي لغة أو تنفيذ معين):

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)

سيتم تحديث ButtyClicked و Z تلقائيا في كل مرة تتغير x و y.

يمكنك بعد ذلك الحصول على بعض المنطق في مكان ما يبدو مثل هذا:

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

هذا هو كل غامض جدا رغم ذلك. مجرد النظر في بعض واجهات التفاعلية الحقيقية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top