Добавлен , опубликован
Раздел:
Триггеры и объекты
Содержание:

Что это?

cJass - это еще одно расширение языка JASS, которое полностью совместимо с популярным vJass. Цель его создания - дать программистам еще больше возможностей по созданию простого и качественного кода. Основными направлениями являются:
  1. Макросредства и стандартная библиотека - избавляют от рутины, позволяя сконцентрироваться на основном коде.
  2. Упрощение синтаксиса - мы не хотим снова начинать спор, какой синтаксис лучше (блоки через begin & end или {}), и более того, мы не навязываем свою точку зрения - все конструкции cJass имеют JASS-style аналоги, тем не менее мы предоставляем выбор.
  3. Оптимизация карты - основная концепция cJass - это то, что все языковые конструкции не должны сказываться на качестве генерируемого кода. Также мы работаем над встроенным оптимизатором.

Пример

Объявление переменных

Скриптовый язык JASS2 был создан Blizzard Entertainment для использования в Warcraft III. Синтаксически он больше всего напоминает Turing, поэтому не отличается лаконичностью. Для вызова функций используется ключевое слово call, для присвоения значения переменным — set, для объявления локальных переменных — local. Также необходимо выделять глобальные переменные в отдельный блок:
  globals
      integer f = 12
  endglobals
  
  function test takes nothing returns nothing
      local integer i
      call DoNothing()
      set i = f + 3
  endfunction
При использовании cJass парсер самостоятельно определяет смысл выражения исходя из контекста его применения, что позволяет опускать указаные выше ключевые слова и добиваться большего удобства при записи кода:
  integer f = 12
  
  function test takes nothing returns nothing
      integer i
      DoNothing()
      i = f + 3
  endfunction

Упрощенная запись функций

Для большего удобства и повышения наглядности, синтаксис cJass допускает упрощенную запись функций (и методов vJass). В общем виде она выглядит так:
  nothing test(integer x) {
      BJDebugMsg(I2S(x))
  }
Теперь разберем её подробнее. Сначала пишется тип возвращаемого значения (в приведенном примере функция не возвращает ничего, поэтому там стоит тип nothing), за которым следует имя функции, после чего в круглых скобках записываются принимаемые функцией аргументы (если функция не принимает аргументов, скобки можно оставить пустыми), и завершается запись блоком кода функции, заключенным в фигурные скобки. Вот, например, во что превратится приведенный выше фрагмент кода после трансляции:
  function test takes integer x returns nothing
      call BJDebugMsg(I2S(x))
  endfunction
Таким же образом записываются и методы, применяемые в vJass. Парсер сам определит, чего от него ждут — объявления функции или метода.

Как это использовать?

Просто скачайте дистрибутив (пароль для архива: cjass), распакуйте и запустите инсталлятор. У вас уже должен быть установлен JNGP.
Немного истории
А история программы начинается на ресурсе wc3c.net, когда Vexorian, выслушав предложение от ADOLF'a сделать инструкции инкремента и декремента создает ветку с обсуждением синтаксиса... и благополучно забывает об этом. Тогда ADOLF подумал: "А неплохо было бы сделать свой парсер и включить в него всяких вкусностей". Изначально программа весила меньше заветных 9000 байт, распространялась по сети ICQ/Jabber и ее использовали несколько человек.
Однажды один из ее пользователей - Van Damm (впоследствии стал соавтором) сказал "это очень удобно!" (это было сказано про то, что можно вызывать функции без ключевого слова call) - и тогда мы решили, что если это удобно, почему бы не выложить программу на публичное обозрение. Благодаря zibade у нас появился сайт, где сразу стал отписываться Dark Dragon, который помог выявить львиную долю багов и внес множество интересных предложений.
С тех пор прошло много времени, мы сделали много новых версий, вес программы вырос в 3 раза (сейчас 26 Кбайт). На данный момент у нас есть планы, касающиеся многих конструкций, оптимизатора, и всего прочего.
Благодарности
  • ADOLF — за создание AdicHelper на чистом ассемблере, а также горы терпения на доработку и исправление ошибок.
  • Van Damm — просто оказался рядом, а потом написал глючный апдейтер и эту инструкцию.
  • Dark Dragon — за те десятки (а может сотни?) багов, которые он выловил, а также предложения о синтаксисе.
  • Vexorian – за JassHelper и нежелание добавлять в него некоторые фичи.
  • Toadcop — за найденные баги, предложения и TCXAOS.
  • ShadoW DaemoN — за cj_order и выявление багов апдейтера.
  • Артте — за баги, что он нашел.
  • Hellfim — помог найти некоторые ошибки апдейтера и много опечаток руководства.
  • zibada — за предоставленный хостинг и за XGM.
  • Crock — помог нам понять логику работы VM игры.
  • LATEX, HeVeA и LEd — с их помощью я смог написать это руководство.
  • asm — лучший язык программирования.
  • Hutch — за поддержку masm
  • Олег Ющук — за OllyDbg

`
ОЖИДАНИЕ РЕКЛАМЫ...