Что такое Haxe и почему он может быть вам интересен

Привет, меня зовут Дима. Я Full Stack программист, разрабатываю кроссплатформенные приложения и игры для web, desktop и mobile платформ. Чуть больше пяти лет я использую Haxe в своей повседневной работе. И так уж случилось, что большая часть Haxe-девелоперов используют его (в том или ином виде) только при разработке игр. Это, на мой взгляд, одна из причин недостаточной осведомленности о том, как его можно применять в других направлениях разработки ПО. В этой статье я хотел бы пролить свет на то, чем же является Haxe и почему вам стоит задуматься о том, чтобы начать использовать его в своих проектах уже сегодня.

О чем вообще речь?

Haxe — это open source инструмент (toolkit) для разработки кроссплатформенного ПО, в основе которого лежат такие вещи как:

  1. Сам язык Haxe со строгой типизацией (но для любителей динамики есть возможность писать динамический код!).
  2. Быстрый и современный компилятор.
  3. Стандартная, кроссплатформенная библиотека и доступ к нативным функциям всех поддерживаемых платформ.

Сильная сторона языка Haxe в том, что он в большинстве случаев не компилируется, а транслируется в другие языки. Хотя в официальной документации и используется термин «compiler», правильнее было бы назвать его «transcompiler». Для простоты понимания я буду называть его транслятором. В чем же тут сильная сторона, спросите вы? В обилии целевых платформ, список которых постепенно увеличивается: JavaScript, C#, C++, Java, PHP (включая PHP7), Python, ActionScript 3, Lua, а также загадочные Neko и HashLink.

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

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

О синтаксисе и языке в целом

Приведу основной перечень преимуществ Haxe как языка:

  • Мощная система типов (классы, интерфейсы, анонимные структуры, дженерик-типы, динамические типы, алгебрагические типы, абстрактные типы).
  • Выразительный синтаксис (все есть выражение (everything is an expression), геттеры и сеттеры, сопоставление с образцом (pattern matching), упрощенный синтаксис создания массивов (array comprehension), интерполяция строк).
  • Близость к целевой платформе (наличие extern-классов — позволяет применять нативные библиотеки конечной платформы, использование untyped кода, скрещивание Haxe с кодом целевой платформы).
  • Оптимизация (inline-методы, inline для объектов, удаление мертвого кода (dead code elimination), статический анализатор, оптимизация кода).
  • Метапрограммирование (макросы, кодогенерация на уровне выражений и целых типов — позволяет как генерировать, так и редактировать код во время компиляции, метаданные).
  • Прочие вкусности (рефлексия, препроцессор, условная компиляция, статические расширения).

И этот список на самом деле можно еще продолжить, однако не стану усложнять все на данном этапе.

Так где все это использовать?

Краткий ответ — везде. Вот вам кейс из жизни и практики. Один из моих проектов — это мобильное, полуигровое приложение, в котором используется нативный UI и OpenGL для отрисовки игровых элементов. А также NodeJS сервер, который соединяется с Firebase и обрабатывает клиентские запросы. Для решения этой задачи я написал мобильный фреймворк (что-то вроде React-native), который транслируется в С++ для iOS и в Java для Android, оставаясь полностью нативным. Но поскольку Haxe не умеет транслироваться в Objective-C, то мне все же пришлось написать небольшую прослойку для UI, которая обращалась к Obejctive-C методам из C++. Разделив логику и представление, я получил до 90% общей кодовой базы.

Используя JS как целевой язык, я продолжал писать код сервера на Haxe под NodeJS. Таким образом, сервер разделял единую логику с клиентами, написанную на одном языке, что оказалось гораздо приятнее и удобнее, чем если бы я тянул два\три\четыре разных языка на одном проекте. К слову, скоро я планирую открыть исходный код своего мобильного фреймворка.

Также Haxe постоянно выручает меня при разработке игр. Обилие фреймворков и библиотек в этой области позволяет запускать свои приложения абсолютно на всех платформах, включая консоли. А например, для тех, у кого остались проекты на ActionScript был создан такой фреймворк как OpenFL, который на 99,9% покрывает Flash API и способен запускаться как в браузере, так и на С++ платформах.

Я использую Haxe даже при написании мелких, консольных утилит, которые упрощают мне жизнь.

