Откри wxWidgets и CodeBlocks

Малко по-рано започнах да се интересувам от разработването на междуплатформени GUI приложения. В момента има огромен брой подходи за разработване на този тип програма - това са Java, GTK и Qt библиотеки, скриптови езици. Но аз избрах библиотеката wxWidgets и ще обясня защо по-долу.
1. За какво е всичко това?
Поне някой програмист в даден момент посещава следващите мисли. Би било чудесно едно приложение да се напише веднъж и то да работи под Windows, Linux, MacOS, FreeBSD и въобще всяка операционна система без пачове и подобрения.
Но си спомням колко просто и лесно беше да създавам GUI приложения в Borland Delphi. Изглежда, че това също се нарича RAD - Rapid Application Development. Защо моята IDE няма такава?
И в близко бъдеще, по някаква причина, те казват много за Java и C #, казват, че няма изтичане на памет, но има уникод, постоянни изрази, нишки между платформи и много други полезни неща направо от кутията. Би било необходимо да се обвърже с C ++ ...
Лично аз, в допълнение към горните мисли, също бях загрижен, че скриптовете на моя любим Perl са доста трудни за пренасяне към Windows. Като минимум, тъй като потребителят трябва да бъде обяснен, те казват, първо изтеглете Strawberry Perl, след това стартирайте CPAN и инсталирайте такива и такива модули.
Програмата perl2exe може да реши този проблем, но е платена и изглежда създава неприлично огромни програми като изход. Като цяло този въпрос трябва да се вентилира по-добре.
Подозирам, че скриптовете на Python са по-преносими, но Python също изисква инсталиране на интерпретатор. На всичкото отгоре яде повече памет, неописуемо е грозен и работи по-бавно от Perl.
Допълнение: Вижте също моя тест за ефективностскриптове в Python.
Така започна моето търсене на универсален инструмент, който ви позволява бързо да създавате междуплатформени GUI приложения, като също така предоставя интелигентни указатели, уникод, постоянни изрази, интернационализация и т.н.

2. Защо Qt/Python/Java/... са лоши
След много сърфиране в търсене на отговор реших wxWidgets. В този раздел реших да изброя предпоставките, за които Python, C #, GTK и други решения бяха отхвърлени. Ако този въпрос не ви интересува, не се колебайте да преминете към следващия раздел.
БиблиотекатаQT ви позволява бързо да създавате междуплатформени GUI приложения, но има огромен брой недостатъци. Първо, те включват неясна ситуация с перспективите за развитие на проекта.
Факт е, че не толкова отдавна Nokia продаде Cute на някаква неразбираема компания Digia. Не ми се включва в потенциално мъртъв проект. Освен това Cute не е неоснователно критикуван за високата си консумация на ресурси и големия размер на програмите, създадени с него.
GTK има по-малко грешки, но също така не е перфектен. GTK приложенията, компилирани под Windows, също тежат много (със статично свързване) или изискват предварително инсталиране на GTK библиотеки (с динамично свързване).
Друг съществен недостатък на GTK е, че той използва "неродни" контроли. С други думи, GUI приложение, написано на GTK, изглежда малко по-различно под Windows, не защото всички останали Windows приложения.
Това може да ви се стори незначително, но за обикновения потребител появата на бутон със заоблени ъгли вместо обичайните остри ъгли предизвиква паник атака и моментално откъсване от реалността. Спомнете си как повечето хора плюят Gimp и OpenOffice, казват по навик. Или колко неудобноПървите няколко дни за използване на Windows Seven след няколко години използване на Windows XP.

ОколоJava ситуацията е различна. Според някои разработчици Java е нашето всичко. Други са изненадани, че Java все още е жива.
Опитах се да погледна безпристрастно на ситуацията и видях следното. Първо, ясно е, че Java приложенията са 1,5-2 пъти по-бавни от C++ приложенията. Съгласни ли сте, че вашият компютър работи двойно по-бавно за удобство на програмистите? Аз не.
Второ, оказа се, че прехваленият Garbage Collector не само решава проблеми, но и създава нови. А именно периодичното замразяване на мобилни устройства, работещи на Symbian и Android, е свързано с работата на GC. Освен това Java не е без проблеми с необичайни контроли.

