Java и Scala - Бывшие конкуренты вскоре могут стать лучшими друзьями

В прошлом месяце язык программирования Scala отпраздновал свою 10-ю годовщину, в то время как Java 8 готовится к своему релизу в марте этого года. Как ни странно, два этих языка, которые соревновались на протяжении стольких лет становятся все более похожими.

Java все еще возглавляет списки популярных языков, но Scala приобрела новых сторонников благодаря акценту на функциональном программировании. Так как в Java 8 добавятся одни из ключевых возможностей Scala, есть вероятность, что позиции Scala могут ослабнуть.

Хотя есть еще много причин считать, что Java 8 избавит от большей части причин, по которым люди перешли на Scala, недавно я встретился с Мартином Одерски, создателем языка Scala и председателем Typesafe, чтобы узнать его мнение о том, что стоит между двумя языками, которых объединяет любовь к виртуальной машине Java.

Java похожая на Scala - это хорошо для Scala

Автор: Кажется, что Java 8 воспользовалась некоторыми основными, для оригинального дизайна Scala, концепциями. Является ли это защитой от Scala? Другими словами не боитесь ли вы, что усовершенствования в Java 8 могут увести разработчиков из Scala-сообщества?

Мартин: Java 8 представляет одно из самых значимых изменений для языка в его истории, вместе с новыми конструкциями, оно изменяет традиционные подходы Java-разработчиков к решению проблем.

Люди часто спрашивают меня, что если возможности, появляющиеся в Java, замедлят адоптацию Scala. Как раз наоборот! На самом деле, я чувствую, что процесс принятия этих возможностей сообществом Java проверяет наши инновации в дизайне языка на JVM. Когда разработчики осознают, что это за возможности и как они работают, они так же оценят широкую поддержку функционального программирования, которую предоставляет Scala.

Так же будет повышенный интерес к изучению “Реактивных инструментов”, таких как Akka и фреймворк Play, даже посредством Java API.

Влияние Java 8 на Scala

Автор: Каким будет основное воздействие Java 8 на Scala?

Мартин: Список возможностей включенных в Java 8 на самом деле довольно большой, но некоторые из них особенно интересны для меня. Java 8 безусловно сделает ближе сообщества Java и Scala разработчиков.

Я так же верю, что это сделает поддержку множества языков на JVM проще, и в то же время даст разработчикам Java почувствовать, развитие языков для поддержки высокой степени конкурентности и параллелизма.

Java учит новые трюки с лямбдами: Последуют ли разработчики?

Автор: Какие возможности Java 8, являются выделяющимися для Вас?

Мартин: На мой взгляд, наиболее интересной новинкой являются лямбды. Они будут более полезными для Scala, и стандартизации байт-кода генеруемого компилятором Scala, кстати Java определяет свою поддержку этой возможности, используя функциональные интерфейсы.

Я сомневаюсь, что это будет трудный скачок для большинства существующих Java разработчиков, знакомых с анонимными реализациями интерфейсов, которые Java позволяла некоторое время. Те же правила применяются, например для запрета на изменение внешних значений.

Реализация лямбд в Java 8 вносит новые методы в тип java.util.stream.Stream , который звучит доволно знакомо для Scala разработчиков. По моему опыту, эти методы сделают написание высокоуровневого кода для колекций намного проще и будут действовать, как шлюз для изменений в сторону функционального стиля. Большинство пользователей этих абстракций в дополнение оценят читаемость, предоставляемую Scala, вместе с её for-выражениями.

Иметь эти реализации вероятно будет так же полезно для таких инструментов, как Akka и фреймворк Play, для поддержании более связанного Java API, которое позволит им создавать функциональные интерфейсы, основанные на Java, какие они не могли себе позволить ранее. Это означает, что API будут очень похожи, независимо от того, вызываете вы их из Java или Scala, увеличивая удобство для разработчиков на обоих языках.

Пишите байт-код, не надо войны

Автор: Какие другие возможности выделяются в Java 8?

Мартин: Scala разработчики так же будут рады включению реализаций по-умолчанию для методов Java интерфейсов Разработчики компилятора Scala уже давно прыгали через обручи для того, чтобы создавать байт-код для трейтов Scala, который был бы приемлемым для JVM, например создавали интерфейс для трейта и класс для реализации методов, который бы расширялся классами реализующими данный трейт.

Теперь байт-код генерируемый компилятором Scala может быть чище и соответствовать спецификации Java, продолжая при этом поддерживать линеаризацию.

Java: все больше похожа на Scala с каждым днем

Автор: Это звучит почти как вы находитесь в режиме “объятия” с сообществом Java. Я вспоминаю Рода Джонсона, создателя Sprint, с противоречивым докладом на ScalaDays прошлым летом в Нью Йорке. Джонсон перечислил примеры, где Scala прозрачна и тяжела, что препятствует ее широкому распространению. Он призвал Scala быть более похожей на Java для того, чтобы быть более дружелюбной и полезной для основного потока разработчиков.

Мартин: На самом деле Род, является хорошим другом Scala! Он находится в совете Typesafe вместе со мной. И Typesafe фокусируется на предоставлении первоклассной поддержки для Java разработчиков по работе с инструментарем для конкурентных систем Akka и фреймворком Play.

На самом деле, Typesafe считает, что добавление данных возможностей в Java 8 поможет нам предоставить более мощные и подвижные API для разработчиков Java, которые точно отражают большую часть нашего пути в Scala. Это хорошо тем, что Java будет иметь конструкции со своими аналогами в Scala. Введение этих и других возможностей под влиянием Scala, таких как не блокирующие CompletableFuture и параллельные коллекции, подчеркивает успешное влияние Scala на будущее Java.

Оригинал