Каковы наилучшие варианты использования Scala для новых разработок? - PullRequest
46 голосов
/ 07 января 2011

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

Примечание

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

  1. Отличная поддержка параллелизма
  2. Привлечение высшего инженерного таланта

Ответы [ 7 ]

43 голосов
/ 07 января 2011

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

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

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

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

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 выделяется? Я думаю, что эта область должна быть "будущим" ...

15 голосов
/ 07 января 2011

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

11 голосов
/ 07 января 2011

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

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

10 голосов
/ 07 января 2011

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

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

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

  • Да, поиск программистов Scalaэто сложнее, чем найти Java-программистов, но очень вероятно, что вы получите лучших людей.Конечно, не потому, что все Java-программисты плохие, а потому, что большинство программистов Scala были хорошими Java-программистами, которые чувствовали себя слишком ограниченными из-за ограничений языка Java.
  • Эрланг - отличный язык, особенно концепция актера.Scala последовал этому примеру, так что теперь у вас есть несколько Actor-сред, доступных на JVM (честно говоря, у Akka есть и Scala, и Java-интерфейс).Однако система типов Эрланга кажется очень простой (например, отсутствие полиморфизма типов), ИМХО слишком простая для некоторых сложных структур.Конечно, все завидуют способности Эрланга для горячей замены кода, но я думаю, что это не может быть эмулировано без фундаментальных изменений в JVM (или .NET)
  • Трудно сказать, какие функции являются наиболее важными, потому чтоих так много, но я попытаюсь назвать некоторые основные моменты: Scala может делать большинство вещей, которые могут делать функциональные языки (см., например, библиотеку Scalaz), за исключением макросов (которые менее полезны, если язык не гомоичен).Интеграция функциональных и ОО-функций более тесная, чем в любом другом языке mainstream (я знаю, что есть Beta, Self, IO, Ioke, Bla ...), который генерирует много синергии.Поначалу система типов Scala может показаться пугающей, но страшные вещи в основном нужны для создания библиотек и DSL (еще одна область, где Scala намного лучше, чем Java): Scala имеет типы высшего порядка (например, Haskell), что является мощной концепцией, которую мыначать эксплуатировать.Неявное Преобразование - невероятно полезный и гибкий инструмент, который позволяет эмулировать классы типов и другую магию.Переменные абстрактного типа - иногда очень полезная альтернатива параметрическим типам.Pattern Matching - это функциональный фольклор, но отлично работает и для OO.Вывод типов (хотя и не такой хороший, как у Хиндли-Милнера) уменьшает нагрузку на статическую систему типов, делая язык очень «скриптовым» без ущерба для безопасности типов.
10 голосов
/ 07 января 2011

Scala хорошо выполняет несколько вещей:

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

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

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

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

5 голосов
/ 07 января 2011

Scala - лучшая статическая типизация на JVM.

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

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

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

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

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

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

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

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

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

Сноска

  1. Я изначально писал, что других не было. Теперь, заметьте, я был бы очень рад оказаться ошибочным и перечислить здесь любые исключения из этого правила. До сих пор я мог думать только о Крепости .
4 голосов
/ 07 января 2011

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

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

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

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