Добавлен , опубликован

Что это?

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

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

Просто скачайте дистрибутив (пароль для архива: cjass), распакуйте и запустите инсталлятор. У вас уже должен быть установлен Jass New Gen Pack.
Ознакомиться с возможностями можно, прочитав руководство пользователя cJass (off-line версия этого файла также имеется в директории программы).

Что-то не работает!

В настоящий момент мы активно дополняем язык всевозможными конструкциями, поэтому полноценная проверка синтаксиса пока отсутствует. Но мы всегда внимательно изучаем
bug-репорты, которые можно оставить в этой теме.

У меня есть идея: а не плохо бы...

Мы всегда рады выслушать Ваши идеи и предложения по внесению каких либо новых возможностей в язык, расширению стандартной библиотеки и т.д. Иногда мы даже действительно делаем то, что Вы нам предлагаете ;) Наша секция обратной связи ждет Вас!
И напоследок немного истории.
А история программы начинается на ресурсе wc3c.net, когда Vexorian, выслушав предложение от ADOLF'a сделать инструкции инкремента и декремента создает ветку с обсуждением синтаксиса... и благополучно забывает об этом. Тогда ADOLF подумал: "А неплохо было бы сделать свой парсер и включить в него всяких вкусностей". Изначально программа весила меньше заветных 9000 байт, распространялась по сети ICQ/Jabber и ее использовали несколько человек.
Однажды один из ее пользователей - Van Damm (впоследствии стал соавтором) сказал "это очень удобно!" (это было сказано про то, что можно вызывать функции без ключевого слова call) - и тогда мы решили, что если это удобно, почему бы не выложить программу на публичное обозрение. Благодаря zibade у нас появился сайт, где сразу стал отписываться Dark Dragon, который помог выявить львиную долю багов и внес множество интересных предложений.
С тех пор прошло много времени, мы сделали много новых версий, вес программы вырос в 3 раза (сейчас 26 Кбайт). На данный момент у нас есть планы, касающиеся многих конструкций, оптимизатора, и всего прочего.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
5
12 лет назад
0
А сочетается ли AdicHelepr (cJass) c обновлённым JassHelper 2012-03-10 (vJass)?
0
33
12 лет назад
Отредактирован adic3x
0
Совмещается с помощью //! nocjass и //! endnocjass в перед и после нововведений.
Этот комментарий удален
0
24
12 лет назад
Отредактирован Faion
0
ADOLF, fix this plz:)
0
24
12 лет назад
Отредактирован Faion
0
Предлагаю новую конструкцию для препроцессора:
#define <callback onInit({0}){{{1}}}, arg1, arg2 >= 
{
  callback onInit(arg1)
  {
    arg2
  }
}

//{{{1}}} это не ошибка, это экранирование `{` и `}`

#define <{0}.Destroy(), arg1> = Destroy(arg1);
0
33
12 лет назад
0
Я ничего не понял. В любом случае - удачи!
0
24
12 лет назад
0
ADOLF, ок понимаю, подскажи мне хотя бы, как произвести препроцессинг кода, до обработки cJass'ом. А именно интересует как скормить cjass'у преобразованный war3map.wct. Все остальное не проблема запилить, в т.ч. любые синтаксические cjass конструкции, главное реализовать то что я указал выше.
2
33
12 лет назад
Отредактирован adic3x
2
Там же у меня была фишка с плагинами? Надо рыть тему и фидбек на сжасс.хгм.ру, где я это описывал.
Вот:
Plugins are analog of external tools in jasshelper, but:
run it before processing code (when I started writing adiсhelper I could not do it with external tools, and I had to edit Lua)
when writing a preprocessor you no need to open the map, extract script, repack it, look it your tags, etc.
You can pass more than one command line in external
You can write a plugin in any language, which compiles to the *.dll (C, Delphi, basic, asm, etc.)
writing a specific plugin may be necessary in rare cases, so much not to think about)
...
When plugins is necessary:
create your own zinc with syntax sugar
write own specific preprocessors
create database of terrain (read war3map.w3e) or placed doodads
...
#custom test (command line)
code there
#endcustom
It load %adic_helper_dir%\plugins\test.dll and call _stdcall cjplugresult ParseCode (*cjpluginfo arg)
It run before cJass parser, so you may use cJass syntax, or add (temporary) ! lua ... ! endlua - then cJass parser ingone your code.
cjplugresult - is windows exit code analog:
0x00000000 - succesfull!
0x00000001 ... 0xfffffffe - error, plug display information about error to user
0xffffffff - error, cJass display [21] Critical error: unknown error in plugin
Struct cjpluginfo is:
	_dCstCodeStart		dd	;; addr of input code
	_dCstCodeSize		dd	;; size in bytes of input code
	_dCstCodeDest		dd	;; addr of dest
	_dCstCodeFinalSize	dd	;; parsed code size
	_dCstArguments		dd	;; null term string, arguments to plugin
cjass himself will take care of memory allocation, all you need to - write your code to the specified address (_dCstCodeDest) and set it size (_dCstCodeFinalSize)
There is demo plugin with source, which add string s="Hello from plugin!" to code. Create plugins directory, place it there and try parse code from this post...
Не факт, что это не отвалилось в каком либо билде ;)
Проверил, работает. Я таки крут
#custom test ()

#endcustom
0
24
12 лет назад
0
Хм, thx, как раз со следующей недели ухожу в отпуск, попробую запилить :)
0
29
12 лет назад
0
Faion, лучше уж тогда свой препроц пиши, алгоритм все равно тот же, просто не придется юзать custom, это тут не к месту, по запуску препроца из луа могу подсказать, хотя там все предельно просто, я сам писал поддержку кириллицы на жаве.
В общем, как адик и написал, нужно достать из карты код, пропарсить и засунуть обратно.
0
33
12 лет назад
0
#custom делает в целом тоже самое.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.