GUI, wxWidgets, wxHaskell - Адресна книжка на Haskell

wxWidgets (раніше відома як wxWindows) - це крос-платформна бібліотека інструментів з відкритим вихідним кодом для побудови графічного інтерфейсу користувача (GUI).

wxWidgets дозволяє компілювати програми на багатьох комп'ютерних платформах з мінімальними змінами у вихідному коді, або взагалі без них. Вона підтримує системи Microsoft Windows, Apple Macintosh, UNIX-подібні (для X11, Motif та GTK+), OpenVMS та OS/2. Впроваджувана версія знаходиться у розробці.

Бібліотека розроблена на C++, але може підключатися до багатьох інших поширених мов, таких як Ruby (wxRuby, Anvil), Python (wxPython), Smalltalk (wxSqueak), Perl і Java.

Бібліотека не імітує вигляд компонентів, використовуючи графічні примітиви різних платформ, що підтримуються. Натомість wxWidgets надає тонку абстракцію до існуючих компонентів системи. Іншими словами, основний код wxWidgets вважає за краще викликати «рідний» елемент інтерфейсу платформи, замість того, щоб повторно його реалізовувати. Це надає швидкий інтерфейс, що природно виглядає в порівнянні з бібліотеками на кшталт Swing (для Java).

wxWidgets розроблена не тільки для створення GUI. Вона також має набір класів для роботи з графічними зображеннями, HTML, XML документами, архівами, файловими системами, процесами, підсистемами друку, мультимедіа, мережами, класи для організації багатопоточності, налагодження, відправлення дампів та багато інших інструментів.

WxWidgets - це інструмент розробника для написання настільних або мобільних програм з графічним інтерфейсом (GUI). Цей фреймворк заощаджує багато часу на написання кросплатформових додатків і забезпечує їхню стандартну поведінку.

Програми зазвичай показуютькористувачеві вікна зі стандартними елементами управління, зображеннями та графіками; реагують на події від мишки, клавіатури та інших джерел; спілкуються з іншими програмами, запускають інші програми - подібні стандартні блоки відходять на другий план при використанні WxWidgets, дозволяючи програмісту зосередити свої зусилля на функціоналі програми.

Поки WxWidgets називають інструментарієм розробки графічних інтерфейсів користувача, він справді ним є. Однак насправді він не обмежується цим – фреймворк реалізує багато аспектів програмування. І це є надмірністю, т.к. від WxWidgets потрібно, щоб програми були повністю переносимі на різні платформи, а не тільки їх графічна частина. WxWidgets надає класи для файлів, потоків, багатопоточності, конфігурування додатків, міжпроцесної взаємодії, доступу до баз даних та багато іншого.

Особливість, яка відрізняє WxWidgets від багатьох інших фреймворків, таких як MFC та OWL, – це багатоплатформна природа. WxWidgets має API, який є однаковим або майже однаковим на всіх підтримуваних платформах. Це означає, що ви можете написати програму, наприклад, під Windows і потім з дуже небагатьма (якщо вони взагалі знадобляться) змінами перекомпілювати його під Linux або Mac OS X. Це дає величезну перевагу в порівнянні з роздільним програмуванням під кожну платформу: вам не доведеться вивчати спеціалізований API для кожної платформи. Крім того, при випуску нових версій операційних систем та версій WxWidgets вже написані програми завжди будуть виглядати актуальними і використовувати останні графічні версії елементів керування.

Інша відмінність - WxWidgets використовує рідні для операційної системиграфічні елементи інтерфейсу. Багато фреймворків використовують власні графічні елементи управління, забезпечуючи їх темами, що змінюються, для кожної платформи. Навпаки, WxWidgets використовує рідні графічні елементи інтерфейсу користувача всюди де це можливо. В результаті вони не просто виглядають як рідні для ОС – вони насправді рідні. Це дуже важливо для користувачів, які звикли працювати в конкретному середовищі, оскільки будь-яка, навіть незначна, зміна інтерфейсу позначається на їх здатності вільно використовувати свій досвід управління в стилі стандарту їх ОС.

WxWidgets використовує C++. Чому не Java? Java відмінно підходить для web-додатків, але не є вдалим вибором для робочого столу. Насамперед, C++ програми, що працюють з wxWidgets швидше, мають більш природний вигляд. Вони простіші в установці, оскільки не потрібна спеціальна віртуальна машина. C++, до того ж, надає простий доступ до низькорівневої функціональності, і написаний код може легко інтегрований з вже наявним C/C++ кодом.

Розробники використовують WxWidgets з різних причин: від заміни MFC на одній платформі до забезпечення можливості швидкого перенесення програми з, наприклад, Windows на Unix і Mac OS X. WxWidgets також дозволяє переносити програми на мобільні платформи, такі як вбудований Linux, Pocket PC, або Palm OS.

2000 року фірма SciTech Inc. профінансувала початок розробки wxUniversal.

Власний для wxWidgets набір графічних елементів користувача для використання на платформах, які поки що не мають жодних графічних елементів користувача. wxUniversal став першим портом для MGL, що використовується в цій фірмі, їх низькорівневому графічному шару.

У 2004 році WxWidgets на прохання Microsoft зміниворигінальна назва "wxWindows" на WxWidgets, за що отримав фінансову допомогу.

Також у 2004 Стефан Ксомор та інші його помічники успішно завершили перенесення WxWidgets (wxMac) на MAC OS X., значно покращивши функціональні можливості додатків для OS X. Порт, що використовує Cocoa, був помітно покращений (напрямок очолювали Девід Елліот та Вілліам Осборн).

Вілліам Осборн виграв конкурс із створення версії wxWidgets для Palm OS 6, завданням ставилася мінімальна підтримка платформи.

Проекти підтримки мов програмування:

wxBasic - для Бейсік

wxPerl - для Perl

wxPython -- для Python

wxRuby - для Рубі

Anvil - для Рубі, на базі wxRuby, з покращеним синтаксисом

wxSqueak - для Smalltalk

wxHaskell -- для Haskell

wxEiffel - для Ейфель

wxErlang - для Erlang

wxHaskell є портативною GUI бібліотекою для Haskell, побудованою на wxWidgets. Дуже часто використовуються для створення графічного інтерфейсу функціональною мовою.

wxHaskell є графічною бібліотекою середнього рівня. Від wxHaskell є похідні бібліотеки високого рівня:

На відміну від wxHaskell, на високому рівні GUI ці бібліотеки реалізовані на Gtk2Hs, яка ґрунтується на gtk2.

Усі вищезгадані GUI бібліотеки є експериментальними, з використанням сучасних математичних понять у їхньому підході.