Неизменяемый больше не как ленивый


Immutable предназначен для переноса постоянных коллекций данных в Javascript. Созданный Facebook, он имеет открытый исходный код и только что достиг версии 3.0.0.

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

Read.ME на Github объясняет как:

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

и как:

Immutable предоставляет List, Stack, Map, OrderedMap и Set с использованием попыток постоянных хэш-карт и векторных попыток, популяризированных Clojure и Scala. Они достигают эффективности на современных виртуальных машинах JavaScript за счет использования структурного разделения и минимизации необходимости копировать или кэшировать данные.

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

Immutable v3.0.0 представляет ряд новых концепций, переименованных методов и других критических изменений, которые, по словам Ли Байрона, были мотивированы тем, что:

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

Байрон также отмечает движение в сторону «нетерпеливых операций»:

Возможно, самым большим концептуальным изменением является то, что все операции сбора (фильтр, сопоставление, дубль, пропуск, срез и т. Д.) По умолчанию больше не являются ленивыми.

Он приводит в качестве примера, что в Immutable v2.x.x распространенным шаблоном является выполнение операции сбора с методом a.toXXX () для преобразования обратно в исходный тип.

// Неизменяемый v2

myMap.filter (somePredicate)

// Seq {…}

myMap.filter (somePredicate) .toMap ()

// Карта { … }

В Immutable v3 подобные операции теперь выполняются, явное преобразование больше не требуется.

// Неизменяемый v3

myMap.filter (somePredicate)

// Карта { … }

Он комментирует:

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

Ленивая оценка теперь возможна только в том случае, если вы сделаете явное преобразование в тип Seq перед применением map, filer и т. Д., Что некоторые могут посчитать позором. Ленивое вычисление в Immutable в основном связано с производительностью, а не с семантикой, поскольку нет бесконечных коллекций.


Добавить комментарий