В итоге Haxe можно смело называть Full Stack языком. Используя только один инструмент и один язык, вы сможете гораздо более эффективно вести разработку своего продукта. И достаточно лишь поверхностного понимания целевой платформы, чтобы начать для нее разрабатывать.

Посмотрим код

В рамках этой статьи я приведу простые примеры использования Haxe для JavaScript. На мой взгляд, это один из самых оптимизированных целевых языков, так как JavaScript на выходе практически не уступает написанному вручную и остается легко читаемым.

HaxeJavaScript
class Test {
    static function main() {
        trace("Haxe is great!");
    }
}
(function () { "use strict";
var Test = function() { };
Test.main = function() {
	console.log("Haxe is great!");
};
Test.main();
})();

Попробовать самостоятельно: try.haxe.org

Справа в качестве исходных данных у нас есть класс Test со статической функцией main, которая является точкой входа для программ, написанных на Haxe. Ну а trace — функция, которая выводит отладочную информацию в консоль.

Как и говорилось выше, по сгенерированному коду слева можно заметить, что Haxe старается все решать нативными средствами платформы. В случае с JavaScript он не создает ничего лишнего для функции trace и использует нативную для JS реализацию — console.log(); 

Взгляните теперь на следующий пример:

HaxeJavaScript
class Test {
    static function main() {
        var a:Int = 10;
        var b = 20;
        var c = a + b;
        trace('Result is ${c}');
    }
}
(function () { "use strict";
var Test = function() { };
Test.main = function() {
	console.log("Result is " + 30);
};
Test.main();
})();

Попробовать самостоятельно: try.haxe.org/#3496D

Здесь мы можем увидеть сразу три интересные вещи:

  1. Хоть Haxe это строго типизированный язык, указывать тип необязательно. Haxe умеет выводить тип из выражения прямо во время компиляции.
  2. Интерполяция строк, где переменная захватывается прямо внутри самой строки.
  3. Haxe — это оптимизирующий компилятор. Он не станет генерировать вам переменные, если они нигде не используются. Haxe посчитает все во время компиляции, а в сгенерированный код подставит результат вычислений. К слову, это срабатывает статический анализатор, который можно отключить, при необходимости.

Ловко, не так ли?

Следующим примером я продемонстрирую то, что мы все еще имеем доступ к нативным функциям платформы.

Haxe

import js.Browser.document;
import js.Browser.console;

class Test {
    static function main() {
        document.addEventListener("DOMContentLoaded", function() {
            console.log(document.location);
        });
    }
}

JavaScript

(function () { "use strict";
var Test = function() { };
Test.main = function() {
	window.document.addEventListener("DOMContentLoaded",function() {
		window.console.log(window.document.location);
	});
};
Test.main();
})();

Попробовать самостоятельно: try.haxe.org/#b2A0c

И последний пример, который мы рассмотрим, — это untyped код. Untyped — это нетипизированные вставки кода на языке целевой платформы. В данном случае мы присваиваем к переменной Haxe функцию из JavaScript.

Haxe

class Test {
    static function main() {
        var a = untyped __js__('function(){console.log("Hello from untyped code!")}');
        a();
    }
}

JavaScript

(function () { "use strict";
var Test = function() { };
Test.main = function() {
	var a = function(){console.log("Hello from untyped code!")}
	a();
};
Test.main();
})();

Попробовать самостоятельно: try.haxe.org/#AD46b

И это все, что вам генерирует Haxe, больше никаких зависимостей. Вы получаете компактный .js файлик, который можете свободно подключать как на свою домашнюю страничку, так и на высоконагруженный портал (или NodeJS сервер), не беспокоясь о производительности. Будьте уверены, на выходе будет оптимизированный код.

Подобные примеры справедливы и для всех остальных языков. Но, к сожалению, здесь мы их уже не будем рассматривать.

Выводы

Является ли Haxe волшебной палочкой? Вовсе нет. Написать один раз и использовать везде не всегда возможно, ведь Haxe старается не создавать оберток над нативными кодом. Таким образом, говоря о кроссплатформенной разработке, стоит понимать, что если вы используете JavaScript-пакеты (как на последних двух примерах), то вы не сможете транслировать такой код, например, в Java. Для решения подобных задач Haxe поддерживает условную компиляцию: когда вы можете обернуть какой-либо код в директивы (define), и все, что не попадает под их условие, не будет добавлено в компиляцию. Пример: try.haxe.org/#5B0FE

