Будущие инвестиции: Эрланг против Scala

поскольку параллельное программирование становится все более важным, мне было интересно что вы думаете об Эрланге против Scala в этом отношении. Мне кажется, что Scala имеет большую пользовательскую базу и потенциально более яркое будущее, чем Эрланг. Более того, Scala - это вид java.

Я знаю, что эти вопросы всегда немного субъективны, но что было бы лучше будущие инвестиции: Erlang или Scala. Или даже другой язык?

Ответ 1

Erlang разработан для параллельных отказоустойчивых систем связи. Вы можете легко писать серверы, которые обрабатывают большое количество сетевых подключений и (благодаря одному сборщику мусора на процесс Erlang), серверы могут сохранять мягкие характеристики в реальном времени (т.е. Весь сервер не приостанавливается до окончания GC). Вы также можете скомпоновать Erlang-код, распределить его по нескольким узлам и т.д. Поэтому (возможно) самый масштабируемый сервер XMPP (ejabberd) написан в Erlang. Yaws (веб-сервер) - еще один пример, где Erlang превосходит: http://www.sics.se/~joe/apachevsyaws.html. Riak/Couch - примеры сборки базы данных NoSQL с помощью Erlang. Это проблемы, в которых Эрланг - отличный выбор.

Но Erlang VM работает не так быстро, как JVM с точки зрения необработанных вычислений, поэтому, как только вам нужно сделать что-то вычислительно интенсивное (например, финансовое моделирование), JVM станет вашей предпочтительной платформой. Более того, модель Erlang concurrency (актеры) испечена на этом языке. Если это не соответствует проблеме, которую вы пытаетесь решить, тогда вы не будете довольны Erlang.

Scala является более "общим" языком в том смысле, что concurrency, горизонтальная масштабируемость или отказоустойчивость не являются частью языка. Он решается на уровне библиотек (поэтому в Scala есть как минимум 3 реализации актеров). Хорошо, что вы можете выбрать модель concurrency, которая подходит вашему домену. Например, если вам нужна транзакционная память программного обеспечения (STM), просто выберите Akka, и вам хорошо идти (http://akka.io/).

Плюс есть целый аргумент, что с помощью Scala вы можете использовать свои "инвестиции в JVM" и множество JVM-библиотек.

Вы не дали никакой информации о том, какое программное обеспечение вы хотите написать на любом из этих языков, поэтому вам трудно дать окончательный ответ. Сказав, что, учитывая все вышесказанное, Scala может быть "более безопасным" капиталом, чем Erlang (вообще не избивать Erlang/OTP, это прекрасный язык/платформа).

BTW. Если для вас важна одна машина concurrency Clojure (http://clojure.org/), не следует упускать из виду (также язык JVM).

UPDATE1: Если вам нравится то, что предлагает Erlang, но не его синтаксис, посмотрите elixir-lang.org

Ответ 2

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

Что касается обучения параллельному программированию, то все будет хорошо. Ключевым моментом здесь является то, что вы будете изучать что-то новое, и если не будет открытия вакансии, которое вы пытаетесь нанять, для этого используется Erlang, это действительно не имеет значения. Плюс, даже если это открытие потребовало Erlang, у вас все же был бы хороший шанс, если бы вы знали Scala действительно хорошо.

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

Ответ 3

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

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