Добавлен , опубликован
Добро пожаловать на главную стриницу проекта по разработке hjass! hjass - это попытка реализовать независимый, октрытый и кроссплатформенный компилятор для языка JASS, который уже вечность используется как основной скриптовый язык в Warcraft III. Была поставлена цель обеспечить полную поддержку оригинального JASS, а также его надстроек vJASS и cJass, и обеспечить удобный способ встраивания компилятора как библиотеки (подход compiler-as-a-librarary). Компилятор использует JIT компиляцию и базируется на широко распространенном фреймворке LLVM для создания оптимизирующих компиляторов, поэтому hjass на порядки быстрее своего прародителя.
Что на данный момент реализовано:
  • полная поддержка оригинального JASS, включая локальные массивы и ссылки на функции
  • базовая система модулей, позволяющая разделять код на дерево файлов:
import system.io.console // подключит system/io/console.j 
  • runtime библиотека для подключения своих native функций в язык, для вызова функций из hjass и проверки callback ссылок на hjass функции
Что пока не реализовано:
  • поддержка cJass, vJass
  • сборщик мусора (в альфе память от строк и делегатов не освобождается)
  • многопоточность
Бинарные сборки текущей альфа версии можно забрать тут.

FAQ

Какова лицензия у проекта?
Используется свободная лицензия MIT, которая позволяет программистам использовать лицензируемый код в закрытом ПО при условии, что текст лицензии предоставляется вместе с этим ПО. Является GPL совместимой.
На каком языке написан компилятор?
Весь компилятор и runtime написан на языке Haskell, однако скомпилированный в байткод hjass код не зависит от конкретного языка программирования, для реализации рантайма подходит любой язык, умеющий вызывать C функции.
Я знать не знаю Haskell и знать не хочу! Что мне делать?
Компилятор будет поставляться, и как отдельная C библиотека (.so или .dll), так и как Haskell библиотека (с немного лучшим API). А вообще, Haskell хороший язык.
Как подключать свои native функции?
Эта тематика будет подробно раскрыта в последующих материалах. Для сильных духом пока предлагаю заглянуть в тестовые примеры
Какие расширения JASS будут поддерживаться?
Сейчас в планах нативная поддержка vJass и cJass, также будет развиваться свое локальное наречие на основе лучших идей предшественников.
Какие платформы поддерживаются?
Оффициально поддерживаются Windows и GNU\Linux, остальное на усмотрение коммьюнити.
Какие имеются существенные отличия от оригинального JASS?
  • Наличие модулей
  • Снято ограничение на строгий порядок объявления функций (но для оригинального синтаксиса сохранено правило "все native, globals и объявления типов до тел функций")
Я хочу помочь. Что нужно делать?
Я всегда рад выслушать предложения и идеи, а также получить пару pull request'ов на страничке проекта на гитхабе. Также я сделаю подробные инструкции для потенциальных разработчиков, чтобы помочь продраться через первоначальный порог сборки зависимостей (для Windows ада уже есть страница )
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
18
9 лет назад
0
alexprey, нус, если беспокоишься о производительности, то по классическим бенчам хаскелль идет наравне с Java, C# и Scala. А все что можно из runtime вручную переведено в LLVM ассемблер и инлайнится в программы, весь рантайм со строны Haskell - передача указателей на malloc и native функции.
2
29
9 лет назад
2
NCrashed, да меня наверное меньше всего производительность беспокоит, иначе бы я был ярый фанат асма и чистого си :D Было бы на шарпах, было бы очень круто и я бы даже поковырялся бы в этом и встроил бы в юнити для фана :3
0
18
9 лет назад
0
alexprey, не срослось с шарпом, могу лишь предложить шарповые байндинги
0
29
9 лет назад
Отредактирован alexprey
0
NCrashed, да не будут проблемы с кроссплатформенностью. Ну ладно не срослось и ладно)
1
26
9 лет назад
Отредактирован Hanabishi
1
JASS
По функционалу он мягко говоря не очень на фоне реальных языков. Я считаю нет смысла его реализации, если уж так хочется, можно использовать Lua, с которого оный содран.
Любителям cJass вообще легче сразу пойти на плюсы/шарпы.
А вот например реализация гуя была бы интересной для нубов, но лично я не одобряю погромирование мышкой.
Haskell
Ахаха, а чего не на Лиспе-то? =D
Хаскель знают только 2.5 задрота в качестве хобби, реальной востребованости нет, какая ЦА у данного проекта - непонятно.
0
18
9 лет назад
0
Hanabishi, а кроме луа альтернатив и нет, а что делать, если луа не по душе? А встроить безопасно плюсы и шарп - анреал.
А какова разница от языка реализации самого компилятора? Да хоть на брейнфаке, все равно потом С апи делать.
В защиту хаскелля скажу, что на западе много вакансий и я не раз брал оплачиваемые подработки на этом языке. Печально, что вокруг этого языка такая темная слава.
А целевой аудитории у проекта нет, это дань уважения моему первому ЯП. Пусть у XGM будет своя реализация джасса.
0
29
9 лет назад
0
NCrashed, на счет шарпов ошибаешься, этож управляемый код, его спокойно можно анализировать.
0
18
9 лет назад
0
alexprey, с открытием языка это должно, наконец то, стать реализуемым. Моно сильно портил переносимость, как минимум необходимостью иметь две ветки проги. Но и написать анализатор не сильно проще, в hjass всего 5к строк.
0
24
9 лет назад
0
NCrashed, а насколько сложно будет подключить это дело к джаве, обертки небось писать и нативные либы биндить придется? Так то я предпочитаю Lua, но почему бы и не добавить разнообразия.
Что касается альтернатив - есть еще, как минимум, питон и JS.
0
18
9 лет назад
0
prog, нужно будет написать jni обертку, ее я и сам буду для себя писать.
Про питон забыл, извиняюсь. А V8 прикручивать к проекту тоже не сахар.
0
12
9 лет назад
0
Если уж llvm то почему не сделал транслятор из jass кода в код для starcraft2, и вообще в c# и юнити или в код для доты2? Так можно будеть старые карты варки портировать, хотя вызовы нативок хз как реализовать.
насчет cjass vjass, почему бы не использовать оригинальные трансляторы(jasshelper adichelper)?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.