Подтвердить что ты не робот

Каковы наилучшие варианты использования Scala для новой разработки?

Почему я должен выбрать Scala для другого языка для нового проекта? В каких областях он превосходит?

Примечание

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

  • Отличная поддержка concurrency
  • Привлечение высшего инженерного таланта
4b9b3361

Ответ 1

Сначала прочтите следующее: Бесплатный обед закончился

Concurrency становится все более важным. У нас уже есть 1000 основных процессоров, и на каком компьютере в настоящее время еще нет графического процессора, способного выполнять высокопараллельные операции?

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

Scala - функциональный язык. Таким образом, он полностью охватывает такие понятия, как неизменность, понятность, закрытие и т.д. Он также имеет 4 родных библиотеки актеров (в конце концов). Все это отлично подходит для следующего поколения параллельного программирования. Вы не можете хоронить голову в песке и притворяться, что ничто из этого не существует - это было бы похоже на то, что в 1995 году было написано программу, в которой хранится только 2-значный год - императивные петли просто не собираются ее резать!

Scala 2.9, выпущенный в начале 2011 года, будет поддерживать параллельные операции, такие как:

List(1,2,3,4).par map { 2 * _ }  //one thread for each input value in the list!

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

В какой области Scala превосходит? Я предполагаю, что эта область должна быть "будущей"...

Ответ 2

Мой собственный комментарий к ответу Landei предложил мощную причину использования Scala: если вы хотите, чтобы ваш проект/команда/компания обратились к перспективным, талантливым инженерам, а не к парням, которым удалось забрать некоторую Java из CS по выбору в Риде или где-то еще и на протяжении восьми лет пишут JSP-страницы для внутренних HR-систем Visa International, тогда вам понадобится более интересный выбор языка.

Ответ 3

Scala работает на JVM и полностью совместим с Java. Фактически, он почти идентичен Java с точки зрения того, что вы можете делать и как он работает, поэтому вы можете использовать Scala для любого Java, который будет хорошим выбором для него (в частности: корпоративные среды и кросс-платформенные приложения). В соответствии с Введение в Scala оно идеально подходит для веб-сервисов.

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

Ответ 4

Scala - это, безусловно, лучшее универсальное оружие на JVM. Scala может делать все, что может сделать Java, и почти всегда Scala может сделать это лучше (с очень хорошей совместимостью с Java), поэтому IMHO нет никаких оснований рассматривать Java вообще для нового проекта.

Есть несколько случаев, когда динамическая типизация (JRuby, Jython, Groovy) или функции метапрограммирования (Clojure) может дать вам начальный ребро, но нет ничего, что бы масштабировалось так же хорошо, как Scala, и которая дает вам свободу смешать парадигмы по мере необходимости, так как она больше, чем когда-либо, так как больше получает преимущество использования Scala.

[Обновление] В ответ на вопросы:

  • Да, поиск программистов Scala сложнее, чем поиск программистов на Java, но очень вероятно, что вы получите лучших людей. Конечно, не потому, что все программисты Java плохи, но потому, что большинство программистов Scala были хорошими программистами на Java, которые слишком ограничивались ограничениями на языке Java.
  • Эрланг - отличный язык, особенно концепция Актера. Scala последовал за этим примером, так что теперь у вас есть несколько инфраструктур Actor на JVM (справедливости ради, Akka имеет как Scala, так и интерфейс Java). Однако система типа Erlangs кажется очень простой (например, полиморфизм типа), IMHO слишком прост для некоторых сложных структур. Конечно, все завидуют способности Erlangs для обмена горячим кодом, но я думаю, что это нельзя эмулировать без фундаментальных изменений на JVM (или .NET).
  • Трудно сказать, какие функции являются самыми важными, потому что их так много, но я попытаюсь назвать некоторые основные моменты: Scala может выполнять большинство функций, которые могут выполнять функциональные языки (см., например, библиотеку Scalaz), кроме макросы (которые менее полезны, если язык не гомоиконный). Интеграция функциональных функций и функций OO более жесткая, чем на любом другом распространенном языке (я знаю, есть Beta, Self, IO, Ioke, Bla...), который генерирует много синергии. Система типа Scala может сначала выглядеть пугающе, но страшный материал в основном необходим для создания библиотек и DSL (другая область, где Scala намного лучше, чем Java): Scala имеет более высокие типы заказов (например, Haskell), которые это мощная концепция, которую мы только начинаем использовать. Implicit Conversion - невероятный полезный и гибкий инструмент, который позволяет эмуляции классов классов и другой магии. Абстрактные переменные типа - иногда очень полезная альтернатива параметрическим типам. Pattern Matching - это функциональный фольклор, но отлично подходит для OO. Вывод типа (хотя и не так хорош, как Hindley-Milner) уменьшает нагрузку на систему статического типа, делая язык очень "scripty", не жертвуя безопасностью типа.

Ответ 5

Scala делает несколько вещей хорошо:

  • XML. Scala XML API очень хорош.
  • Статическая типизация. Вывод типа типа Scala менее подробный и понятный, чем более явный статический тип (хотя и имеет свои преимущества). И для языка, который не требует слишком большого набора текста (по сравнению с другими), он работает хорошо.
  • Совместимость шаблонов; case в Scala являются супермощными
  • Наследование. Символы Mixin отличные, и они определенно уменьшают повторение кода.
  • Concurrency (модель актера намного более удобоварима, чем модель нарезки, IMO)

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

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

Парень из Twitter на самом деле собрал слайд-шоу о том, почему они выбрали Scala, и он делает много тех же моментов, которые у меня есть (еще несколько).

Ответ 6

Scala является лучшим статически типизированным на JVM.

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

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

Однако результатом является то, что код, написанный в Scala, является быстрым, компактным, надежным и указывает на область проблемы. Это также действует на всех уровнях, поэтому библиотеки Scala тоже такие.

Давайте немного поговорим об альтернативах, чтобы сделать различие понятным.

Существуют языки, отличные от JVM, но решение о том, следует ли переходить на язык JVM или нет, почти полностью отделено от решения о самом языке. Это технологическое решение, которое нужно сделать до выбора языка. Из-за этого я сравниваю только Scala с другими языками JVM.

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

Что касается статически типизированных языков на JVM, то Scala имеет самую передовую систему типов. На самом деле, насколько я знаю, он почти одинок 1 имея систему типов, которая вдохновлена ​​теорией системного типа, вместо того, чтобы быть взломанной на основе предпочтений и опыта языкового исполнителя.

Java, например, не имеет безопасной дисперсии. Другие языки идут противоположным способом Scala, предоставляя "наиболее распространенные" структуры данных в самом языке и делая невозможным для кого-либо писать другие сложные структуры данных в виде библиотек.

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

Сноска

  • Я изначально писал, что других нет. Теперь, разумеется, я был бы счастлив оказаться ошибочным и перечислить здесь исключения из этого правила. До сих пор я мог думать только о Fortress.

Ответ 7

Для моих собственных частных проектов я уже принял Scala как естественный преемник Java (по причинам, упомянутым в других ответах). Но я очень сомневаюсь, что инструменты разработки Scala (особенно IDE) подходят для крупномасштабных коммерческих проектов. А именно поддержка рефакторинга IDE, которая, на мой взгляд, обязательна для гибкого развития, не соответствует стандартам Java, но (используя текущий модуль IDEA 10, плагин для ночной сборки).

Кроме того, я считаю, что компаниям сложно придумать команды достойных разработчиков Scrum достойных разработчиков Scala. Смотрите также видео "Sneaking Scala Into Your Organization" Дэвида Коупленда: http://days2010.scala-lang.org/node/138/169

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