Erlang является действительно функциональным языком? [закрытый]

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

21
задан Jonas 17 June 2012 в 23:54
поделиться

3 ответа

Центральная идея заключается в том, что каждый процесс - это функциональная программа над входным потоком сообщений. Результатом работы функциональной программы является выходной поток сообщений для других. С этой точки зрения Erlang является довольно чистым функциональным языком; в нем нет деструктивных обновлений структур данных (как setcar в Lisp и большинстве схем).

За редким исключением, все встроенные функции, такие как операции над таблицами ETS, также следуют этой модели: помимо вопросов эффективности, эти BIF могли бы быть реализованы с помощью чистых процессов Erlang и передачи сообщений.

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

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

33
ответ дан 16 October 2019 в 23:41
поделиться

Существует программа Intrarts, называемая «регулируемой», и версия командной строки кажется свободной (цена):

регулируемой является формирование полосы пропускания приложение для Mac OS X и FreeBSD который позволяет закрывать ваш восходящий поток полоса пропускания, определение приоритетов пакетов ACK и поддерживайте высокую скорость загрузки даже когда ваш сервер отправляет полная скорость.

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

-121--4565768-

Следующее обнаружит, установлена или нет .net framework 3.5.. и, если не установлен, установит его. Просто запустите это в командной строке.

if exist "%WINDIR%\Microsoft.Net\Framework\v3.5" goto end start /wait .\Framework\dotnetfx.exe /q /norestart" :end 

Если вы хотите обнаружить другие версии, замените v3.5 на v2.0 или v1.0. Кроме того, если .net не обнаружен, установка .net framework будет выполняться в автоматическом режиме, т.е. без взаимодействия с пользователем.

-121--1391370-

Функциональная часть состоит в том, что вы склонны передавать функции. Большинство лангугов можно использовать и как функциональный язык, и как императивный язык, даже C (вполне возможно сделать программу, состоящую только из указателей функций и констант).

Я полагаю, что отличительным фактором обычно является отсутствие изменяемых переменных в функциональных языках.

1
ответ дан 16 October 2019 в 23:41
поделиться

Да, это функциональный язык. Это не чистый функциональный язык, как Haskell, но, опять же, и LISP (и никто не спорит, что LISP не работает).

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

8
ответ дан 16 October 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: