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

в Xcode 8.2, Swift 3.0.1:

Использовать метод метода NSString компонентов (separaBy:)

let text = "line1\nline2"
let array = text.components(separatedBy: CharacterSet.newlines)

Или использовать String Метод enumerateLines , как и ответ Leo Dabus

41
задан johnny 15 October 2012 в 14:21
поделиться

7 ответов

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

Это также применимо к большинству других языков JVM. Это не относится к Java, потому что в нем есть особая обработка его основных типов (Int, Boolean и т. Д.), Операторов, громоздкого синтаксиса, который проясняет, что встроено в язык, а что такое библиотека и т. Д.

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

39
ответ дан 27 November 2019 в 00:39
поделиться

Нет, не совсем. Дело не в том, что JVM является чем-то волшебным и масштабирует вещи своими волшебными силами; Дело в том, что Scala как язык разработан, чтобы помочь людям писать масштабируемые системы. То, что он находится поверх JVM, почти случайно.

11
ответ дан 27 November 2019 в 00:39
поделиться

Я не думаю, что язык - самая большая проблема здесь. Twitter безумно быстро рос, что всегда приводит к беспорядку в коде. И если вы выполняете переписывание, рекомендуется перейти на другой язык - это мешает вам снова создавать свои собственные ошибки и / или «повторно использовать некоторые части». Кроме того, Ruby на самом деле не предназначен для такой тяжелой обработки данных, как серверная часть twitter. Внешний интерфейс остается Ruby, поэтому они все еще используют его.

5
ответ дан 27 November 2019 в 00:39
поделиться

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

JRuby должен выполнять много работы во время выполнения (разрешение методов и т. Д.), Которую Scala выполняет во время компиляции. Как бы то ни было, JRuby - очень быстрая реализация Ruby.

JRuby должен выполнять много работы во время выполнения (разрешение методов и т. Д.), Которую Scala выполняет во время компиляции. Как бы то ни было, JRuby - очень быстрая реализация Ruby.

4
ответ дан 27 November 2019 в 00:39
поделиться

В комментариях к этой публикации есть интересное обсуждение самих разработчиков Twitter. Они оценили различные варианты и решили реализовать бэкэнд на Scala, потому что: он работал быстрее, чем альтернативы Ruby / JRuby, и они чувствовали, что могут извлечь выгоду из статической типизации.

3
ответ дан 27 November 2019 в 00:39
поделиться

Масштабируемость не является наследуемой возможностью языка. Вы говорите о скорости.

Лучше задать вопрос: «Почему Scala быстрее других языков JVM (или таковых)?». Как отмечали другие, это вопрос статического и динамического языка.

4
ответ дан 27 November 2019 в 00:39
поделиться

Вы должны разделить различные значения масштабирования:

  1. Масштабирование с точки зрения увеличения количества запросов в секунду, которые могут быть обработаны с пропорциональным увеличением аппаратного обеспечения
  2. Масштабирование с точки зрения наращивания кодовой базы без превращения ее в запутанный беспорядок

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

Производительность, конечно, отличается от масштабирования. Эквивалентный код, написанный на JRuby, будет масштабироваться так же хорошо, но наклон линии будет более крутым - вы » d потребуется больше оборудования для обработки того же количества запросов, но форма линии будет такой же. Но с более практической точки зрения производительность помогает, потому что вы редко можете масштабироваться идеально линейным образом по отношению к добавлению основных или особенно серверов, а более высокая производительность снижает скорость, с которой вам нужно добавлять емкость.

Scala помогает со вторым Дело в том, что он имеет выразительную, принудительную систему типов во время компиляции и предоставляет множество других средств для управления сложностью вашего кода, таких как миксины. Вы можете писать спагетти-код на любом языке, но компилятор Scala сообщит вам, когда некоторые из них не работают, тогда как с JRuby вам придется полагаться исключительно на тесты. Я лично обнаружил, что для меня Python разбивается примерно на 1000 тесно связанных LOC, и в какой момент мне нужно провести рефакторинг, чтобы либо существенно уменьшить количество LOC, либо сделать структуру более модульной. Конечно, этот рефакторинг был бы хорошей идеей независимо от вашего языка, но иногда сложность присуща. Работать с большим количеством тесно связанных LOC непросто на любом языке, но в Scala это намного проще, чем в Python, и я думаю, что аналогия распространяется и на Ruby / JRuby.

5
ответ дан 27 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: