Pawn (прежнее название — Small) — простой, типизированный 32-битный скриптовый язык программирования с синтаксисом, подобным языку Си. Компилятор генерирует P-код (или байт-код), запускаемый на абстрактной машине. Файлы исходного кода Pawn имеют расширение .pwn; скомпилированные и готовые к исполнению — .amx. Популярный язык программирования для игровых серверов Grand Theft Auto: San Andreas Multiplayer (GTA SA-MP) и Counter-Strike 1.6. Имеет необычный компилятор, а также редактор кода — Pawno.

История языка Введение в язык Pawn и в понятие абстрактной машины было описано как перспектива программистов, и опубликовано в журнале доктора Добба в октябре 1999 года. Язык был разработан для начинающих программистов, которые допускали множество ошибок, связанных с освобождением памяти компьютера.

Основой для Pawn был взят язык Си. Целью разработчиков было упростить и изменить язык Си таким образом, чтобы синтаксис языка позволял избегать или обходить те ошибки, которые допускают неопытные программисты. Выбор языка Си определило то, что этот язык в тот момент достиг максимума своего развития и был довольно популярен.

Особенности языка Pawn — это Си-подобный скриптовый язык. Можно подключать файлы (#include). Pawn — это скриптовый язык с компилятором, который выполняет статические проверки, и с абстрактной машиной, которая (статически) выполняет верификацию P-кода и динамическую проверку. С целью портирования, Pawn был написан на ANSI C. Pawn поддерживает Unicode/UCS-4 и UTF-8, а также кодовые страницы. Компилятор может преобразовать введённый исходный код в особую кодовую страницу Unicode; он также поддерживает файлы исходного кода в кодировке UTF-8. Он был установлен на микроконтроллеры Atmel ATmega128, Philips LPC2138 и LPC2106 (ядро ARM7TDMI с 32 КБ ОЗУ), а также на Texas Instrument MSP430F1611 (ядро MSP430 с 10 КБ оперативной памяти и 48 КБ Flash ROM). Pawn позволяет запускать большие скрипты с небольшим объёмом памяти. Документирование исходного кода может быть сделано с помощью «комментариев документации»; компилятор Pawn извлекает эти комментарии, объединяет их с информацией из исходного кода и записывает в XML-файл, который можно просмотреть (и распечатать) с помощью веб-браузера. Pawn поддерживает состояния и автоматы, включая переменные локальных состояний. Особенность Pawn заключается в его простоте и интуитивности. Синтаксис языка очень похож на C/C++, поэтому программисты, знакомые с этими языками, смогут быстро освоить Pawn. Кроме того, в Pawn есть множество встроенных функций, которые упрощают разработку и позволяют быстро достичь нужного функционала. Он предоставляет разработчикам возможность создавать и управлять внутриигровыми сценариями, добавлять новые возможности и изменять поведение игры.

Типы данных В языке Pawn существует 4 типа данных: Целые числа, Integer (при объявлении переменной тип данных указывать не требуется, new Переменная;) Числа с плавающей точкой (new Float:Переменная;) Логический тип, булев или Boolean (new bool:Переменная;) Символ

Примеры кода «Hello World» выглядит почти так же, как и в Си: main() { print("Hello World!"); } Пример создания и использования массива для целочисленных значений: #include <core>

main() { new array; // Инициализация массива с 4 элементами array = 43; // Изменение значения элемента с индексом 0 array = 10; // Изменение значения элемента с индексом 1 array = 799; // Изменение значения элемента с индексом 2 array = 121332; // Изменение значения элемента с индексом 3

return 1; // Возвращает 1 }

Пример цикла и оператора if-else: #include <core>

main() { for(new i = 0; i < 10; i++)

if (i != 9) printf("%d", i); else print("девять");

return 1; // Возвращает 1 } Пример использования переменных:#include <core>

main() { new a = 3; new b = 1; printf("А равно = %d, а Б = %d", a, b); // При старте будет писать: А равно = 3, а Б = 1.

return 1; // Возвращает 1 }Пример использования операторов выражения:#include <core>

main() { new a = 1; new b = 2; new c = 3; if(a < b) print("A меньше B"); // При старте будет писать: A меньше B if(c != a) print("C не равняется A"); // При старте будет писать: C не равняется A if(a == 1 && a != b) print("A равняется 1 и не равняется B"); // При старте будет писать: A равняется 1 и не равняется B if(b == 2 || c == 3) print("B равняется 2 или C равняется 3"); // При старте будет писать: B равняется 2 или C равняется 3

return 1; // Возвращает 1 } Применение языка Некоторые примеры использования языка Pawn: Grand Theft Auto: San Andreas Multiplayer — для написания игровых режимов/сценариев, использующих API, для собственных серверов популярного неофициального мультиплеера San Andreas Multiplayer игры Grand Theft Auto: San Andreas. AmxModX — в написании плагинов для AmxModX, которые позволяют выполнять сценарии на серверах игр на движке GoldSrc. Самыми популярными являются применения в играх Half-life и Counter-Strike SourceMod — в написании плагинов для модулей SourceMod, которые позволяют выполнять сценарии на серверах игр Half-Life 2: Deathmatch, Counter-Strike: Source и других игр на движке Source. WOWCube — написание прикладных игр для этой игровой консоли, и его эмулятора.

Примечания

Ссылки The Pawn Language — официальный сайт Pawn.Wiki — Форум по программированию на языке Pawn. SA-MP.Wiki — Полный сборник функций с описанием и примерами для GTA San Andreas Multiplayer.

Категория:Свободные компиляторы и интерпретаторы Категория:Скриптовые языки