Почему Scala более масштабируем, чем другие языки?

12

Scala объявлен как масштабируемый язык, функция, которая даже включена в его название :

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

Что означает «масштабируемый» в контексте Scala? Что делает Scala более масштабируемым, чем, скажем, Java?

prasonscala
источник
5
Scala не масштабируется так, как вы думаете: вы действительно должны прочитать интервью разработчиков Twitter о Scala / Java ... По сути, каждый раз, когда у них возникали (реальные) проблемы с масштабируемостью, они заканчивали тем, что удаляли код Scala и вставляли правильно многопоточные Java-код (который, как было указано здесь, гораздо проще сделать в Java, чем в Scala). Scala отлично подходит для прототипирования и написания юнит-тестов и всего, что не связано с объемом данных, которые сказал «Реальный мир».
ул. Тристан
5
Проще правильно написать многопоточный код на Java, чем на Scala? как так?
Аарон Новструп
@Webinator У вас есть ссылка на интервью?
Аарон Новструп
Согласитесь с Tristan St на масштабируемость. Erlang является лидером пакета в случае параллельного программирования из-за его способности создавать процессы за минимальное время. Вы просто не можете создавать более 10000+ потоков и взаимодействовать друг с другом в SCALA так, как вам кажется.
Ubermensch
3
@TristanSt. Хорошее распространение FUD, это абсолютно не основной вывод, который я получил от этого интервью. - «Но для других частей мы только что вернулись к традиционной модели потоков Java. Инженер, работающий над этим, Джон Калуки, обнаружил, что тестирование было немного проще, более предсказуемым. Потребовались минуты, чтобы переключить код, который был основан на актерах, на что-то основанное на потоках. Это была пара поисков и замен. Так что не так уж плохо, если актеры подводят вас по какой-либо причине ». Удивительная концепция - некоторые вещи подходят для актерской модели, а некоторые нет!
Дерек Лиц

Ответы:

14

Когда Мартин Одерски говорит о scala как о масштабируемом выборе языка, он имеет в виду, что сам язык подходит для:

  • сценарий
  • написание приложений
  • написание монстра "предприятие" (если не сказать лучше) приложений

Он, безусловно, не имеет в виду масштабируемость с точки зрения производительности!

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

Scripting

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

Приложения

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

Развертывание предприятия

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

oxbow_lakes
источник
Какие-либо подтверждающие доказательства "статически типизированных средств означают, что рефакторинг стал намного проще на больших кодовых базах"? Больше похоже на «это зависит», ситуацию, чем факт. Единственное, что я видел, что типизированные языки предлагают однозначно, это то, что авторам компиляторов легче иметь с ними дело.
Дерек Лиц
21

Вот что говорит Одерский (Слайд 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

«Скала глубока там, где другие языки широки».

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

Это означает, что Scala будет масштабироваться в соответствии с необходимой абстракцией, не обязательно с точки зрения «ответа на 1 000 000 запросов в секунду» (но Scala здесь тоже силен).

michael.kebe
источник
1
+1 это действительно соответствует "SCAlable LAnguage". Это язык, который разработан с учетом потребностей разработчика.
Бен Джеймс
11

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

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

Майкл Боргвардт
источник
Хотя Java не поддерживает функциональное программирование, это не означает, что вы не можете использовать его в Java. Это может дать вам ту же масштабируемость, хотя и для больших усилий. Библиотека, которая может помочь code.google.com/p/lambdaj
Питер Лоури,
2
Масштабируемость, которой владеет Scala, - это язык , а не программы.
Даниэль С. Собрал
6

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

Но модель Actor и стиль функционального программирования могут улучшить масштабируемость (в двух словах - упрощая правильное параллельное программирование и уменьшая потребность в синхронизации).

Для лучшего понимания взгляните на модель актера и сравните ее с традиционным многопоточным Java-приложением:

Вы даже можете использовать инфраструктуру Akka для создания масштабируемого Java-приложения без программирования в Scala:

Алоис Кочард
источник
Библиотека актеров - хороший пример масштабируемости Scala, но этот пример не связан с параллелизмом: API акторов выглядит как встроенная функция со специальными операторами (такими как! Message-send), но на самом деле все просто регулярные вызовы методов.
Бен Джеймс
Модель актера поможет вам писать масштабируемое программное обеспечение без особых усилий и головной боли при одновременном использовании, не так ли? поэтому, даже если вы не видите этого при использовании актеров, параллелизм как-то связан с моделью акторов. Модель акторов нацелена на упрощение параллельных вычислений, так почему этот пример не имеет ничего общего с параллелизмом ... Я не понимаю вашу точку зрения здесь?
Алоис Кочард
Мой комментарий не был блестяще сформулирован, извините. Ответы Лемьенга или Майкла. Кебе объясняют это лучше.
Бен Джеймс
Нет проблем ! Теперь я понимаю вашу точку зрения, я говорил только о масштабируемости библиотек Scala, а не о самих функциях масштабируемости / параллелизма языка . Спасибо
Alois Cochard