adic3x

cJass - дополнение к языку JASS

Published

Что это?

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 Кбайт). На данный момент у нас есть планы, касающиеся многих конструкций, оптимизатора, и всего прочего.


Views: 88 412



Elf_Stratigo #51 - 11 years ago 0
Голосов: +0 / -0
bb:эта переменная может использоваться позже
Nekit1234007 #52 - 11 years ago 0
Голосов: +0 / -0
Тогда так, если она нигде не используется, то удалять её =)
Elf_Stratigo #53 - 11 years ago 0
Голосов: +0 / -0
bb:лучше выводить отчёт и неиспользуемых глобалках, ну или даже локалках будет айс ^^
adic3x #54 - 11 years ago 0
Голосов: +0 / -0
оптимизатор удаляет ненужные функции и переменные, правда там много нюансов
Nekit1234007 #55 - 11 years ago 0
Голосов: +0 / -0
Например с последней версией сЖасса, карта сохраняется с этими гг_трг...
adic3x #56 - 11 years ago 0
Голосов: +0 / -0
они их не удалит, т.к. теоритически ты можешь вызывать функцию инициализации триггера через ExecuteFunc
ADOLF добавил:
хотя под генерируемые редактором функции можно написать проверялку)
Sebra #57 - 11 years ago 0
Голосов: +0 / -0
Теоретически можно проверять все ExecuteFunc на наличие переменных, и если нет ни одной такой функции с переменными в аргументах, невызываемые функции удалять.
adic3x #58 - 11 years ago 0
Голосов: +0 / -0
проверять все ExecuteFunc
гемора много, начнем с того, что она может быть зашита в импортированный blizzar.j/common.j
потому я забил на это. пока забил. а оптиональные функции делать всеравно
Это сообщение удалено
Toadcop #60 - 11 years ago 0
Голосов: +0 / -0
bb:Zinc > cJass
это проверено на практике.
FREEZE_ball #61 - 11 years ago 0
Голосов: +0 / -0
[b]ADOLF[/b], а нельзя ли сделать что-нибудь типа "тега неудаления" для глобальных переменных? Тегом !novjass (или как там) в этом случае особо не попользуешься. А мне эти три глобалки очень нужны.
ScorpioT1000 #62 - 11 years ago 0
Голосов: +0 / -0
FREEZE_ball, ты издеваешься?
Nekit1234007 #63 - 11 years ago 0
Голосов: +0 / -0
Было бы не плохо иметь дефайн, который подставляет билд карты:
[URL=http://i057.radikal.ru/0910/68/d35dff4f211c.png][IMG]http://i057.radikal.ru/0910/68/d35dff4f211​ct.jpg[/IMG][/URL]
ScorpioT1000 #64 - 11 years ago 0
Голосов: +0 / -0
Это еще кто-то использует ?
NCrashed #65 - 11 years ago 0
Голосов: +0 / -0
txt2:Попытался апдейтнутся до версии 1.4.0.3 c 1.4.0.1 автоапдейт зациклился, ввел ошибку '[]'. Начал перезапускать себя, его процесс жил менее секунды, поэтому убить через диспечер не получилось, перезагрузка помогла =). Опять надо ручками апдейтиться?
adic3x #66 - 11 years ago 0
Голосов: +0 / -0
А мне эти три глобалки очень нужны.
если ты из будешь использовать - они не будут удалены
Zinc > cJass
лол
сейчас на зеХелпере такие епичные треды с приглашенной звездой вексом по этому поводу)
ADOLF добавил:
хотя на хайве тоже)
NCrashed #67 - 11 years ago 0
Голосов: +0 / -0
txt2:Хотелось, чтобы при таком макросе парсер сразу подставлял значения произведений, разницы, сложения и т.п.
define {
    SetArray(type,name,n,l) = type array name [n*l] 
}
NCrashed добавил:
Иначе такая конструкция невозможна
NCrashed добавил:
Хм, а не пора ли выделить для cJass подфорум? А то сайт для обсуждений не подходит, и скоро из этой темы и раздела джазза будет такая каша...
adic3x #68 - 11 years ago 0
Голосов: +0 / -0
cJASS defines can be a powerful tool when used correctly
© внезапно угадайте кто
I think of cJASS as the democrats and vJASS/Zinc as the republicans. Why? vJASS/Zinc continues to control while cJASS continues to provide more freedom.
лол)
ADOLF добавил:
Хотелось, чтобы при таком макросе парсер сразу подставлял значения произведений
нет, прекалькуляцию предусмотрена, но уже при оптимизации
а векс это не считает (в случае если там стоят литералы)?
NCrashed #69 - 11 years ago 0
Голосов: +0 / -0
Я понимаю, что у вас с вексом там великий холивар, уж лучше давайте дальше "provide more freedom" для пользователей, демагогия полезна в ограниченных объемах.
NCrashed добавил:
а векс это не считает (в случае если там стоят литералы)?
На практике показано, что нет.
NCrashed добавил:
прекалькуляцию предусмотрена, но уже при оптимизации
С какой версии поддерживается (если уже сделана перекалькуляция)? Наверно, она должна проходить автоматически при включенном АсидОптимайзере , а я не могу норм обновиться с 1.4.0.1
NCrashed добавил:
Проблема с обновлением снята.
ScorpioT1000 #70 - 11 years ago 0
Голосов: +0 / -0
векс уг - он тормознуто инлайнит ф-ции, не рассматривай его оптимайзер)
adic3x #71 - 11 years ago 0
Голосов: +0 / -0
С какой версии поддерживается (если уже сделана перекалькуляция)?
с той, которую я выпущу сам низнаю когда
да нет, собственно что то будем думать (это я насчет холивара), сейчас нам надо выбрать политический курс.
ладно, я пошел писать новые фичи
Van Damm #72 - 11 years ago 0
Голосов: +0 / -0
Вопрос с политическим курсом всё ещё не решен до конца :(
ScorpioT1000 #73 - 11 years ago 0
Голосов: +0 / -0
Злой адик.
NCrashed #74 - 11 years ago 0
Голосов: +0 / -0
Сказывается влияние линукса, теперь есть 2 ветки обновлений =) стабильная и нестабильная. А галочка "обновлять TESH" на будущее добавлена, и кто сервер обновлений держит?
ScorpioT1000 #75 - 11 years ago 0
Голосов: +0 / -0
xgm я думаю)
adic3x #76 - 11 years ago 0
Голосов: +0 / -0
txt2:> теперь есть 2 ветки обновлений =)
та что дев по идее не обновляется автоматически, но там всегда больше фич (и возможно багов^^)
ADOLF добавил:
1.4.1.6 - не отстаем от векса
void fx () {
    int i[]
}
Chester #77 - 11 years ago 0
Голосов: +0 / -0
ADOLF, что значит сообщение Killing Vexorian при компиляции ?
Скрытая мечта хD?
Sebra #78 - 11 years ago 0
Голосов: +0 / -0
Это Векс тебя заставил :)
А как насчёт блоков из одного выражения без { и }?
NCrashed #79 - 11 years ago 0
Голосов: +0 / -0
Это такое направление политики выбрали xD
Это такое объявление массива?
Van Damm #80 - 11 years ago 0
Голосов: +0 / -0
та что дев по идее не обновляется автоматически
обновляется автоматически то, что выберешь в настройках =)
Van Damm добавил:
Это такое объявление массива?
да
DragonSpirit #81 - 11 years ago 0
Голосов: +0 / -0
Хз баг ли это,но когда нажимаешь AutoUpdate Settings,то запускается апдейтер о.О,версия AdicHelper`a 1.4.1.5
Van Damm #82 - 11 years ago 0
Голосов: +0 / -0
О_О жутко странно. Какая версия апдейтера?
Sebra #83 - 11 years ago 0
Голосов: +0 / -0
А что там в 1.4.1.6 ?
Ченджлог не правлен.
DragonSpirit #84 - 11 years ago 0
Голосов: +0 / -0
Van_Damm, такая же,паком качал
Van Damm #85 - 11 years ago 0
Голосов: +0 / -0
DragonSpirit, ну попробуй сам запустить AHupdate.exe /options
ZeToX2007 #86 - 11 years ago 0
Голосов: +0 / -0
Вопросс: кто нибудь так делает ?)
constant int Type## helm = 1
constant int Type## boots = 2
... (и тд)
есть функция
void f0x00(integer){
....
}
и дефайка
define STI(T) = f0x00(Type## T)
мне кажется удобно
Sebra #87 - 11 years ago 0
Голосов: +0 / -0
У Векса есть key
У Адика есть enum
В чём принципиальное отличие твоего предложения?
LordSerga #88 - 11 years ago 0
Голосов: +0 / -0
Просто супер!!! я мануал проситал!! стока возможностей!
Вот как это???
integer i = 7, j, k
что произойдёт??
local integer i=7
set i=j
set i=k
или что буцдет? О_О
ZeToX2007 #89 - 11 years ago 0
Голосов: +0 / -0
LordSerga, неааага
local integer i = 7
local integer j
local integer k
NCrashed #90 - 11 years ago 0
Голосов: +0 / -0
Прошу подробнее рассказать про "optional functions"
NCrashed добавил:
И встречное предложение - сделайте Variadic function =)
Van Damm #91 - 11 years ago 0
Голосов: +0 / -0
Прошу подробнее рассказать про "optional functions"
Это к выпиливанию кода. А вы что подумали?
Если эти функции (которые не принимают параметров) нигде не юзаются, то они спокойно выпиливаются.
Это сообщение удалено
adic3x #93 - 11 years ago 0
Голосов: +0 / -0
Это к выпиливанию кода.
вам сойдет такое ?
грубо говоря, так надо метить функции, которые вы возможно не будете вызывать через call, и точно не будете вызывать через ExecuteFunc
стоить отметить, что все функции, которые принимают какие либо входные аргументы (т.е. все кроме takes nothing) считаются по умолчанию optional
опциональная функция выпиливается оптимизатором при сохранение, если она не используется
NCrashed #94 - 11 years ago 0
Голосов: +0 / -0
Теперь все ясно, делайте ключевое слово "optional" пригодится
adic3x #95 - 11 years ago 0
Голосов: +0 / -0
оно уже сделанно в "дев" версии, правда в ней еще прибавленно несколько багов, которые я пофиксю через пару дней
Hellfim #96 - 11 years ago 0
Голосов: +0 / -0
ADOLF, слава богу ты пришел, тебе вд сказал про баг с каунтером? Если нет, то он прибавляется только до 9.
Так же несколько полезных предложений по его улучшению:
  1. Получить текущее значение счетчика.
  2. Обнулить счетчик.
Это реально важно и нужно (мне во всяком случае =)).
Van Damm #97 - 11 years ago 0
Голосов: +0 / -0
Hellfim, всё уже украдено до вас. Будет, но не так, как ты думаешь.
adic3x #98 - 11 years ago 0
Голосов: +0 / -0
коунтер пофиксил, скоро выльем
там я еще кое что фиксил, и надо еще что то отфиксить)
ScorpioT1000 #99 - 11 years ago 0
Голосов: +0 / -0
да кстати сам по себе один счетчик не имеет смысла ведь у нас тут ооп зашкаливает, все либы независимы итп))
Van Damm #100 - 11 years ago 0
Голосов: +0 / -0
да кстати сам по себе один счетчик не имеет смысла ведь у нас тут ооп зашкаливает, все либы независимы итп))
и что вы таки предлагаете?