Состоялся выпуск новой версии языка программирования Scala: 2.11.
Основные изменения:
- В библиотеке коллекций:
- У неизменяемых хеш-таблиц и множеств увеличена производительность операций фильтрации, объединения и других подобных. В большем количестве случаев стало возможным использование компонентов исходной таблицы при выполнении операций, создающих новые структуры.
- Добавлены специализированные реализации хеш-таблиц в которых ключами выступают длинные целые (LongMap) и ссылочные типы (AnyRefMap). Использование этих реализаций позволяет повысить производительность до 2-х и до 4-х раз соответственно.
- Модуляризация:
- Размер ядра библиотеки языка Scala уменьшен на 20% за счет выделения в отдельные модули компонентов, связанных с работой с XML, синтаксическим анализом, библиотекой построения пользовательского интерфейса Swing и плагина поддержки ограниченных продолжений.
- Произведена внутренняя модуляризация компилятора, работа над которой будет продолжена в следующих версиях.
- Большая работа была произведена в экспериментальной части компилятора — поддержке интроспекции, макросов и quasiquotes.
- Изменения в back-end компилятора:
- Новый экспериментальный оптимизирующий back-end для генерации байт-кода GenBCode.
- Экпериментальный вариант генерации байт-кода для лямбда функций, который позволит в будущем лучше интегрироваться с замыканиями из Java 8.
- Экспериментальная поддержка генерации Javascript в отдельном проекте Scala-JS.
- Удалены остатки давно заброшенного модуля для генерации байт-кода .NET
- Повышена производительность инкрементального компилятора, а так же некоторая оптимизация пакетного компилятора.
- REPL получил несколько удобных команд для отладки типов высшего порядка. Так же REPL теперь может быть подключен как скриптовый язык через API JSR-223.
- При сборке теперь будут показываться предупреждения о неиспользуемых локальных переменных и типах, а так же о ситуации когда var может быть заменен на val.
Новая версия является полностью совместимой по исходным текстам для программ, компилирующихся без предупреждений о использовании устаревших конструкций языка при сборке предыдущей версией 2.10. Совместимость экспериментальных функций языка (например интроспекции и макросов) не гарантируется. Новая версия не является бинарно совместимой с предыдущей.
>>> Подробности