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

Зачем?

Я продолжал думать, что vJass должен оставаться настолько близким к JASS языком, насколько это возможно. Такой подход позволяет сохранять целостность языка, однако может плохо сказываться на разработке карт, поскольку подталкивает придерживаться не самых лучших идей оригинального JASS. vJass не может существовать вечно, как единственная альтернатива, что зародило планы к реализации другого языка. Иная причина появления Zinc заключается в простой радости от самого процесса проектировки синтаксиса.
У меня была лишь расплывчатая идея создания нового языка, до того дня, когда я начал писать случайный текст в теме на wc3c.net в поисках лучшего подхода, спрашивая мнение участников. Работа была вдохновлена и другим событием, которое произошло на тот момент. Большое количество обсуждений многословности языка JASS принесли свои плоды и я начал чувствовать себя неуютно во время очередного переписывания кода способности Гидры. Код был не просто многословен, это было желание не указывать все члены библиотеки приватными явно, или необходимость объявить приватные члены библиотеки до их использования. На тот момент существовали альтернативы vJass, более продвинутые и мощные, возможно, слишком мощные и полные ништяков, которые я не пытался высматривать долгое время, не желая обращать внимание на существующие проблемы. Все это указывало на необходимость взяться за дело.
Zinc служит целям отличным от Jass. Честно говоря, основная задача данного языка, это нащупать почву для дальнейшей поддержки мультиязычности и развлечение в процессе его реализации. Тем не менее, Zinc так же служит хорошей альтернативой vJass сам по себе.
Название Zinc, это акроним от ZINC is not C (ZINC, это не C). Однако, следуя JASS традиции, вы можете его именовать как Zinc так и ZINC.
Но почему мы говорим что ZINC, это не C? Что же, потому что синтаксис лишь пытается следовать классическому стилю языка C, но не соответствует ему на все 100%, поскольку в C присутствуют элементы, которые я просто не хотел заимствовать. Zinc так же старается не давать вам ложного впечатления, будто его изучение каким-либо образом поможет освоить язык C, или якобы люди, знающие C-подобные языки, будут чувствовать себя намного свободнее в Zinc и т.д.
Позвольте мне перечислить некоторые правила работы языка.

C-подобный синтаксис

Итак, синтаксис по большей части вдохновлен языком C, почему? Просто потому что мне нравится этот синтаксис. Однако, во многих случаях, он не так уж хорош. Он не является панацеей, что сделает ваш код проще для чтения или что-нибудь вроде этого, в действительности, данный синтаксис обладает приличным потенциалом сделать ваш код крайне сложным в понимании и поддержке. Тем не менее, он мне нравится, хотя бы за такие простые вещи как {} и отсутствие необходимости их использования в единственных инструкциях. (Использование {} дает вам набор преимуществ, если редактор поддерживает подсветку синтаксиса)

Немногословность

Многим не нравится многословность, однако именно эта вещь делает Jass (и vJass) намного проще для понимания. В этом есть плюсы и минусы. Zinc предполагается как дополнение к vJass, который проигрывает в скорости написания кода, но выигрывает в простоте его чтения. Zinc приносит в жертву простоту чтения, дабы позволить писать код быстрее и компактнее.
Речь не только о количестве ключевых слов, которые вы вынуждены писать, но и в количестве ключевых слов, которые вы могли бы написать. Zinc старается уменьшить и то и другое и если вы по прежнему будете встречать такое ключевое слово как library, вы больше не увидите слова array... Zinc пытается использовать операторы там, где это возможно или по крайней мере переработать ключевые слова.
И опять, это не панацея, это компромисс. Код станет более насыщен символами или будет нуждаться в контексте, а для его чтения потребуется особое внимание и набор определенных знаний.

Читабельность

Если Zinc не многословен, это не оправдание, чтобы сделать его совершенно не комфортным языком для чтения. Это одна из причин, по которой Zinc не следует синтаксису C слепо. Это так же причина, по которой вы не встретите глупых аббревиатур, введенных с целью сократить длину токенов.

Разделение

Это очень важная вещь. Если мы позволим располагать vJass и Zinc код где угодно вместе, без всякого разделения, это приведет к
a. Большим трудностям в чтении кода
б. Отсутствию какой-либо целостности
в. (и самое главное) Большим трудностям парсинга кода...
Zinc, это отличный от Jass язык, следовательно он должен храниться отдельно, в отдельных файлах, отдельных триггерах. Парсер будет выдавать ошибку при любой попытке использовать vJass синтаксис внутри Zinc конструкций и наоборот.

Структурное программирование

Что действительно заставило меня начать эту работу, так это постоянные loop...exitwhen...endloop конструкции в процессе кодирования способностей моей Гидры. Zinc представляет альтернативу этому макаронному аду, делая код более структурированным.

vJass совместимость

Мы должны иметь возможность использовать Zinc библиотеки, даже если весь остальной код карты написан на vJass. У нас должна сохраняться возможность использовать vJass библиотеки внутри Zinc библиотек и наоборот.
Но почему? Потому что вынужденный порт кода на другой язык, это слишком сложная работа. А еще, потому что vJass, это хороший сам по себе язык и мы не можем заставить всех и каждого от него отказаться. Фактически, этого делать и не следует, покуда документации по vJass намного больше, а его синтаксис является куда более простым для чтения. Это хороший язык для очень многих людей.

"Не живите во лжи"

Лучше всего избегать реализации возможностей, которые выглядят круто на бумаге, но не работают сладко да гладко в конечном итоге.

Жесткость

Если вы пользовались vJass прежде, то читая далее заметите - Zinc имеет немного меньше функций. Например, отсутствуют области.
Так же вы обратите внимание, что Zinc вынуждает вас исполнять те или иные действия более правильно. Например, подталкивает вас использовать библиотеки повсеместно, поскольку иначе вы не сможете использовать этот язык в принципе. Вы не сможете написать даже функцию вне какой-либо библиотеки. Более того, все члены библиотек по умолчанию приватные.

Исправление vJass ошибок

Этот пункт идет рука об руку с предыдущим. В vJass существует множество элементов, которые мне не нравились вообще, но их удаление или изменение нарушит обратную совместимость. Я воспользовался шансом разработать язык Zinc, чтобы уничтожить эти недостатки.