Имало едно време Sun (която тогава беше автономна компания) направи отлични планове да превземе света с Java. Например, всички устройства от дистанционни за телевизори и микровълнови печки до DVD плейъри и мобилни телефони ще имат софтуер, написан на Java, и също ще взаимодействат помежду си, използвайки 1-ви протокол. Казват, че Java аплетите ще бъдат почти по-популярни от GIF формата.
Какво стана на практика? Аплетите се оказаха безполезни за никого (през целия си живот се натъкнах на тях най-много три пъти). Сред настолните приложения Java е силно изместена от C #.
Допълнение: Не толкова отдавна Java беше изключена от стандартната база на Linux. Оказва се, че дори в света на UNIX това не е добре дошло.
Така Windows Phone скоро ще бъде на почти всяко второ мобилно устройство (39% от пазара за Nokia и 9% за Microsoft). Фактът, че Windows е инсталиран на 90% от отделните компютри, според мен не си струва да се помни. От недостатъците DotNet има само ниска (но почти винаги приемлива) производителност, трудностите, присъщи наGC, също не е напълно съвместим с UNIX.

Python/Ruby и скриптовите езици като цяло бяха отхвърлени поради проблеми с преносимостта (от потребителите на Windows се изисква да изтеглят и инсталират интерпретатори) и лоша производителност. Вниманието ми обаче беше привлечено от проекта Cython (преводач на код от Python към C).
Възможностите тук са много забележителни - от използването на Python в програми на C / C ++ до пълното компилиране на скриптове на Python в изпълними файлове и в резултат на това решаване на проблеми с производителността и преносимостта. Но този въпрос тепърва ще се вентилира правилно.
И накрая, бих искал да спомена проектаLazarus. Това е опит да се направи крос-платформен RAD-IDE, базиран на Free Pascal. На практика - клонинг на Borland Delphi, безплатен и способен да създава лесно преносими приложения. Доколкото разбирам, този клонинг е повече от успешен.
Нямам никакви предубеждения към Pascal, но като човек, повреден от C-подобни езици, не се чувствам комфортно да работя с Lazarus. Имайки предвид колко хора пишат на Delphi и факта, че повечето училища започват да програмират с Pascal, тази IDE лесно ще намери своите почитатели.
3. wxWidgets и способности на Code::Blocks
Първо, нека разберем кой кой е.wxWidgets е рамка (библиотека, набор от класове - каквото искате) за създаване на междуплатформени приложения. Нещо като STL + Boost + GTK събрани в едно.
Какво ни дава wxWidgets?

* „Използват се собствени контроли“ означава, че когато се компилира под Windows, приложението ще изчертае GUI с помощта на WinAPI, а когато се компилира под UNIX, с помощта на GTK или, ако искаме, дори на чистX11. Защо не трябва отново да плашите потребителя с непознати контроли (контроли), както правят Java и Cute, беше казано миналия петък (чисто в случай, че внезапно го прескочите).
Другата страна е необходимостта да се провери как изглежда интерфейсът на всяка система. За щастие, всичко тук е три порядъка по-просто, отколкото в оформлението на различни браузъри.
Това е донякъде досадно и забавя скоростта на кодиране (да не говорим за факта, че скоростта на конструиране в C ++ винаги е много по-ниска, отколкото в Perl или Python). За щастие, Code::Blocks могат автоматично да съпоставят скоби и кавички, така че нашите усилия са сведени до минимум.
Изглежда, че wxWidgets в момента е най-малкото зло, което да изберете в разработката на различни платформи. Поне при мен е така.
Бих искал също да отбележа, че има косвени признаци за възможността за разработване на мобилни приложения с wxWidgets. Но в момента не се интересувам достатъчно от тази тема и ситуацията с програмните езици за мобилни устройства в момента е много нестабилна.
4. Какво следва?
Когато започнах да пиша тази публикация, планирах да говоря за инсталирането на Code::Blocks под различни операционни системи (има някои тънки точки), както и да дам някои примери за код. Но публикацията излезе много голяма, така че ще пиша за посочените неща в някоя от следващите бележки.
Допълнение: Продължаване на темата - Примери за използване на wxWidgets.
Подобни статии
Вече втора седмица в Москва цари непоносима жега. Вентилатори и климатици не намираш по магазините, безалкохолните не помагат. Нивото на желание за работа (WHR) по десетобална скала.
Както обещах, пиша продължение на собствената си бележка заwxWidgets. Тази публикация ще опише инсталирането на wxWidgets и Code::Blocks под различни операционни системи, основата за създаване на GUI с wxSm.
Не мога да устоя на изкушението да изразя малко повече израз във връзка с настоящата ситуация с езиците за програмиране. Както обикновено, не се преструвам, че знам истината, а просто искам да споделя Св.
През последните няколко месеца практикувах TDD. Сега разбирам, че тази техника (не бъркайте техника и методология!) Работи. Той е лесен за използване и перфектно решава напълно бетон.
Знам, че вече сте виждали повече от девет хиляди подобни бележки. Просто трябваше да се направи нещо с черновата на този пост, иначе от половин година ми е болно в очите. Беше жалко да изтрия, тъй като периодично.