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

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

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

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

Все ли сводится к статическим или динамическим типам? В этом случае?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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