Однако Haxe все равно остается очень мощным инструментом, который стоит попробовать. Особенно если вы full-stack разработчик, особенно если вы ведете разработку кроссплатформенных приложений и не хотите, чтобы голова болела сразу о трех языках разом.

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

Данная статья, скорее, просто ознакомительная. Однако если тема вызовет интерес у читателей, то я бы продолжил писать о Haxe и начал бы цикл статей с примерами и, возможно, даже уроками. Мы могли бы поговорить на такие темы как написание нативных мобильных приложений, использование NodeJS с Haxe, использование нативных библиотек целевых платформ и о разработке кроссплатформенных игр.

Как начать использовать Haxe?

  • Скачайте установщик Haxe для своей ОС.
  • Скачайте и установите VSCode и плагин vshaxe, который доступен в меню расширений VSCode (Ctrl + Shift + X).
  • Переходите к мануалу, взгляните на cookbook.
  • Начинайте писать код!

P. S. Если вы работаете под Windows, то можете установить HaxeDevelop вместо VSCode. Это IDE на основе FlashDevelop, которая со временем будет развиваться по своему пути. HaxeDevelop даст вам такие бонусы, как автозаполнение кода, рефакторинг, шаблоны Haxe проектов и многое другое.

Ссылки

Официальный сайт: haxe.org
Попробовать Haxe онлайн: try.haxe.org
Мануал: haxe.org/manual/introduction.html
Cookbook: code.haxe.org

Официальный форум: groups.google.com/forum/#!forum/haxelang
Русскоязычный skype-чат: join.skype.com/ck4xJ5Arrp3R

Связь со мной:
Email: [email protected]
Skype: dmitryhryppa

Спасибо skype-сообществу Haxe за помощь в редактировании материала.
И спасибо всем, кто дочитал ;)

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось1
До обраногоВ обраному3
LinkedIn

Схожі статті




57 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

А есть какие-то стайлгайды, инструменты для автоформатирования кода и прочие? Я тут просто посмотрел некоторые билбиотеки и примеры кода и, скажем мягко, немного разочаровался

IDE для Haxe — это HaxeDevelop, но только под Windows. Вот тут есть примеры возможностей:
Редактирование: haxedevelop.org/editing.html
Кодогенерация: haxedevelop.org/code-generation.html
Для JS разработки есть еще минифер для Css, на лету компилирует Less, Sass.Тут детальнее: haxedevelop.org/language.html

Для других редакторов есть плагины:
haxedevelop.org/other-haxe-editors.html

А что именно разочаровало? Может я смогу пролить свет на какие-то моменты.

PS. Есть еще такие интересные вещи:
github.com/...​heckstyle/haxe-checkstyle
bitbucket.org/yar3333/haxe-refactor

Я, на самом деле, имел ввиду штуковины навроде php-cs-fixer, gofmt или prettier. Разочаровло, что много где не соблюдают единый кодстайл :)

Спасибо за HaxeDevelop, я видел его упоминание на haxe.org, но слово «flashdevelop» меня отпугнуло)

А что с вакансиями? Каковы шансы фронтобека без бекграунда, в той же игровой индустрии, найти себе подходящую команду?

UPD: прошу прощения, не доглядел. Последние две ссылки это, видимо, именно то, о чём я спрашивал :)

UPDUPD: а ещё смутило, что не очень понятно, как юзать тот же самый openfl. Руководства на сайте есть, и даже не самые плохие, а вот в интернетах с поиском информации немного сложно. Искал как анимировать спрайт, так там в топ выбивались статьи с устаревшими версиями, которые уже всё.

Каковы шансы фронтобека без бекграунда, в той же игровой индустрии, найти себе подходящую команду?

Очень малы

Вы допустили опечатку в слове «ничтожно» ;)

И да и нет и не совсем.
Именно Haxe вакансий действительно немного в силу его, пока еще, малой известности. Но я знаю много специалистов, которые используют Haxe как дополнительный инструмент к основному языку. Таким образом, вакансии а-ля JS Developer в заголовке, но с опциями знания Haxe встречаются довольно часто. Их не так много, как хотелось бы, но они всегда есть.
Пример таких вакансий:
stackoverflow.com/...​loper-for-cacoo-nulab-inc
stackoverflow.com/...​docler-holding-luxembourg

«Пока еще»? Так он существует уже лет 7, минимум, и по прежнему неизвестен широкой публике. Почему что-то должно измениться?

Да, Haxe уже достаточно взрослый. Но раньше он воспринимался и, в целом, позиционировался только как замена Flash технологии, популяризировался только на флеш форумах. Потому и круг лиц, использующих его неширокий, подавляющее большинство — самозанятые флешеры, которые занимались флеш играми и их продажей. Не было компаний, которые взяли бы технологию под свое крыло с финансовой поддержкой. Это был просто опенсорс проект на гитхабе, который мейнтейнили 5-10 человек.
Но сейчас, в последние годы, Haxe стал чем-то значительно больше чем замена Flash и, я считаю, это отличная альтернатива многим другим технологиям. Постепенно, появляется все больше и больше компаний, которые берут Haxe в качестве инструмента разработки и финансово поддерживают Haxe Foundation. Важно упомянуть, что Haxe оставался непопулярным не из-за того, что он плохой, а из-за того, что у Haxe нет евангелистов и денег на продвижение, поездки на большие митапы и презентации. Конкурировать с MS и их TypeScript, например, Haxe просто не может финансово. Но ситуация постепенно меняется, это видно изнутри коммьюнити. Приходят новые компании и новые люди. Большая их часть — это все еще игры, но количество неигровых компаний тоже растет.
В общем, популярность Haxe растет — это факт, но хотелось бы, конечно, чтобы рост был активнее.

OpenFL — это кроссплатформенный клон Flash API. Анимировать спрайт там аналогично флешу.
Помимо OpenFL есть и другие фреймворки, например:
babylonhx.gamestudiohx.com
github.com/pixijs/pixi-haxe
bitbucket.org/yar3333/haxe-threejs
github.com/Kode/Kha

Верно. HaxeDevelop — это его форк. Пока там отличий практически нет, но в дальнейшем HaxeDevelop планируют сделать кроссплатформенным.

Посмотрел на их официальном сайте, так там последний релиз HD был чуть больше года назад, в отличие от самого FlashDevelop’а. Грустненько это немного.

Релиз FlashDevelop был тоже год назад. Новая версия уже доступна в development режиме, скоро намечается релиз. После релиза обновится и HaxeDevelop.

примеры на Javascript не убедительны. Так уже давно никто не пишет. Вы слышали про ES6, babel и прочее?

Приведенный JS — сгенерированный JS ES5 из Haxe, а не руками написанный мною. Babel делает тоже самое.
Поддержка генерации ES6 будет добавлена в Haxe в следующей версии (во всяком случае так планируется).

Штука интересная. Но я бы учил Яву.

old.haxe.org/ref
может, кому будут полезны эти ссылочки для обсчего развития в теме.
Это старый сайт, как по мне тут быстрее искать ответы на вопросы, если не работаешь в этом, а только интересуешься :)

Як заміну ні, не зовсім, бо реакт — це фреймворк, а Haxe — це інструмент для написання фреймворків (мова + компілятор + бібліотека классів для всіх платформ).
Тож з одного боку так, бо можна написати свій реакт, проте це буде важче, ніж просто взяти react.

На данний момент як доповнення — легко, оскільки Haxe дуже добре інтегрується з JS, то його можна використовувати саме з React Native напряму. Хтось вже, навіть, зробив біндінги:
github.com/...​e-react/haxe-react-native

Я саме займаюсь фреймворком, який заміняє мені реакт і який написаний за допомогою Haxe. Трохи згодом я віддам його в опенсорс і обов’язково напишу статтю про це на DOU.

Якщо мова про live reloading, то саме для JS можна користуватись якимись NodeJS модулями, наприклад watchify. Якщо мова про щось інше, то розшифруйте абревіатуру :)

«Везде, всегда, на всех платформах...»

Все технологии, которые так себя позиционируют, вызывают боль, если делать что-то сложнее MVP (речь не об играх)

Кстати, примера кросс-платформенного ПО я так и не увидел, хотя вначале Вы обещали, что он отлично применяется не только в играх.

