Иммутабельность в Clojure | OTUS

Иммутабельность в Clojure

В языке программирования Clojure все структуры данных являются иммутабельными. Рассмотрим, как это работает.

clojure_ar21_1-20219-9b170e.png

На практике у нас отсутствует способ, к примеру, изменить элемент вектора. Все, что нам доступно — это создание нового вектора, у которого изменен один элемент. При этом важно отметить, что язык Clojure практически сохраняет алгоритмическую сложность для всех стандартных операций над коллекциями, делая это как по времени, так и по памяти.

Достигается такая сложность за счет применения персистентных коллекций. В чем здесь заключается идея? В том, что в случае «изменения» структуры старая и новая версии разделяют бóльшую часть внутренних данных. Мало того, старая версия полностью сохраняет свою работоспособность, а мы имеем доступ ко всем существующим версиям структуры, что немаловажно. Ну и, конечно же, ненужные версии соберет сборщик мусора.

1-20219-38972e.png

Непосредственно из коробки язык программирования Clojure поддерживает:

  • односвязные списки,
  • хеш-таблицы,
  • векторы,
  • красно-черные деревья.

Также реализована персистентная очередь (для стека возможно применение списка либо вектора). Как бы там ни было, всё иммутабельно. Также стоит добавить, что в целях повышения производительности есть возможность создавать собственные типы-записи.

2-20219-4fbcd5.png

Здесь мы всего лишь объявляем структуру с тремя полями. При этом компилятор создаст объект с пятью полями (двумя «лишними»). Также одно поле для метаданных (это null в нашем случае) и три поля для, собственно, данных. Кроме того, еще одно поле будет для дополнительных ключей. И даже если для увеличения скорости в программе мы объявим структуру с явным перечислением полей, язык программирования Clojure все равно оставит возможность по добавлению дополнительных значений.

3-20219-f851ff.png

Остается добавить, что для структур данных в языке Clojure предусмотрен специальный синтаксис:

4-20219-0008c1.png

Хотите знать больше? Добро пожаловать на специализированный курс "Closure Developer" в Otus!

По материалам https://habr.com/ru/post/173071/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто