Что Java-разработчики думают о Scala? [закрыто]


19

Я заметил, что поддержка IDE далеко не так хороша, но сам язык поддерживает функциональные идиомы программирования гораздо более четко.


3
Питон - моя религия, поэтому меня волнует только то, что Гвидо думает о Скале. neopythonic.blogspot.com/2008/11/scala.html
Работа

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

@soc: Просто чтобы прояснить: я не ненавижу Scala, и люди, которые его используют, вероятно, не должны (не должны!) меньше заботиться о том, что я думаю об этом. Я думаю, что это слишком сложно. Это все. Сложность может быть в порядке для тех, у кого большой мозг. Я не :-)
Joonas Pulakka

3
Извините, я просто раздражаюсь, когда люди продолжают повторять мифы, не подтверждая свои утверждения.
соц

2
@soc: Ну, этот вопрос совершенно субъективен, поэтому любой ответ правильный, будь то миф или нет.
Joonas Pulakka

Ответы:


18

Я программирую на Scala уже больше года, поэтому постараюсь отодвинуться на год, чтобы ответить на этот вопрос.

  • Scala-код более лаконичен, чем Java-код (нет установщика или получателя, можно получить много информации о типах)
  • Встроенная поддержка XML-литерала очень привлекательна.
  • Совместимость и совместимость с библиотекой Java - это здорово
  • Обновлена ​​поддержка определенных функциональных идиом (для понимания, закрытия, лямбда-функций, отображения, сгиба, уменьшения)
  • Кажется, что нет ничего интересного в том, что создатель языка не хотел включать

Вышеуказанные пункты были более или менее то, что я думал о Скала, прежде чем я начал изучать это.

В течение года вот что я узнал:

  • Покупка лестничной книжки была отличным вложением и сэкономила мне часы изучения вещей самостоятельно.
  • Синтаксис имеет некоторые причуды, и иногда я был действительно озадачен, почему что-то было не в порядке. Когда вы знакомы, компромисс становится менее загроможденным и его легче читать. Обратите внимание, что это не проблема, если вы читаете, а не пишете код.
  • Коллекционная библиотека в 2.8 доставляет удовольствие. Трудно вернуться к Java.
  • XML-литерал хорош, но помимо некоторых основных вещей, мне пришлось обратиться к экосистеме библиотеки Java. Это удобно, хотя.
  • Использовать библиотеки Java от Scala очень просто и удобно. Использовать классы Scala из Java немного сложнее, но это работает.
  • Я переключился на выпуск для сообщества IntelliJ IDEA, и хотя он не идеален, он более чем хорош.
  • Создатель языка действительно подумал о наборе функций, и все они прекрасно работают вместе. Объектно-ориентированная поддержка лучше, чем в Java (с чертами), и вы можете заниматься функциональным программированием.
  • Это язык, который, очевидно, некоторые Java-разработчики ненавидят со страстью. Для меня это вернуло радость программирования.

21

Ну, я думаю, что Скала слишком сложна. Это похоже на C ++ в том смысле, что в нем есть множество разных способов ведения дел. Некоторые называют это «богатством», «выразительностью» или «силой», но ваш пробег может варьироваться. Во многих реальных проектах вам придется искусственно ограничивать какие языковые функции вы собираетесь использовать, а какие нет, чтобы все участвующие разработчики могли говорить на одном и том же подмножестве языка.

Для функционального программирования я предпочитаю Clojure , который намного проще, чем Scala.

Пусть начнется священная война ;-)


2
Если бы только Рич Хики так же заботился о .Net, как и о JVM ...
Работа

Было бы полезно, если бы вы объяснили немного больше о том, что вы считаете слишком сложным.
Ричард Уорбертон

4
@Richard Warburton: Проблемы сложности Scala (или, как говорит Мартин Одерски, «сила и проблема Scala: его расширяемость») широко обсуждались на многих форумах. Одно из таких обсуждений здесь . Я не говорю, что сложный == плохо само по себе . Проблема заключается в том, что в то время как яркая 1% программистов может быть в состоянии делать чудеса с Scala, подавляющее большинство просто не собирается «достать», и это является проблемой для использования в реальном мире. Это как машина Формулы 1: подавляющее большинство людей просто не смогут водить такого зверя.
Joonas Pulakka