Я как раз в теле статьи описал свой опыт применения Haxe вне игр. Мобильное приложение с нативным UI. Оно еще в стадии разработки, а не продакшена, так что пока без ссылки на стор.
Скриншот с андроида: i.imgur.com/ILLzV50.png
Практически аналогично выглядит под iOS.

Тогда ждем статьи именно про опыт написания данного приложения.

Спасибо за статью. Интересный язык ИМХО. Вопрос в реализации, насколько это всё добро работает на практике. Но если Вы говорите, что написали мобильное приложение, и всё чудесно работает, то видимо при реализации кросс платформенных решений, стоит обратить на него внимание.

Пробовали дебажить автогенеренный код? Боюсь, С++ там будет ужасен, если написать что-то средней сложности. И если учесть специфику компилеров и вероятные баги генератора/оптимизатора, то можно днями искать, где оно течет или дедлочит.

Иногда вполне адекватный код генерирует — зависит от транслятора

Вот это «иногда» и смущает. В прошлом веке их пытались использовать, говорят, одно время даже мода была, но потом выяснили, что дебажить автогенеренный код нереально, и это все ушло в прошлое. Теперь вот снова оживает.

Я не хорчу сказать, что С++ когда-то умрет, но лоу-левел постепенно уходит на второй план. Haxe, как раз таки, дает возможность писать под С++, не прибегая к низкоуровневому программированию (если его можно так называть в данном контексте).
С++ программисты бородаты и суровы, если они пишут на С++ и другие языки их не интересуют впринципе, то переходить на Haxe смысла особо то и нет, действительно. Лучше продолжать писать оптимизированный, ручной код.
Но такой подход с автогенерацией особенно выгоден как раз таки тем, кто не хочет тратить десяток лет на глубокое изучение С++. И получать при этом, вменяемую нативную производительность, а не фантики, мимикрирующие под натив, а-ля Electron. Используя при этом мощный язык, к слову говоря.
Если разделять эти две группы специалистов, то атосгенерированный С++ стает не таким уж страшным делом :)

Автосгенерированный С++ может давать производительность не намного лучше джавы, но генерить кучу проблем с переносимостью и любимым undefined behaviour.
Я бы померял загрузку процессора, размер программы и используемую память для сгенеренных плюсов и джавы. Может, разницы особой и нет.

Звучит как челлендж и хорошая тема для статьи ;)

Я нигде не говорил, что сгенерированный С++ будет быстрее вручную написанного.
Я говорил только то, что он дает вменяемую производительность.
Дело ведь не только в производительности и скорости, потому что в 95% софта такого рода оптимизации не нужны вообще.
Но даже если сгенерированный С++ будет не сильно обходить JVM по тестам, это все равно не отменяет того факта, что ты можешь запустить сгенерированный С++ на консолях, где джавы нет, например. Даже на QNX, где джава если и заработает, то это будет pain in the ass. Ты можешь общаться напрямую к С++ библиотеками, там, где для джавы нужен будет JNI. Ты можешь написать руками оптимизированный С++ бекенд для высоконагруженной задачи, а логику отдать Haxe. Применений на самом деле великое множество.

Чуть ниже я скидывал скриншот с использованием Qt:
i.imgur.com/Tqn42LB.png
Есть еще биндинги к wxWidgets, но не мои.

Но в целом, да. Это проблема неширокой известности Haxe — отсутствуют биндинги для многих полезных вещей.

Да, автор, приведите примеры из реальной жизни на плюсах, пожалуйста. Интересно посмотреть.

П.С. За статью — спасибо. На ДОУ маловато подобного контента.

Как я и писал в самом начале статьи, изначально Haxe начали использовать в основном для игр. Т.к. сама по себе парадигма трансляции кода, повзоляет запускать игру сразу на всех современных платформах. Это изначально поставило цель перед авторами делать высокопроизводительный инструмент. С++ таргет, как раз, один из самых востребованных в этой области, потому, его развитие не прекращается.
Из реальной жизни, я могу привести примеры работы с графикой, т.к. и сам пришел к Haxe через игры.
PBR рендер:
i.imgur.com/jfuUfU4.png
Игра, которая делается ради фана:
i.imgur.com/LAfxDd8.gif
Мой пример коннекта Haxe с Qt:
i.imgur.com/Tqn42LB.png
Нет скриншотов, но я так же успешно пользуюсь С++ библиотеками Assimp, ImGui, Bullet physics вместе с кодом на Haxe.

