compilation time
Sep. 11th, 2014 01:38 amВолею судеб (и израильских клиентов) нонче занимался старым проектом на Haxe, очередной раз порадовался способностям компилятора. Си-образный язык с ООП, генериками, алгебраическими типами, паттерн-матчингом, выводом типов, макросами. Компилю в байткод флэша, с оптимизациями. В проекте 5592 строки (160 KБ): два видеокодека, реактивный парсер AVI, UI, интеграция с JS, хитрая логика для загрузки видео кусочками (с учетом разных способов хранения индексов). Полное время компиляции/сборки с нуля: 0.34 секунды. (использую старый Haxe 2.10, на 3.x пока не пробовал переползать) Вот как надо делать компиляторы! Что показательно, этот написан на окамле.
В качестве наглядного контраста у меня недавний проект на Идрисе (компилятор которого на хаскеле): 500 строк (простой интерпретатор и кодогенератор с минимальным использованием завтипов) компилятся 30 секунд (часть из которых приходится на GCC, правда, ибо компиляция через генерацию Си). Пока компилится, уже успеваю на что-то отвлечься, увлечься, потом возвращаться, спустя неопределенное время, уже позабыв, чем занимался.
С быстрым компилятором workflow намного более гладкий, и могут появлятья всякие ништяки, которые изначально не были запланированы, вроде оперативной проверки кода в IDE, REPL'a и использования в качестве интепретатора (когда скомпилировать и запустить программу выходит быстрее, чем запускается какой-нибудь классический интерпретатор).
В качестве наглядного контраста у меня недавний проект на Идрисе (компилятор которого на хаскеле): 500 строк (простой интерпретатор и кодогенератор с минимальным использованием завтипов) компилятся 30 секунд (часть из которых приходится на GCC, правда, ибо компиляция через генерацию Си). Пока компилится, уже успеваю на что-то отвлечься, увлечься, потом возвращаться, спустя неопределенное время, уже позабыв, чем занимался.
С быстрым компилятором workflow намного более гладкий, и могут появлятья всякие ништяки, которые изначально не были запланированы, вроде оперативной проверки кода в IDE, REPL'a и использования в качестве интепретатора (когда скомпилировать и запустить программу выходит быстрее, чем запускается какой-нибудь классический интерпретатор).