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

Что это?

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 Кбайт). На данный момент у нас есть планы, касающиеся многих конструкций, оптимизатора, и всего прочего.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
18
А что тут помогать, идёшь учишь синтаксис и делаешь. Если ты знаешь как сделать, то что ты просишь, на джассе, то при переделке на сджасс не должно быть проблем.
Этот комментарий удален
18
Готового не даю. Ладно, тогда поступим так, ты даёшь код на джассе, а я тебе его переписываю на сджасс.
Nekit1234007 добавил:
Иначе, дальнейший разговор бесполезен.
3
Вот
function Trig_trignobeone_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'ANsh' ) ) then
        return false
    endif
    return true
endfunction

function Trig_trignobeone_Actions takes nothing returns nothing
    call DoNothing(  )
endfunction

//===========================================================================
function InitTrig_trignobeone takes nothing returns nothing
    set gg_trg_trignobeone = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_trignobeone, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_trignobeone, Condition( function Trig_trignobeone_Conditions ) )
    call TriggerAddAction( gg_trg_trignobeone, function Trig_trignobeone_Actions )
endfunction
18
library Spell initializer Init {
	#include "cj_types.j"

	private void OnCast() {
		DoNothing()
	}

	private void Init() {
		trigger t = CreateTrigger()
		TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
		TriggerAddCondition(t, lambda bool() {
			return GetSpellAbilityId() == 'ANsh'
		})
		TriggerAddAction(t, function OnCast)
	}
}
3
Cпасибо
Aidekqz добавил:
хмм, карта не запускается T_T
18
Версия сджасса должна быть не стабильной, например 1.4.2.14.
31
Извините, что не совсем по теме:
Nekit1234007:
А что тут помогать, идёшь учишь синтаксис и делаешь.
Можешь дать ссылочку ещё на синтаксис vJass
24
как насчет введения механизма аннотаций?
например как-то так:
1: аннотация заменяющая ключевое слово optional
//@optional
void SomeFunc(){


}
а может даже и так:
2: аннотация указывающая препроцессору что в следующей строке он должен искать использование лямбда-функции и желательно с остановкой обработки и выдачей ошибки если не находит
пример использования лямбда-функций от ADOLF переделанный с использованием аннотаций

struct sa {
	nothing f () {
		//@lambda
		code c = nothing () {}
	}
}

struct sb {
	nothing f () {
		//@lambda 2
		code c = nothing () { code c = nothing () { DoNothing() } }
	}
}

nothing main () {
	//@lambda
	code a = integer () { return 0x00 }
	//@lambda
	code b = integer () { return 0x00 }
	//@lambda 2
	code c = code () { return nothing () { DoNothing () } }

}

function config takes nothing returns nothing
	//@lambda
	code c = nothing () {}
endfunction

nothing fx () {
	     //@lambda
	    TimerStart(CreateTimer(), 0., false, void () { DoNothing() } )
}

nothing e (code a, code b) {}
//@lambda 2
nothing test () { e( nothing () {}, nothing () {}) }
первое реализовать не так уж сложно даже на ассемблере, а вот на счет второго не уверен, да и не уверен что оно того стоит
ну и безумная идея напоследок
/*
инициализация шаблона
$func, $begin, $body, $end - места вставки заголовка, начала блока, тела и конца блока функции, соответственно
a,b,c - параметры шаблона и места их вставки
*/
//@template beginend(a,b,c) = $func c $begin a $body b $end

/*
макросы, которые будут использованы в качестве параметров шаблона
*/
define ololo1 = { DoNothing() }
define ololo2 = { DoNothing() ; DoNothing() }
define ololo3 = { integer a }

/*
использование шаблона для преобразования функции
*/
//@template beginend ololo1 ololo2 ololo3
void SomeFunc(){

	//какой-то код

}
преобразуется в
void SomeFunc( ololo3 ){
ololo1

	//какой-то код

ololo2
}
или в
void SomeFunc( integer a ){
DoNothing()

	//какой-то код

DoNothing() ; DoNothing()
}
29
prog, все бред и не нужно + аннотации пишутся без двойного слеша.
хотя про optional в принципе нормально, но не нужно все равно.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.