Foreword

Материал из Pawno Info Wikipedia

Предисловие


PAWN - это простой, нетипизированный, 32-разрядный “скриптовый” язык с синтаксисом, подобным C. Скорость выполнения, стабильность, простота и небольшая занимаемая площадь были основными критериями разработки как языка, так и интерпретатора/абстрактной машины, на которой выполняется программа PAWN.

Приложение или инструмент не может выполнять все функции для всех пользователей. Это не только оправдывает разнообразие редакторов, компиляторов, операционных систем и многих других программных систем, но и объясняет наличие в приложениях обширных возможностей настройки и языков макросов или сценариев. Мои собственные приложения содержали множество небольших языков; большинство из них были очень простыми, некоторые - обширными... и большинство потребностей можно было решить с помощью языка общего назначения с библиотекой специального назначения. Следовательно, PAWN.

Язык PAWN был разработан как гибкий язык для управления объектами в главном приложении. Набор инструментов (компилятор, абстрактная машина) был написан таким образом, чтобы они были легко расширяемы и могли работать на различных программных/аппаратных архитектурах.

PAWN является потомком оригинального Small C от Рона Кейна и Джеймса Хендрикса, который, в свою очередь, был подмножеством C. Некоторые из модификаций, которые я внес в Small C, например, удаление системы типов и замена указателей ссылками, были настолько фундаментальными, что я с трудом мог назвать их своими. язык больше не является “подмножеством языка Си” или “диалектом языка Си”. Поэтому я убрал букву “С” из названия и использовал “SMALL” в качестве названия языка в своей публикации в журнале доктора Добба и в последующие годы. Во время разработки и сопровождения продукта я получал множество запросов на внесение изменений. Одним из часто запрашиваемых изменений было использование другого названия для языка — поиск информации о МАЛОМ скриптовом языке в Интернете был затруднен из-за того, что “маленький” был таким распространенным словом. Смена названия произошла вместе со значительным изменением языка: появилась поддержка “состояний” (и автоматов состояний).

Я в долгу перед Роном Кейном и Джеймсом Хендриксом (а с недавних пор и перед Энди Юэном) за их работу над Small C, а также перед журналом Dr. Dobb'S Journal за ее публикацию. Несмотря на то, что я, должно быть, по нескольку раз касался почти каждой строки исходного кода, мелкие начертания на языке Си все еще хорошо видны.

Подробное описание целей разработки и компромиссов приведено в приложении C; здесь я хотел бы кратко остановиться на нескольких ключевых моментах. Как уже говорилось в предыдущих параграфах, PAWN предназначен для настройки приложений (путем написания сценариев), а не для написания самих приложений. PAWN слаб в структурировании данных, потому что программы PAWN предназначены для манипулирования объектами (текст, спрайты, потоки, запросы и т.д.) в главном приложении, но программе PAWN намеренно запрещен прямой доступ к каким-либо данным за пределами ее абстрактной машины. Единственным средством, которым располагает программа PAWN для манипулирования объектами в главном приложении, является вызов подпрограмм, так называемых “собственных функций”, предоставляемых главным приложением.

PAWN обладает гибкостью в этой ключевой области: вызове функций. PAWN поддерживает значения по умолчанию для любых аргументов функции; он поддерживает как вызов по ссылке, так и вызов по значению, а также “именованные” и “позиционные” аргументы функции. В PAWN нет механизма “проверки типов”, поскольку это язык без типов, но он предлагает взамен механизм “проверки классификации”, называемый “теги”. Система тегов особенно удобна для аргументов функций, поскольку каждый аргумент может указывать несколько допустимых тегов.

Для любого языка сила (или слабость) заключается не в отдельных особенностях, а в их сочетании. Например, я считаю, что комбинация именованных аргументов, которая позволяет вам указывать аргументы функции в любом порядке, и значений по умолчанию, которые позволяют вам пропустить указание аргументов, которые вас не интересуют, представляет собой удобный и “описательный” способ вызова (собственных) функций для управления объектами в главном приложении.

CompuPhase, Февраль 2024