Читать нас в Telegram

Выпущен компилятор Zinc 1.0 для Scala

Рубрика: Новости
,
817

Zinc — это инкрементальный компилятор для Scala. Большинство Scala-разработчиков даже не замечают, что используют его практически ежедневно: в sbt, pants, CBT, IntelliJ и Scala IDE.

У этого инструмента единственная цель — максимально сократить время сборки без ущерба для корректности исполнения. При изменении исходного кода Zinc анализирует все зависимости и компилирует подмножество исходных файлов, на которые оказали влияние внесённые правки. Таким образом сгенерированный код получается абсолютно идентичным выходу чистой компиляции.

3 ноября разработчики представили новую, усовершенствованную версию компилятора — Zinc 1.0.

Ключевая особенность v1.0 — анализ зависимостей на основе классов. Этот механизм был разработан для более рафинированной обработки зависимостей, исключающей общие случаи излишней компиляции. Сравнительные тесты показали, что новый механизм сокращает процесс сборки до 40 раз.

Пример семикратного увеличения скорости

И что же в ней такого особенного? Для сравнения были взяты две версии Zinc: 0.13.x и 0.1.x.

Исходные данные: ScalaTest, основной модуль которой состоит из 40 377 строк кода на Scala (не считая комментариев и пустых строк).

Испытание: обычная операция в любой кодовой базе — добавление метода.

В данном случае стоит задача добавить новый метод к классу с большим числом зависимостей (вроде AndHaveWord в Matcher.scala) после корректного «разогрева» компилятора и компиляции проекта.

Насколько быстро с этим справится v0.13.x?

Инкрементальная компиляция заняла у нее 21 секунду. Настала очередь нового алгоритма.

Эта версия завершила перекомпиляцию всего лишь за 3 секунды. В данном примере Zinc 1.0.0 оказался быстрее своего предшественника в 7 раз.

Подобные эксперименты дают совершенно разные результаты, зависящие от особенностей Scala и используемой архитектуры. Но главная идея в здесь том, что разработчикам можно смело ожидать увеличения скорости компиляции при решении ежедневных задач. Больше всего от этого выигрывают проекты Scala на основе cake pattern или интенсивного type-level программирования. По словам тестировавших алгоритм программистов, в некоторых проектах скорость компиляции в Zinc 1.0 превосходила скорость старой версии в 22 раза.

Краткий список нововведений

В ходе работы над новой версией инкрементального компилятора были выполнены следующие задачи:

С полным списком улучшений можно ознакомиться здесь.

Новая версия Zinc уже доступна в sbt 1.0.

Источник: блог Scala