2
+1 За упоминание Clojure как верной альтернативы (когда речь идет о функциональном программировании).
Оливер Вейлер

Clojure великолепен, но так ли он эффективен, как Scala? Это так же легко рефакторинг без всей этой статической типизации? (Рефакторинг Python, например, довольно сложный - я написал для него рефакторинг.)
9000

13

Около года назад, когда я все больше и больше разочаровывался в будущем продуктов своего стартапа, если продолжал использовать Java, я решил попробовать Scala. Я уже программировал на JavaScript и Python в то время, Ruby также был хорошей альтернативой, но я искал статически типизированный язык, предпочтительно тот, который мог бы работать на JVM.

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

К счастью, вскоре после этого я узнал о Фантоме . О, чувак, я любил это! Для меня это было похоже на великолепный ответ американцев немецкой бюрократии! Он соответствовал требованиям, которые я искал в Scala, но гораздо более элегантно . Он имел интеграцию с Vim , Eclipse и Netbeans , хорошую веб-инфраструктуру , работающие с ним зрелые продукты , небольшое, но невероятно полезное сообщество ... Динамическая и статическая типизация! Я радовался!

(Я мог бы продолжить, но этот пост предназначен для Скалы, а не для Фантома, поэтому я остановлюсь здесь. Мои предпочтения ясны , тем не менее, есть этот пост, сравнивающий их. Я никогда не мог понять, почему Фантому уделяется так мало внимания по сравнению со Скалой. Но, видимо, я не единственный, если вы слушаете этот подкаст [ mp3 ] до конца.)


9

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

Мне нравится Clojure, но бывают ситуации, когда платформе нужно, чтобы вы компилировали статический байт-код (Android, апплеты, ...), и, хотя вы можете это сделать, в Scala он просто есть.

Хотя Scala позволяет вам функционально решать многие проблемы, я часто нахожу проблемы, когда использование классов кажется более естественным. Это делает вещи немного сложнее, но далеко не так сложно и сложно в C ++.

Самым большим выводом для меня, когда я действительно начал изучать язык, было то, что я мог программировать точно так же, как я делал на Java, просто без шума (немного похоже на то, когда вы запускаете Groovy), но в конце концов вы хотите попытаться погрузиться глубже во власть языка - он растет вместе с тобой.

О вопросе IDE: После использования Emacs для всех, все мои проблемы IDE исчезли :-)


9

Мне нравится Scala по многим причинам, но есть одна, которую часто упускают из виду: ее простота.

Скала может быть не так проста, как, скажем, Оберон, но она намного проще, чем некоторые другие языки. Спецификация языка Scala составляет ~ 160 страниц, Спецификация языка Java составляет ~ 600 (только язык, а не JVM или библиотеки!), Спецификация языка ECMA-334 C # (которая AFAIK соответствует подмножеству Visual C # 2.0) ~ 440 страниц (без таких вещей, как понимание запросов LINQ, лямбда-выражения, методы расширения, общая ко-и контравариантность dynamic, необязательные аргументы со значениями по умолчанию, аргументы ключевых слов, var). Даже текущий черновик для ECMAScript 5.1 больше на ~ 210 страницах. И, конечно же, мой собственный язык по умолчанию - Ruby, чей нынешний черновик ISO весит ~ 310 страниц, что указывает лишь на почти непривычно крошечное подмножество пересечений Ruby 1.8.6, 1.9.1 и 1.9.2.


6
Количество страниц в спецификации языка является интересной мерой его сложности. Удивительно, как Scala разделяет мнения об этом. Никто не сказал бы, что Python сложен, или C ++ прост, но Scala, кажется, и то и другое :-) Например, scala-lang.org/node/7431
Joonas Pulakka

