LINUX.ORG.RU

Scala 2.11.0

 


0

6

Состоялся выпуск новой версии языка программирования 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. Совместимость экспериментальных функций языка (например интроспекции и макросов) не гарантируется. Новая версия не является бинарно совместимой с предыдущей.

>>> Подробности

★★★★★

Последнее исправление: ymn (всего исправлений: 11)

Экспериментальная поддержка генерации Javascript

это значит, что вебморды теперь можно писать на скале?

stevejobs ★★★★☆
()

Хороший язык, ничего не скажешь. За исключением одного момента: он не решает никаких реальных проблем относительно Java. Ну окей, код компактнее, можно пользоваться некоторыми фичами ФП, но всё это мелочи. То, что реально нужно людям - надежность, скорость выполнения, удобство, простота и т.д., осталось на уровне Java, а местами стало и хуже.

h31 ★★★★
()
Последнее исправление: h31 (всего исправлений: 1)
Ответ на: комментарий от stevejobs

это значит, что вебморды теперь можно писать на скале?

Можно. Но нужно будет тянуть с собой тяжелую stdlib, плюс наверняка будут проблемы с взаимодействием с JavaScript. Не знаю, по-моему все трансляторы в JavaScript - это просто PoC и хипсторские игрушки.

h31 ★★★★
()
Ответ на: комментарий от h31

Пример с сайта глянь. По дефолту, да, здоровенная JS-ина получается, но транслятор умеет и выкидывать неиспользованные фишки. Получается весьма компактно.

anonymous
()
Ответ на: комментарий от h31

надежность, скорость выполнения, удобство, простота

Это же Java и есть

Вот сказал бы о количестве занимаемой ОЗУ или о проблемах на десктопе

vertexua ★★★★★
()
Ответ на: комментарий от Pavval

Нету тут скалы. А на предыдущей работе вроде таки был 2.10, да и давно это было. Я бездельничал без работы 4 месяца )

vertexua ★★★★★
()
Ответ на: комментарий от Reset

scala нужна потому что базовый синтаксис явы убогий. Скалу можно использовать как яву, для этого её даже учить не надо. Но при этом в любой момент можно по жести писать и нормальным способом.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

по жести писать и нормальным способом.

Ты уж определись либо «по жести» либо «нормальным способом».

Reset ★★★★★
()
Ответ на: комментарий от vertexua

Это же Java и есть

Поверх JVM можно сделать много вкусных штук, не обязательно ещё одну джаву.

Вот сказал бы о количестве занимаемой ОЗУ или о проблемах на десктопе

Вот уж чего-чего, а это мелочи.

h31 ★★★★
()
Последнее исправление: h31 (всего исправлений: 2)
Ответ на: комментарий от qwerky

:) ну-ну... продолжайте, интересно...

Нет, Ваш черед :) Я своё мнение высказал, жду Вашего.

h31 ★★★★
()
Ответ на: комментарий от stevejobs

scala нужна потому что базовый синтаксис явы убогий.

Синтаксис джавы очень даже нормальный. Многословный, да, но ничего ужасного в нем нет. Вот указание типа переменной после имени - это чистое наркоманство. Молчу про «паровозы» из filter/fold и отсутствие static полей/методов.

Скалу можно использовать как яву

Но зачем?

h31 ★★★★
()
Ответ на: комментарий от h31

но ничего ужасного в нем нет

действительно. в нём вообще ничего нет.

вообще-то и scala тоже не айс, т.к. есть Clojure. Но если опции использовать Clojure нет, то выбор уж точно в пользу Скалы.

и отсутствие static полей/методов

они есть

Вот указание типа переменной после имени

и только не говори что не понимаешь, зачем это сделано

про «паровозы» из filter/fold

во-первых, возможно ты просто не знаешь библиотеки и тебе приходится писать конструкции, которые кем-то уже написаны. Нужно переосмыслить всё что ты делаешь в контексте операций над списками.

во-вторых, там где действительно «паровоз-однострочник» единственный выход - аналогичный код на яве (с использованием циклов) - будет занимать в тыщу раз больше места

Многословный, да, но ничего ужасного в нем нет.

а теперь подпишись на github на какой-нибудь популярный проект и читай коммиты. Через очень короткое время поймешь, что если бы коммит был во много раз короче, читать его было бы во много раз быстрее. И ты тратил бы не 4 часа на чтение обновлений проекта, а 30 минут.

stevejobs ★★★★☆
()

Ей можно уже кучу всего простить хотя бы за возможность создавать dsl и sbt вместо мавена.

Кстати, в 2.11 еще не придумали, как догнать по удобству способ реализации функциональных интерфейсов на джаве? Я про A a = () -> "name" vs A a = new A() { def name(): String = "name" }

А так - годно! Ура-ура!

anonymous
()
Ответ на: комментарий от vertexua

Ну я вот пошел на работу, где при приеме сказали, что они пытались своих обучить скале, но у нее высокий порог вхождения. Пишу теперь на джаве, а на скале время от времени развлекаюсь немножко.

