DTL IDE
За прошедшую неделю (в компании с fourdman'ом) создан прототип IDE для очень малоизвестного (in-house) языка DTL (Dynamically Typed Language). В комплекте:
— частично восстанавливающийся парсер на ANTLR;
— вычисление типов с обработкой массивов;
— отображение иерархии типов;
— отображение иерархии вызовов (на базе вычисления типов);
— статические проверки существования методов, количества аргументов и наличия определений переменных (язык требует явных определений).
Отсутствует: инкрементальный анализ, учет локального control flow функций, честный data flow для значений, соответственно, и честная обработка коллекций (но наш частичный вариант неплохо работает на реальном коде), распараллеливание анализа.
На всё вычисление типов ушло примерно 3 дня работы одного человека. Парсер потребовал необычайно много времени (около 4 дней, наверное), статические анализы приделаны примерно за пару часов. За иерархии типов в DLTK надо кое-кого поиметь, но об этом fourdman может поведать куда больше и красочнее.
После вечера и ночи за (в основном ручным) профилированием полный статический анализ 36 тыс. строк кода на DTL (с вычислением всех типов) занимает 2 секунды на Core 2 Duo 2.2 GHz (тогда как еще вчера днем это было около 60 секунд).
Из DLTK использована поддержка UI для Quick Type Hierarchy и для Call Hierarhy, Outline и Script Explorer. Чтобы это всё легко заработало, пришлось юзать ASTNode (но все конретные ноды наши) и строить языковую модель DLTK.
3 comments:
Я так понимаю редактор сделан на базе Eclipse?
DTL со скриншота напомнил мне Lua. Интересно он в такой же степени динамичен? ООП прототипное?
2 e.v.e.
Ессно, все это на базе эклипс, в конечном итоге. Редактор был отнаследован от DLTKEditor. То есть его мы тоже, на самом деле, не ручками писали.
Про динамичность Lua я мало знаю(к сожалению, не знаком). DTL довольно динамичен, я бы даже сказал, что почти как Ruby. Метапрограммирование там есть.
ООП там в стиле Smalltalk. Почти один в один.
Кстати, используется этот язык в основном для графики. :)
e.v.e: DTL — язык, которому больше 20 лет, содержащий кучу маразмов, с содранной из SmallTalk где-то в середине 90-х моделью ООП. Мы занимаемся им потому, что есть (точнее пока что может быть) заказчик, а не потому, что он особо привлекателен.
И, да, мы специализируемся на Eclipse-based IDE, так что редактор на нем родимом.
Post a Comment