HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>В языке программирования<strong>Clojure</strong>все структуры данных являются иммутабельными. Рассмотрим, как это работает.</p>
1 <p>В языке программирования<strong>Clojure</strong>все структуры данных являются иммутабельными. Рассмотрим, как это работает.</p>
2 <p>На практике у нас отсутствует способ, к примеру, изменить элемент вектора. Все, что нам доступно - это создание нового вектора, у которого изменен один элемент. При этом важно отметить, что язык<strong>Clojure</strong>практически сохраняет алгоритмическую сложность для всех стандартных операций над коллекциями, делая это как по времени, так и по памяти.</p>
2 <p>На практике у нас отсутствует способ, к примеру, изменить элемент вектора. Все, что нам доступно - это создание нового вектора, у которого изменен один элемент. При этом важно отметить, что язык<strong>Clojure</strong>практически сохраняет алгоритмическую сложность для всех стандартных операций над коллекциями, делая это как по времени, так и по памяти.</p>
3 <p>Достигается такая сложность за счет применения персистентных коллекций. В чем здесь заключается идея? В том, что в случае "изменения" структуры старая и новая версии разделяют бóльшую часть внутренних данных. Мало того, старая версия полностью сохраняет свою работоспособность, а мы имеем доступ ко всем существующим версиям структуры, что немаловажно. Ну и, конечно же, ненужные версии соберет сборщик мусора.</p>
3 <p>Достигается такая сложность за счет применения персистентных коллекций. В чем здесь заключается идея? В том, что в случае "изменения" структуры старая и новая версии разделяют бóльшую часть внутренних данных. Мало того, старая версия полностью сохраняет свою работоспособность, а мы имеем доступ ко всем существующим версиям структуры, что немаловажно. Ну и, конечно же, ненужные версии соберет сборщик мусора.</p>
4 <p>Непосредственно из коробки язык программирования<strong>Clojure</strong>поддерживает:</p>
4 <p>Непосредственно из коробки язык программирования<strong>Clojure</strong>поддерживает:</p>
5 <ul><li>односвязные списки,</li>
5 <ul><li>односвязные списки,</li>
6 <li>хеш-таблицы,</li>
6 <li>хеш-таблицы,</li>
7 <li>векторы,</li>
7 <li>векторы,</li>
8 <li>красно-черные деревья.</li>
8 <li>красно-черные деревья.</li>
9 </ul><p>Также реализована персистентная очередь (для стека возможно применение списка либо вектора). Как бы там ни было, всё иммутабельно. Также стоит добавить, что в целях повышения производительности есть возможность создавать собственные типы-записи.</p>
9 </ul><p>Также реализована персистентная очередь (для стека возможно применение списка либо вектора). Как бы там ни было, всё иммутабельно. Также стоит добавить, что в целях повышения производительности есть возможность создавать собственные типы-записи.</p>
10 <p>Здесь мы всего лишь объявляем структуру с тремя полями. При этом компилятор создаст объект с пятью полями (двумя "лишними"). Также одно поле для метаданных (это null в нашем случае) и три поля для, собственно, данных. Кроме того, еще одно поле будет для дополнительных ключей. И даже если для увеличения скорости в программе мы объявим структуру с явным перечислением полей, язык программирования<strong>Clojure</strong>все равно оставит возможность по добавлению дополнительных значений.</p>
10 <p>Здесь мы всего лишь объявляем структуру с тремя полями. При этом компилятор создаст объект с пятью полями (двумя "лишними"). Также одно поле для метаданных (это null в нашем случае) и три поля для, собственно, данных. Кроме того, еще одно поле будет для дополнительных ключей. И даже если для увеличения скорости в программе мы объявим структуру с явным перечислением полей, язык программирования<strong>Clojure</strong>все равно оставит возможность по добавлению дополнительных значений.</p>
11 <p>Остается добавить, что для структур данных в языке<strong>Clojure</strong>предусмотрен специальный синтаксис:</p>
11 <p>Остается добавить, что для структур данных в языке<strong>Clojure</strong>предусмотрен специальный синтаксис:</p>
12 <p>Хотите знать больше? Добро пожаловать на<a>специализированный курс "Closure Developer"</a>в Otus!</p>
12 <p>Хотите знать больше? Добро пожаловать на<a>специализированный курс "Closure Developer"</a>в Otus!</p>
13 <p><em>По материалам https://habr.com/ru/post/173071/.</em></p>
13 <p><em>По материалам https://habr.com/ru/post/173071/.</em></p>
14  
14