П.С. Это я тебя про раст спрашивал. Я его потыкал - как-то совсем непонятно. С одной стороны, уже во вступлении куча синтаксических мелочей типа точек с запятой и т.д., а с другой - не без сахара, нативность, память и т.д. Не готов. Но к релизу явно можно будет поближе знакомиться.

anonymous
()
Ответ на: комментарий от stevejobs

вообще-то и scala тоже не айс, т.к. есть Clojure.

Но ведь Clojure — это LISP, а LISPы не работают.

anonymous
()
Ответ на: комментарий от anonymous

Паровозы из фильтер/фолд - это самая мякотка

А как эту «мякотку» из паровозов потом отлаживать, когда что-то работает не так как надо? В отладчике в IDE это крайне не удобно сейчас.

kamre ★★★
()
Ответ на: комментарий от kamre

У тебя и примеры, наверное, есть? Я вот обычно тесты пишу или в репле ковыряюсь. Тогда можно в проекте написать и сразу работает.

А кто-то пользуется макросами?

anonymous
()
Ответ на: комментарий от kamre

Поставить перенос строки в лямбде и продебажить не так уж и сложно, да? Тем более что один из основных ништяков в скале, что если что-то не так написано, то оно скорее всего не заработает.

anonymous
()

В algol68 это всё уже есть. Боян.

anonymous
()
Ответ на: комментарий от stevejobs

вообще-то и scala тоже не айс, т.к. есть Clojure

Вот да.

// мимокложурист

Debasher ★★★★★
()
Ответ на: комментарий от anonymous

Для андроида нет, не лучше. Там кложа пока жручий тормоз. А скала очень даже ничего.

Для серверов пофиг, т.е. здесь уже предпочтения: «простой» скобочный синтаксис против 'простой' нескобочный синтаксис.

Причем «простой» и 'простой' сильно разные и противоречивые.

habamax ★★★
()
Ответ на: комментарий от stevejobs

вообще-то и scala тоже не айс, т.к. есть Clojure.

В наше время кто-нибудь на нём пишет реальные проекты? Ну кроме всяких маргиналов.

Hater ★★
()

open source reactive web applications

Есть ли open source reactive web applications на Scala? Желательно написанные с помощью Play.

HappyCoder
()
Ответ на: комментарий от h31

Синтаксис джавы очень даже нормальный. Многословный, да, но ничего ужасного в нем нет.

Толсто.

Вот указание типа переменной после имени - это чистое наркоманство.

Дело привычки. В одних языках так, в других — иначе. Или вы SQL не используете по этим же соображениям?

Молчу про «паровозы» из filter/fold

Зависит от конкретного программиста.

отсутствие static полей/методов

Это напрягало только один раз: когда надо было экземпляр логгера для самописного класса hadoop-маппера/редьюсера.

Почему не вспомнил невозможность вызывать разные конструкторы супер-класса при наследовании?

shahid ★★★★★
()
Ответ на: комментарий от Hater

В наше время кто-нибудь на нём пишет реальные проекты? Ну кроме всяких маргиналов.

Да

Debasher ★★★★★
()
Ответ на: комментарий от Hater

В наше время кто-нибудь на нём пишет реальные проекты? Ну кроме всяких маргиналов.

у тебя есть шанс стать первым

umren ★★★★★
()
Ответ на: комментарий от rogerw

программисты

на русском

Знатно ты на ноль поделил!

anonymous
()
Ответ на: комментарий от h31

За исключением одного момента: он не решает никаких реальных проблем относительно Java. Ну окей, код компактнее, можно пользоваться некоторыми фичами ФП, но всё это мелочи. То, что реально нужно людям - надежность, скорость выполнения, удобство, простота и т.д.

код получается сильно компактнее, можно гра^Wписать скрипты при этом получая весь набор jvm библиотечек на любой чих которые можно забандлить в пухлый самостоятельный jar и конечно типобезопасность, иммутабельность, кучу сахара, акторы. Вот недавно накорябал программку пишушую текст произвольный текст на любую картинку строчек этак в двадцать, собрал и не надо ставить кучу пхп/руби/питоноговна с вечно конфликтующими версиями модулей. Для запуска нужна только jvm.

Syncro ★★★★★
()
Ответ на: комментарий от h31

надежность, скорость выполнения, удобство, простота

В чем надежность джавы? Скорость - да, удобство и простота - вопросы привычки.

loz ★★★★★
()
Ответ на: комментарий от anonymous

Неизменяемые данные, STM, поддержка многопоточности на уровне языка, доступны все библиотеки из жабки. Пишу ней ней гуи и плачу от счастья.

anonymous
()
Ответ на: комментарий от anonymous

А поподробнее про GUI? Там же конкретно иммутабельность/STM/агенты практически не нужны.

anonymous
()

В этот раз изменения совсем несмешные. Разве что новые рекомендации о замене «val на va|» и «var на vaг» вызывают улыбку. У разработчиков Rust'а нынче лучше получается отжигать.

CARS ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.