Что делает Эрланг непригодным для дорогостоящей работы?

В начале программирования Erlang существует следующее:

Что делает Erlang лучшим выбором для вашего проекта? Это зависит от того, что вы ищете строить. Если вы занимаетесь написанием приложения с хрустящим номером, интенсивная система или клиентское программное обеспечение, работающее на мобильном телефоне, тогда извините, вы купил неправильную книгу.

Подразумеваемое сообщение состоит в том, что Erlang не подходит для дорогостоящей работы с вычислением. Что делает Эрланг настолько неподходящим, или я неверно истолковал?

Ответ 1

Erlang светит для приложений с привязкой к I/O, т.е. проблем, ограничивающим фактором которых является латентность и пропускная способность операций ввода-вывода, а не скорость, с которой инструкции могут быть перенесены через конвейер CPU. Веб-серверы и базы данных являются хорошими примерами приложений, связанных с I/O: коэффициенты известкования скорее всего будут диском и сетью, а не процессором. Традиционно "сложные вычисления" включают криптографические инструменты и научное моделирование.

Что касается того, почему Erlang не подходит для таких языков, как C и Fortran, когда речь заходит об вычислительно-интенсивных проблемах, мы должны учитывать такие вещи, как генерация кода и кэш-совместимость... Я дам ему попробовать:

  • Генерация кода. Обычно, когда вы запускаете программу Erlang, она будет запускаться в BEAM, виртуальной машине на основе резьбового кода. Хотя BEAM работает достаточно хорошо для большинства целей, у него намного больше накладных расходов на логическую "инструкцию", чем на код, созданный современным оптимизирующим компилятором C. Проект HiPE предоставляет собственный компилятор кода для Erlang, который пару лет назад был встроен в основное исходное дерево OTP *. Несмотря на то, что он, безусловно, улучшает производительность Erlang, он по-прежнему будет трудно сопоставлять хорошо написанную программу C или Fortran.
  • Cache-friendlyliness. Система памяти является основным узким местом в современных компьютерах: чтение из основной памяти может занимать сотни процессорных циклов! Чтобы решить эту проблему, разработчики CPU представляют несколько уровней кеша, чтобы скрыть задержку памяти. Кэши используют два ключевых свойства компьютерных программ: временную и пространственную локальность, то есть области памяти, которые недавно ссылались (и соседние регионы), скорее всего, будут ссылаться снова. Языки, такие как C и Fortran, обеспечивают большой контроль над тем, где и как распределяется память, позволяя программисту настраивать алгоритмы, чтобы хорошо играть с кэшами. То же самое не относится к динамическим языкам, таким как Erlang, где выделение памяти скрыто от программиста и автоматически обрабатывается виртуальной машиной.
  • Размер кода. Аргумент о пространственной локальности сохраняется и для кода; Код Erlang, будь то в форме родного или байткода, обычно будет больше, чем соответствующий скомпилированный C-код. Это приводит к более частым промахам в кэше команд.

Имейте в виду, что это всего лишь верхушка айсберга, и что я никоим образом не являюсь экспертом в области Erlang или языка. Однако не позволяйте тому, чтобы Эрланг, вероятно, никогда не запускал научное моделирование, пугает вас; для многих приложений это абсолютно фантастический язык.

* HiPE доступен через пакет erlang-base-hipe в Debian или ./configure --enable-hipe из исходного архива.

Ответ 2

Именно этот код C может быть значительно быстрее в большинстве случаев. Эрланг отлично справляется с отказоустойчивостью, распределенными вычислениями и concurrency. Программисты, как правило, одинаково умеют писать erlang или другие языки, но если вы хотите скорость, используйте C или С++, возможно, из порта erlang, поэтому этот код можно использовать из вашего собственного приложения erlang.

Ответ 3

Erlang - это параллельный функциональный язык программирования, предназначенный для программирования больших промышленных систем реального времени. Ничто не мешает вам разрабатывать "хрустящее приложение или систему с интенсивной графикой", но язык сияет в обработке событий в реальном времени.