Код доступен. Можно посмотреть утилитный класс CollectionsLanguageUtil в языке colllections. Если будут какие идеи как еще оптимизировать — обязательно добавим.
> Но насколько хорошо оптимизированный код генерируется?
лист — при генерации — это массив. Все операции — это вызов статических методов утилиты. Все максимально оптимизировано.
Создавая эту серию статей, мы работаем над тем, чтобы обучение было быстрым. По себе скажу, что разобрался быстро, и начал языки писать тоже быстро, но как и любой предмет глубже стало куда сложнее. Без документации разобраться с той же системой типов или генератором (в старом его виде) было очень сложно. Когда набрался опыта (по большей части научился читать исходники) процесс понимания пошел быстрее. Сейчас платформа MPS стала проще и лаконичнее. Сущности и аспекты стали проще в понимании и документации стало больше. Так что с моего опыта мне кажется, что научиться лишь прочитав несколько хороших статей (нашу серию) и просто начав делать что-то реальное на MPS.
Не в рантайме. Генератор. Все преводится в обычный вызов статический методов. Для каждой декларации операторов создается свой класс и для каждого оператора статический метод.
Когда будет фунционал с аннотациями — то будет переводится в обычные (как в этой статье) декларации операторов, а потом в AS.
Был диспут на эту тему в жуйке и както решилось, что лучше всего отдельно. Можно потом добавить возможность декларировать и в классе — через аннотации. Такая задача у нас есть.
В RASE бедет несколько пустей это сделать. Один из путей — это трейты, которые очень сделаны очень аккуратно по отношению к OOP представлениям большинства пользователей. По сути это более удобная композиция. Потом будет язык для AOP, который добавит больше чертовщинки в акшенскрипт. А уж для совсем «безбашенных» мы сделаем язык mixin, который позволит делать всякие другие полезные, но уже более рисковые и неочевидные штуки. На любой вкус. Выбор за разработчиком и командами.
Лучше почитать вводную статью. Вопросы форматирования кода совсем из другого мира :) Редактор напрямую редактирует AST. А код в редакторе лишь отображение AST. Причем одна из версий отображений. Потом можно создавать свои версии отображения. Например, отказаться от скобок совсем. Или показывать код в виде диаграммы. И иметь возможность переключаться между представлениями кода.
лист — при генерации — это массив. Все операции — это вызов статических методов утилиты. Все максимально оптимизировано.
Когда будет фунционал с аннотациями — то будет переводится в обычные (как в этой статье) декларации операторов, а потом в AS.
искать легко. ctrl+click на орераторе ("+") и перейти в декларацию.
все хорош писать языковые расширения на сегодня! :)