Занимает ли функциональное программирование больше памяти? - PullRequest
23 голосов
/ 23 декабря 2010

Внимание! возможно очень тупой вопрос

Функциональное программирование потребляет больше памяти, чем процедурное программирование? Я имею в виду ... если все ваши объекты (структуры данных) являются неизменяемыми. Не заканчивайте тем, что в данный момент в памяти появляется больше объектов.

Разве это не съедает больше памяти?

Ответы [ 4 ]

6 голосов
/ 24 декабря 2010

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

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

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

6 голосов
/ 23 декабря 2010

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

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

1 голос
/ 02 марта 2013

Помимо избежания защитных копий программистом, очень умная реализация чисто функциональных языков программирования, таких как Haskell или Standard ML (в которых отсутствует равенство физических указателей), может активно восстанавливать совместное использование структурно равных значений в памяти, например, как часть памяти.управление и сборка мусора.

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

Сравните это с объектами в Java: objectидентичность является неотъемлемой частью определения языка.Даже просто замена одного неизменного String на другой создает семантические проблемы.

0 голосов
/ 02 марта 2013

Действительно, по крайней мере, существует тенденция рассматривать память как богатый ресурс (что на самом деле так и есть в большинстве случаев), но это относится к современному программированию в целом.

С несколькими ядрами,параллельные сборщики мусора и доступная оперативная память в гигабайтах, одна использовалась для того, чтобы сконцентрироваться на других аспектах программы, чем в прежние времена, когда подсчитывался каждый байт.Помните, когда Билл Гейтс сказал, что «640K должно быть достаточно для каждой программы»?

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