Обсуждение:PowerBASIC
Добавить темуЧитал как-то предыдущую версию этого материала, когда он фигурировал в качестве статьи Википедии. Перенос его в учебную часть вполне логична. Последующие изменения очень пошли ему на пользу. Я, правда, не согласен с таким утверждением: "В PowerBasic, как и в VB, статическое связывание с библиотеками отсутствует. В этом PB похож на VB и отличается (к сожалению в худшую сторону) от остальных языков." Ну да, к программе на PowerBasic не прилепить готовый объектный модуль (хотя на их форуме видел старое сообщение о том, что это можно сделать в PowerBasic для DOS, если этот модуль сделан в Borland C++ Builder). И библиотек (статических) вообще нет. Зато PowerBasic прямо на лету "подцепляет" функции из динамических библиотек (DLL), в том числе и системных DLL Windows. А у большинства "остальных языков" (точнее, компиляторов) для связи с этими DLL применяются специальные библиотеки, прямое связывание становится проблематичным. Если разработчики упустили какую-то функцию, или есть какая-то полезная DLL, но для работы с ней нет библиотеки, тут уже приходится худо. А с PowerBasic это не проблема (правда, если функции DLL вызываются с использованием STDCALL). Так что если надо прилинковать какой-то объектный модуль - оформляйте его как DLL, а не как библиотеку. По сути, какая разница?
Еще придирка к переводу термина: Диалоговая форма имеет логический номер (Handle of Window, рукоять или ручка окна). Все-таки наиболее часто встречаемый вариант перевода Handle - манипулятор. А то "ручка окна" - это которой его открывают?
Еще хорошо бы уточнить такую вещь. PowerBasic позволяет программировать на чистом Win32 API (в силу легкости обращения к системным DLL), но приведенная в статье простейшая программа (диалоговое окно с кнопкой) сильно отличается от классического примера из книги Петзольда. Начиная с того, что основная часть программы называется PBMain, а не WinMain, и она не получает от операционной системы никаких аргументов. Да и никаких телодвижений по заполнению структуры вроде WNDCLASSEX и регистрации класса тоже не видно. Дело в том, что PowerBasic самостоятельно делает все необходимое для регистрации некого класса окна (под немудреным названием вроде #32770 (Dialog)), так что функции PBMain и Dialog New - это некие надстройки над функциями и командами Win32 API. Надстройки достаточно низкого уровня, которые позволяют, например, поддерживать абсолютно все стили окон, определенные в Win32 API. Во многих диалектах Бейсика (да и не только Бейсика) использование подобных надстроек приводит к заметному сужению возможностей программиста, а в PowerBasic от этого никаких вредных эффектов не наблюдается. Ну разве что для получения аргументов в командной строке, с которыми была запущена программа, придется делать дополнительные манипуляции. Но часто ли они нужны? Ну еще и обработку сообщения WM_PAINT PowerBasic тоже берет на себя.
И еще придирка по программе. В ней использован идентификатор %IDOK = 1. Обычно рекомендуют выбирать значения не менее 100, иначе возможен конфликт с какими-то идентификаторами, прописанными в системе по умолчанию. Хотя в исходных текстах некоторых примеров, прилагающихся к PowerBasic, во всю используются значения вроде 1 или 2, но это вроде как нехорошо.
P.S. Не, не прав я был, IDOK = 1 по MSDN, так что используется его корректное значение. И с диалоговыми окнами был не прав: это зарегистрированный стандартный класс, PowerBASIC его не создает, а использует готовым.
Да, и если это стандартный класс, то его функция обработки событий не может, естественно, предусмотреть все возникающие в ходе работы варианты и просто перенаправляет системные сообщения в стандартную процедуру обработки (DefaultWindowProc). Некоторые диалекты Бейсика тоже используют тот же самый готовый класс диалоговых окон, например, PureBASIC, и там обработка событий не организована в виде процедуры, а фактически встраивается в цикл обработки сообщений. Что выглядит по меньшей мере некрасиво. В PowerBASIC пишутся отдельные функции обработки, не являющиеся, однако, полноценными callback-функциями: они, например, никогда не ссылаются на DefaultWindowProc (все равно в нее все сваливается), и нет необходимости устанавливать возвращаемое функцией значение (это сделает DefaultWindowProc).
PPS. Да, еще такой идеологический момент. Можно встретить (в том числе и в данном материале), утверждения типа того, что PowerBASIC принципиально круче, чем VB, что это, мол, "инструмент повышения квалификации" программиста на VB, и "обучательная функция" у него развита вовсю, а вот у VB с этим полный облом. На самом деле самый лучший инструмент повышения квалификации программиста на VB - это сам Visual BASIC. Просто надо взять хорошую книгу (типа: Дан Эпплман. Win32 API и Visual Basic), штудировать и пытаться использовать прочитанное.
Ответ автора.
[править]1. По моему про объектные модули коментарий отдаёт лёгкой обидой. Нет - значит и не надо? Не нравится мне этот дивиз. Динамическая линковка это одно, а статическая несколько другое и не нужно их перемешивать. Достаточно много алгоритмических, а не интерфейсных (Win32 API) объектных модулей, на которые делает упор комментатор. Такие алгоритмические модули обычно портируются юникс программистамми для статических линковок. 2. Ну про манипулятор тоже вилами по воде писано. Перевод слова Handle как "логический номер" я видел ещё в книге с описанием MS DOS 3.3 конца 80-х г.г. Слово "ручка" конечно достаточно вольный, скорее литературный перевод, но для интерфейсных программистов, к коим я отношу VB (я и сам являюсь таковым, работая программистом 1С:Предприятие 8), достаточно интуитивный. 3. По поводу слабого раскрытия механизмов API согласен, такой задачи я перед собой и не ставил, считая это частной проблемой. Это всё равно что кто-то будет ругать меня за плохое описание Inline Assembler'а, который раскрыт ещё скромнее. 4.По поводу "повышения квалификации". Честно говоря я не согласен с постулированием механизма Win32 API как единственно верного пути к повышению квалификации. Видимо каждый судит в меру своего опыта.
В дополнение навёрстываю упущенную возможность представить своё дополнение к редактору кода PowerBasic 8. Почитать о нём можно здесь http://basicproduction.nm.ru/pbhome.htm а загрузить здесь http://basicproduction.nm.ru/POWERBASIC/hPBE8.rar Предупреждение: По ночам nm.ru иногда бывает недоступен.
ООП.
[править]В 9й версии появилась возможность создавать свои классы и объекты, так что предыдущая информация об ООП в PB устарела. 217.67.117.64 22:10, 16 января 2010 (UTC)