Какая потребность в неизменяемых / постоянных структурах данных в эрланге - PullRequest
0 голосов
/ 09 октября 2018

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

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Действительно, в Erlang неизменность не решает никаких проблем с «общим состоянием», поскольку неизменяемые данные являются «локальными процессами».

С точки зрения функционального языка программирования ,однако неизменяемость предлагает ряд преимуществ, которые обобщены в этом ответе Quora :

Самое простое определение функционального программирования - это то, что это парадигма программирования, в которой вы преобразуете неизменяемые данные с помощьюfunctions.

Определение использует функции в математическом смысле, где это что-то, что принимает входные данные и создает выходные данные.

OO + изменчивость имеет тенденцию нарушать это определение, потому что, когда вы хотите изменитьчасть данных, которые обычно не возвращают выходные данные, скорее всего, вернут void или unit, и что при вызове метода для объекта сам объект не вводится для функции.

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

0 голосов
/ 09 октября 2018

Erlang изначально был реализован в Prolog, который также не использует изменяемые структуры данных (хотя некоторые диалекты используют).Так что все началось без них.Это делает реализацию во время выполнения проще и быстрее (в частности, сборку мусора).

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

Многие на самом деле считают их отсутствие положительным благом: меньше заботятся об идентичности объекта, нет необходимости защищающего копирования, потому что вы не знаете, собирается ли какой-то другой фрагмент кода изменить переданные вами данные (илиможно изменить позже, чтобы изменить его) и т. д.

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

Я помню, как видел список рассылкипост Джо Армстронга довольно давно (который я не смог найти при быстром поиске сейчас) о том, что он изначально планировал добавлять изменяемые переменные, когда они ему понадобятся ... за исключением того, что он никогда этого не делал, и производительность была хорошейхватит на все, для чего он использовал Эрланга.

0 голосов
/ 09 октября 2018

как это будет работать?

factorial(1) -> 1;
factorial(X) ->
    X*factorial(X-1).

если вы запустите factorial (4), один процесс будет выполнять ту же функцию.Каждый раз, когда функция будет иметь свое собственное значение X, если значение X находится в области действия процесса, а не рекурсивные функции, функция не будет работать.Итак, сначала мы должны понять сферу.Если вы хотите сказать, что вы не понимаете, почему данные должны быть неизменяемыми в рамках одной функции / блока, у вас есть точка, но было бы головной болью думать о том, где данные неизменны, а где нет ».т.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...