Постараюсь раскрыть эту тему в будущих статьях и уделить особое внимание С++ таргету.

Отвечая сразу на вопрос — да, регулярно дебажу и профилирую студией. Стоит сказать, что в случае чего, Haxe позволяет сопостовлять строку кода в сгенерированном С++ со строкой в исходниках. То есть, если что-то идет не так, вы сможете знать, в каком месте это происходит на стороне Haxe. Хотя специфические ситуации бывают, ведь мы говорим о С++, где и вручную написанный код может вести себя странно, если писать его недостаточно внимательно.

С++ один из самых сложных таргетов в силу своей специфики. Что есть, то есть, код на выходе получается сложнее, чем с JS и менее производительный чем вручную написанный. Однако, Haxe развивается в этой области и с каждым новым релизом сгенерированный С++ стает чище, целостней и производительней. Есть даже свой дебаггер, но с той же VS студией не сравнится, конечно. В любом случае, если говорить о десктопных либо мобильных приложениях, С++ на выходе даст вменяемую производительность. В данном контексте, я сравнивал Java со сгенерированным C++ для игр под Android, разница более чем ощутима.

Я попробую описать С++ таргет подробнее, расскажу о нюансах работы с ним в будущих статьях, если они будут, конечно.

Простите мой английский. Я не девелопер, но что за нахер?)

Если отбросить шутки, то автор языка произносит его как «хакс», так что я бы считал такой вариант самым правильным. Хотя, некоторые его произносят как «хэкс», но это менее популярная версия.

Если перевести примеры на JavaScript под современный стандарт, то разницы между примерами почти не будет.

Это ведь очень простые примеры, статья призвана только рассказать о том, что такое Haxe.
Но в сравнении, он значительно мощнее, как язык, чем JS.
Если я буду продолжать писать о Haxe, то постараюсь раскрыть побольше нюансов, приведу более сложные примеры. Может напишу программу, которая будет работать под всеми мажорными платформами.

Тут аудитория достаточно образованная для сразу хардкорных вещей. А эти примеры со старым js вызывают недоумение.

Этими примерами демонстрируются некоторые базовые возможности Haxe по оптимизации кода на каждой платформе, не более. Не вижу смысла усложнять примеры в данном контексте.
У меня есть идея интересного, более сложного примера под JS, но это тянет на отдельную статью. Надеюсь, напишу её когда-то.

Дякую. спробую.

Статья хорошая и язык интересный но увы, без вакансий

На ДОУ сейчас он упоминается в 4-х вакансиях:
jobs.dou.ua/...​cies/?search=Haxe&descr=1

Ну, это не так много чтобы учить + рейты маленькие

Статья хорошая и язык интересный но увы, без вакансий

Интересно, что мантру «покажыте мне вакансии» повторяет человек, который говорит что он «делает грамматики». Уж умение г...нять грамматики на антлр — это обязательное требование в каждой второй вакансии.

Проектов мало, но и навык сложный. Поэтому люди готовы к обсуждению рейта. В случае с хаксом это всего лишь еще один язык с кучей альтернатив. Покажи мне вменяемую альтернативу альтернативу antlr, xtext и JetBrains mps. Rascal MPS, да?

Проектов мало, но и навык сложный. Поэтому люди готовы к обсуждению рейта.

Проектов мало, но и людей которые этим занимаются мало (ничего принципиально сложного там нет). Поэтому люди готовы к обсуждению рейта.
С Haxe будет где-то такая же история.

Принципиально сложная предметная область. Нужно знать какой язык создавать и когда(гуглить мои презентации)

С хаксом ситуация другая, это просто язык.

Принципиально сложная предметная область.

Наверное восприятие сложности задач построения формальных грамматик как-то зависит от интелектуальных способностей человека.

гуглить мои презентации

Мне как-то непосчастливилось поприсутствовать на одной «вашей презентации». Терять еще времени впустую я как-то не хочу :)

1. Построение грамматики лишь малая часть.
2. Очень жаль, надеюсь другим было интересно

Підписатись на коментарі