Я изучал Erlang, но также и я держу глаза открытыми к другим технологиям, таким как Scala. Кто-либо знает, как много производительность узла Scala выдерживает сравнение с Erlang?
Scala несколько ограничена тем фактом, что потоки Java довольно тяжелые. Он не будет масштабироваться по количеству потоков так сильно, как Erlang.
Проще говоря, забудьте о запуске тысяч актеров в Scala в ближайшее время. РЕДАКТИРОВАТЬ : см. Комментарий ниже, свидетельствующий об обратном. В свою защиту я имел в виду тысячи актеров в тысячах потоков.
Однако актеры не являются частью базового языка. Это просто библиотека, которая из-за присущих Scala сильных сторон выглядит так, как если бы она была частью языка. Важность этого состоит в том, что акторы заменяемы . Для Scala есть две важные альтернативные библиотеки акторов. Самый известный из них - это Акка, о котором говорили другие, и я могу только одобрить его как заслуживающий серьезного внимания. Другой - это акторы Lift, которые идут другим путем, предоставляя более простую (и надежную) реализацию акторов, которая отвечает собственным потребностям Lift и не пытается выходить за рамки этого.
Еще одним многообещающим достижением является добавление в Scala 2.8 ограниченных продолжений. Разграниченные продолжения, хотя и трудны в использовании, обеспечивают очень быструю реализацию актора. Чтобы быть ясным, сложно писать библиотеки (например, акторов) с разделенными продолжениями, но такая библиотека не будет чем-то отличаться от других библиотек акторов.
Два слова: тип безопасности
Есть небольшой лакомый кусок на тип безопасности (или его отсутствие) в C в Википедии, который может пролить свет на вас.
-121--1415133-int o = 12;
void *i = &o;
Как получить доступ к int, которому i
точек при наличии только пустых указателей и отсутствии int *. Вы можете знать, что на вашей платформе int составляет 4 байта, так что вы можете memcpy 4 байта от начала того, что пустота * указывает на во временной int и затем использовать это. Но это не очень удобно.
Или с помощью
struct Pair {
char *first;
char *second;
};
, насколько полезным был бы указатель void на структуру Pair? Скорее всего, вы захотите получить доступ к первому члену
, и это будет большой работой, если у вас не будет указателя на структуру Pair.
[Отказ от ответственности: Я в команде Akka]
Я действительно призываю вас хорошо взглянуть на структуру Scala Akka
Мы действительно стремимся предоставить платформу, которая масштабируется горизонтально И вертикально, и которая охватывает неспособность включить системы самовосстановления.
Features: Actors for concurrency Software Transactional Memory (STM) for concurrent transactional composition Supervisor hierarchies for fault-tolerance Cluster Membership Java API with ActiveObjects (Java Actors sort of) Distributed persistence through MongoDB, Cassandra or Redis REST support through exposing Actors as JAX-RS endpoints + (Comet/Ajax Push) + much much more
Надеюсь увидеть вас в перечислять рассылки в ближайшее время!
Scala не спроектирована как когерентная платформа (например, erlang) и поэтому по умолчанию не включает в себя возможности робастного распределения. Библиотека scala actor больше похожа на переработанную на языке модель процесса erlang. Существуют библиотеки, которые предоставляют OTP-подобные возможности и кластеризацию, т.е. Akka.