Приятно было почитать про осознанность. Особенно интересно, что было упомянуто два её вида. По той о которой говорит Андрей, если я правильно помню, была книга "Думай медленно, решай быстро" Д. Канемана, а по той, которая про медитации есть другая книга с большим набором практик, которая так и называется "Осознанность". Рекомендую обе.
Первое, что бросилось в глаза после Jupiter — отсутствие command mode и введение кучи шорткатов. Так проще довести до «беты» или не планировали добавлять?
Спасибо за статью. Интересная тема, а ниже вопросы.
Как вы интегрируете MiniZinc и вашу систему? Есть специальные Runner'ы, которым скармливаются исходные переменные и конфигурация ограничений или как-то иначе?
Это упрощенный пример из реального применения? Если да, то как много времени обычно занимает построение расписания?
При изменении исходных данных вы перестраиваете расписание целиком? Как в этом случае учитывается та часть расписания, которую уже нельзя изменить? Ограничения?
Далеко не все делают для себя «удобный mini-API». Kotlin DSL это легкий способ и API в терминах предметной области получить, и сил затратить мало, так еще и такой подход полностью совместим с вашим Java кодом. Не стоит принимать «минусы» как жалобу, я хочу, чтобы у читателя было более объективное представление об инструменте до начала его использования. А про ANTLR для тестирования Java кода это вы отлично пошутили.
Пример использования языка вы увидите в разделе «Пример финального результата»
Код доступен на GitHub по ссылкам в статье.
Я вообще не уверен, что хаки с синтаксическим сахаром и набор утилитных функций (которые не похожи на код, но компилируются! вот прикольно!) — это уже DSL.
Использование элементов языка общего назначения для получения специфичных для решаемой задачи конструкций — это один из вариантов построения DSL. Вы можете убедиться в этом сами по ссылке и в других источниках по запросу «internal domain-specific language»
Вы верно заметили. Это обычный Kotlin код. Если быть точнее, это набор стандартных конструкций языка, благодаря которым мы строим проблемно-ориентированный язык, который специфичен для нашего проекта. Чем в вашем понимании «проектно специфичный фреймворк» отличается от DSL?
Думаю, можно умножить расходы на переезд на 2 и получатся что-то близкое к сумарным
Приятно было почитать про осознанность. Особенно интересно, что было упомянуто два её вида. По той о которой говорит Андрей, если я правильно помню, была книга "Думай медленно, решай быстро" Д. Канемана, а по той, которая про медитации есть другая книга с большим набором практик, которая так и называется "Осознанность". Рекомендую обе.
Как вы интегрируете MiniZinc и вашу систему? Есть специальные Runner'ы, которым скармливаются исходные переменные и конфигурация ограничений или как-то иначе?
Это упрощенный пример из реального применения? Если да, то как много времени обычно занимает построение расписания?
При изменении исходных данных вы перестраиваете расписание целиком? Как в этом случае учитывается та часть расписания, которую уже нельзя изменить? Ограничения?
Пример использования языка вы увидите в разделе «Пример финального результата»
Код доступен на GitHub по ссылкам в статье.
Использование элементов языка общего назначения для получения специфичных для решаемой задачи конструкций — это один из вариантов построения DSL. Вы можете убедиться в этом сами по ссылке и в других источниках по запросу «internal domain-specific language»