Pawn

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Pawn
Pawn logo.png
Тип исполнения:

компилируемый

Появился в:

1998

Автор(ы):

ITB CompuPhase

Расширение файлов:

.pwn, .p, .amx

Релиз:

4.0.4733 (22 июня 2012[1])

Испытал влияние:

Small-C[2]

Лицензия

лицензия zlib

Сайт:

compuphase.com/pawn/pawn.htm

Pawn (прежнее название — Small)[1] — простой, не типизированный 32-битный скриптовый язык программирования с синтаксисом, подобным языку Си. Компилятор генерирует P-код (или байт-код), запускаемый на абстрактной машине. Файлы исходного кода Pawn имеют расширение .pwn. Скомпилированные и готовые к исполнению файлы получают расширение .amx

История языка[править | править исходный текст]

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

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

Особенности языка[править | править исходный текст]

  • Pawn - это Си-подобный скриптовый язык
  • Вы можете подключать файлы(include) в Pawn, так что вы сможете организовать аккуратную структуру Pawn кода
  • 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 поддерживает состояния и автоматоны, включая переменные локальных состояний.

Применение языка[править | править исходный текст]

Grand Theft Auto: San Andreas Multiplayer[править | править исходный текст]

Язык Pawn активно используется для написания игровых режимов/сценариев, использующих API, для собственных серверов популярного неофициального мультиплеера San Andreas Multiplayer игры Grand Theft Auto: San Andreas.

Counter Strike: AmxModX и SourceMod[править | править исходный текст]

Язык Pawn используется в написании плагинов для модулей AmxModX и SourceMod, которые позволяют выполнять сценарии на серверах мультиплеера игры Counter Strike.

Типы данных[править | править исходный текст]

В языке Pawn существует 4 типа данных:

Примеры кода[править | править исходный текст]

"Hello World" выглядит так же как и в Си:

#include <core>
main() 
{
    print("Hello World!");
    return 1; // Возвращает 1
}

Пример создания и использования массива для целочисленных значений

#include <core>
main() 
{
    new array[4]; // Инициализация массива с 4 элементами
    array[0] = 43; // Изменение значения элемента с индексом 0
    array[1] = 10; // Изменение значения элемента с индексом 1
    array[2] = 799; // Изменение значения элемента с индексом 2
    array[3] = 1212; // Изменение значения элемента с индексом 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
}

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]