Ответ 1
Возможно, вы можете найти свои ответы здесь: http://www.artima.com/scalazine/articles/twitter_on_scala.html
Параграф "Надежный, высокопроизводительный код" очень хорошо его поймает: -).
Bill Venners: Мне любопытно, и люди из Ruby захотят, чтобы это было написано out: Можете ли вы рассказать о том, что, по вашему мнению, не было в рубиновом языке? область надежного высокопроизводительного кода?
Стив Дженсон. Одна из вещей, которые я обнаружил на протяжении всей моей карьеры, - это необходимость иметь долгоживущие процессы. И Ruby, как и многие скрипты языков, не может быть средой для долгоживущих процессов. Но JVM очень хорош в этом, потому что он был оптимизирован для этого за последние десять лет. Таким образом, Scala обеспечивает основу для написания долгоживущие серверы, и это в первую очередь то, что мы используем для Twitter прямо сейчас. Другое, что нам действительно нравится в Scala, - это статическая типизация это не больно. Иногда в Ruby было бы очень приятно сказать такие вещи, как heres, необязательная аннотация типа. Это тип, который мы действительно ожидаем увидеть здесь. И мы находим, что это действительно полезно в Scala, чтобы быть в состоянии указать информацию о типе.
Roboy Pointer. Кроме того, Ruby не имеет хорошей поддержки потоков. Это стало лучше, но когда мы писали эти серверы, зеленый потоки были единственной доступной. Зеленые нити не используют фактические потоки ядра операционной системы. Они вроде эмулируют потоки периодически останавливая то, что они делают, и проверяя, другой "поток" хочет запустить. Итак, Ruby эмулирует потоки в пределах одноядерный процессор или процессор. Мы хотели работать на многоядерных серверах которые не имеют бесконечного объема памяти. И если у вас нет хорошая поддержка потоковой передачи, вам действительно нужно несколько процессов. А также потому что сборщик мусора Rubys не так хорош, как Javas, каждый процесс использует много памяти. Мы не можем запустить очень много Ruby демонов на одной машине без потребления больших объемов памяти. В то время как при запуске на JVM мы можем запускать много потоки в одной и той же куче, и пусть один процесс принимает все памяти машин для игровой площадки.
Алекс Пейн: Я определенно хочу забить дом, что сказал Стив типирование. По мере роста нашей системы, большая часть логики в нашей системе Ruby тип репликации системы типов, либо в наших модульных тестах, либо как валидации на моделях. Я думаю, что это может быть просто свойство систем на динамических языках, что в конечном итоге вы в конечном итоге переписываете ваш собственный тип системы, и вы вроде делаете это плохо. Вы проверяете нулевые значения по всему месту. Theres много звонков в Rubys вид? метод, который спрашивает: "Является ли это своего рода объектом User? вот чего ожидали. Если мы этого не получим, это будет взорваться". Жаль, что нужно написать все это, когда есть решение, существовавшее в мире языков программирования для десятилетий.