Вы можете создавать сложные вещи с помощью языка, и некоторые будут выглядеть так, как если бы они были языком - методы с именами, не относящимися к alnum, которые выглядят как перегрузка операторов, чего, например, нет.
пользователь неизвестен

2
Количество страниц в спецификации языка - УЖАСНЫЙ способ сравнить сложность двух языков. Просто чтобы привести два примера: спецификация Java написана почти как учебник, а спецификация Scala написана очень лаконично. Или другой пример, C # 2.0 на самом деле был примерно таким же сложным, как Java сегодня, или, возможно, немного более сложным, учитывая «небезопасный» механизм, делегатов и свойства. Но, как вы заметили, спецификация C # 2.0 меньше, чем JLS.
Джеймс Ири

1
Теперь Мартин Одерский сравнил размеры формальных грамматик языков. Это разумная мера одного аспекта сложности. Но это разумно, потому что грамматика не такая гибкая, как английский. Даже тогда вы должны быть осторожны. Как и в случае с обычными программами, вы можете легко растягивать или сокращать грамматики с различными вариантами их размещения, количества включаемых отдельных произведений, какие базовые классы символов принимать и т. Д.
Джеймс Ири,

3
чего ждать ? Почему вы пытаетесь измерить сложность с размером спецификации? Это ужасная идея.
smartnut007

9

Вот что отстой в Scala:

  • Нулевой указатель был довольно плохой идеей для начала. Хоар назвал это «ошибкой в ​​миллиард долларов», но Скала еще хуже. У него есть объекты с именами null, Null, None и Nil. ноль для взаимодействия с Java. Null - это нулевой указатель из спецификации W3C DOM, None - это то, чем должен быть заменен null, а Nil - пустое значение.

  • Когда языковые конструкции оказываются хакерскими, обычно виноват не программист, а программист. Однако в Scala базовый язык уже содержит библиотечные классы, чье единственное документированное поведение - «Это взлом». Не верь этому? Найдите в scaladoc файл scala.xml.Group.

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

Чтобы меня не приняли за Скала-ненавистника, вот что мне нравится в этом:

  • У меня меньше исключений. У меня никогда не было ClassCastException и очень мало NullPointerException при взаимодействии с Java.
  • Код намного короче и лаконичнее, чем Java
  • Это интеллектуально сложно. По сравнению с языком Java, похоже, на детский язык.

10
nullявляется нулевым указателем Java, Nullявляется его "типом". Noneявляется одним из возможных «состояний» Option[T]коллекции с одним или нулевыми элементами. Nilэто пустой список. Хотя вы хотите, чтобы это звучало пугающе, это не так. Эти типы не являются взаимозаменяемыми или взаимозаменяемыми и ведут себя точно так же, как и должны.
Soc

9

Scala является сложным. Нет пути! Его синтаксис чрезвычайно гибок и может быть настроен множеством способов (прежде всего операторы / инфиксная запись) - и система типов имеет больше различных функций, чем любой другой язык, который я знаю.

Так что все не так просто, как, например, в Haskell: классы типов, чтобы охватить их все.

Поскольку Scala пытается объединить функциональное программирование, ОО, процедурное программирование и библиотеки Java, а также собственные идеи, мы, наконец, в итоге получаем множество концепций, которые как-то движутся «в одном направлении»:

  • Неявные значения
  • Неявные функции
  • экзистенциалам
  • Wildcards
  • Черты
  • Интерфейсы
  • Абстрактные классы
  • Тематические классы
  • Структурные типы
  • Общие ограничения
  • Посмотреть границы
  • Анонимные типы

Выбор среди них поначалу кажется трудным, и можно легко задаться вопросом, нашел ли кто-то правильное решение какой-то проблемы. Даже легко получить хакерские вещи, злоупотребляя implicitс.

Но самое интересное: Scala работает. Иногда трудно понять почему (особенно выясняя, через какие неявные преобразования + наследование + ... какой-то объект имеет функциональность X), но вам не нужно беспокоиться об этом большую часть времени.

Напишите Scala как можно проще, и это сработает. Не запутайтесь во всем, что возможно, и просто используйте то, что вам нужно. И если вам что-то нужно, вы можете быть уверены, что у Scala это как-то есть;)

И чем лучше вы становитесь, тем больше вы сможете настраивать Scala с операторами, имплицитами, монадами, прикольным синтаксисом ... и, наконец, получить что-то близкое к DSL, которое идеально решит вашу проблему.

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


1
«прежде всего операторы / инфиксная нотация» - просто в scala отсутствуют операторы. :) Это всего лишь методы.
пользователь неизвестен

6

Это отличный язык, который во многих отношениях проще, чем Java.

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

Если вы беспокоитесь о таком сложном языке, как C ++, я бы избегал Clojure как чумы. Утверждение, что Scala сложнее, чем Clojure, стало запасным аргументом для людей, которые совершенно не знают об одном или обоих языках.

В Clojure есть макросы, что означает, что вы можете изменять синтаксис языка столько раз, сколько захотите, предоставляя вам не просто «множество различных способов ведения дел», но практически бесконечное количество способов выполнения действий. И ни один из этого нового синтаксиса, который программисты создают с помощью макросов, не будет документирован нигде в спецификации языка.

«Но мы можем избегать использования макросов или регулировать, какие из них разрешены в нашем коде», - говорите вы. Поздравляем, у вас теперь есть «искусственное ограничение того, какие языковые функции вы собираетесь использовать, а какие нет», именно это и использовали болтающие идиоты, которые используют Clojure из Scala, в качестве причины, чтобы с самого начала избегать Scala.


6
Спасибо за ваш вклад Scala против Clojure, но действительно ли это то, о чем я спрашиваю?
Мартин Уикман

Интересный момент: макросы. Немного беспокоит, тоже. Доступны ли макросы или аналогичные в Scala, или все это «искусственно ограниченное» отвлекает?
Арманд

1
Кажется, это комментарий к моему ответу, а не ответ на первоначальный вопрос. Я согласен, макросы дают вам бесконечную силу, поэтому при неправильном использовании они отстой. Таким образом, вы должны использовать их правильно (только при необходимости). Это не меняет того факта, что язык Clojure является одним из самых простых. Скала определенно нет.
Joonas Pulakka

> Это не меняет того факта, что язык Clojure является одним из самых простых из существующих. <Это также полностью неверно, если вы не используете какую-либо метрику, например «количество языковых конструкций». Если вы используете что-то полезное, например, насколько легко читать и писать программы на языке, то Clojure не является одним из самых простых.
Джош

Поэтому, пожалуйста, продолжайте и дайте нам хороший показатель сложности языка. «Насколько легко читать и писать программы на языке» - это совершенно субъективно , поэтому здесь это не очень помогает. Конечно, придумать полезную и объективную метрику может быть практически невозможно. (Например, Йорг Миттаг ниже использует количество страниц в спецификации языка в качестве меры сложности. Хотя объективно, я не уверен, что это очень полезно.)
Joonas Pulakka

4

Мне действительно нравятся более детальные типы библиотеки Scala. Кажется, что новая библиотека коллекций была хорошо продумана. Мне также нравится, как он уменьшает объем кода, требуемого для простых классов, и функциональные концепции, которые он добавляет. Его вывод типа также очень полезен. Похоже на Яву без тренировочных колес. После использования C # в течение некоторого времени, Scala фактически чувствует себя конкурентом, а Java все еще полезна, но остается позади.


2

Как программист на Java, я изначально находил Scala интересным. Однако, после того, как я какое-то время баловался этим (и сталкивался почти со всеми позитивами / негативами, уже перечисленными другими), я чувствовал себя очень «ме» к этому. Улучшения языка компенсируются меньшей доступностью наборов инструментов. Я просто не мог придумать какой-либо определяющей причины для переключения. Это хорошо, но это не «лучше», чтобы обосновать необходимость переключения. Также не имеет этого субъективного фактора возбуждения (как, кажется, Clojure).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.