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


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

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 рази.

Стислий список нововведень

Під час роботи над новою версією інкрементального компілятора були виконані наступні завдання:

  • Вдосконалений інкрементальный алгоритм: усунені “вузькі місця”, які раніше не вдавалося скомпілювати до кінця;
  • виправлені баги в інкрементальній компіляції Scala bridge і Java;
  • поліпшена обробка type-level програм;
  • вдосконалені старі Zinc API і створені дружні API для доповнення бракуючого функціонала загального доступу;
  • закінчена міграція до Scala 2.12. Zinc підготовлений для JDK8;
  • доданий аналіз на основі протоколу передачі даних з довгостроковою бінарною підтримкою.

З повним списком поліпшень можна ознайомитися тут.

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

Джерело: блог Scala

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *