immer

可持久化数据结构库
授权协议 GPL
开发语言 C/C++
所属分类 数据库相关、 数据库调整和优化
软件类型 开源软件
地区 不详
投 递 者 牛兴安
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

immer 是一个用 C ++ 编写的可持久化和不可更改的数据结构库。

  • 可持久化意味着修改数据结构时,将保留旧值。

  • 不可更改意味着所有的操作方法都是 const。

对象不会在适当位置修改,但会返回新值。 因为旧值仍然存在并且永远不会改变,所以新值可以透明地保持对它的公共部分的引用。 这个属性被称为结构共享。

举例:

#include <immer/vector.hpp>
int main()
{
    const auto v0 = immer::vector<int>{}
    const auto v1 = v0.push_back(13);
    assert(v0.size() == 0 && v1.size() == 1 && v1[0] == 13);

    const auto v2 = v1.set(0, 42);
    assert(v1[0] == 13 && v2[0] == 42);
}
    • 它和immutable相似的,实现了操作对象的数据共享,可以优化性能。此库是由mobx作用开发出来的,还得过2019年react开源大奖,它实现的原理使用es6的Proxy完成的。小巧,没有像immutable哪样有新数据类型,而是使用js类型。 安装 yarn add immer@9 我在之前对state原始数据类型如果是一个对象的话,那么操作起来就需要返回一个新的对象,通过过响应式的方式修改

    • 说明 immer 的主旨是通过更简单的方式使用 immutable 不可变数据,它是基于 copy-on-write 机制的(如果资源重复未被修改,则无需创建新的资源,资源会在副本与原始位置之间共享;修改则必须创建一个副本;通过这个机制 复制操作会被推迟到第一次写入时进行,显著的减少资源消耗,同时资源修改操作增加少量开销) 通常来讲 react 的 state 以及 redux 存放在 store

    • Example import produce from "immer" const baseState = [ { todo: "Learn typescript", done: true }, { todo: "Try immer", done: false } ] // baseState 不变

    • from: https://github.com/ronffy/immer-tutorial/blob/master/README.md 前言 Immer 是 mobx 的作者写的一个 immutable 库,核心实现是利用 ES6 的 proxy,几乎以最小的成本实现了 js 的不可变数据结构,简单易用、体量小巧、设计巧妙,满足了我们对JS不可变数据结构的需求。 无奈网络上完善的文档实在太少,所

    • immer 源码阅读 前言 JS 里面的变量类型可以大致分为基本类型和引用类型。在使用过程中,引用类型经常会产生一些无法意识到的副作用,所以在现代 JS 开发过程中,有经验的开发者都会在特定位置有意识的写下断开引用的不可变数据类型。 immer想解决的问题,是利用元编程简化 Immutable 使用的复杂度。举个例子,我们写一个纯函数: const addProducts = products =

    • 开始 在函数式编程中,Immutable这个特性是相当重要的,但是在Javascript中很明显是没办法从语言层面提供支持,但是还有其他库(例如:Immutable.js)可以提供给开发者用上这样的特性,所以一直很好奇这些库是怎么实现Immutable的,这次就从Immer.js(小巧玲珑)入手看看内部是怎么做的。 Copy On Write(写时复制) 第一次了解到这样的技术还是在学Java的时

    • 本文参照源文档 github.com/immerjs/imm…介绍使用immer v3 大家都知道,开发react项目时,推荐使用immutable的数据结构,这样react就能很高效并且正确地检测到数据变化用以确定是否更新UI。 市面上有几款帮助你实现immutable操作的库,immutable.js本身比较中规中矩,提供了一些方法,在必要时你可以调用他们,然而笔者觉得他增加了使用负担,要专门

    • const isObject = target => typeof target === 'object' && target !== null; const produce = (target, action) => { const copy = Array.isArray(target) ? [...target] : {...target}; let temp = copy

    • Immer.js 库的使用 JS 里面的变量类型可以分为 基本类型 和 引用类型 。 在使用过程中,引用类型经常会产生一些无法意识到的副作用,所以在现代 JS 开发过程中,有经验的开发者都会在特定位置有意识的写下断开引用的不可变数据类型。 import produce from 'immer'; const data = { done: false, val: 'string', }

     相关资料
    • 问题内容: 有没有人知道一个库或至少一些有关在Java中创建和使用持久性数据结构的研究?我不是将持久性称为长期存储,而是将持久性称为不变性(请参阅Wikipedia条目)。 我目前正在探索为持久性结构建模api的不同方法。使用构建器似乎是一个有趣的解决方案: 但这仍然感觉有些呆板。有任何想法吗? 问题答案: 我想显而易见的选择是: o切换到临时数据结构(构建器)进行更新。这是很正常的。用于操纵例如

    • 本文向大家介绍内存型数据库Redis持久化小结,包括了内存型数据库Redis持久化小结的使用技巧和注意事项,需要的朋友参考一下 因为Redis是内存型数据库,所以为了防止因为系统崩溃等原因导致数据丢失的问题,Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法是快照(RDB),它可以将存在于某一个时刻的所有数据都写入到硬盘里面,另外一种方法是只追加文件(AOF),它会在执行写命令时

    • 数据落盘问题的由来 这本质上是数据持久化问题,对于有些应用依赖持久化数据,比如应用自身产生的日志需要持久化存储的情况,需要保证容器里的数据不丢失,在Pod挂掉后,其他应用依然可以访问到这些数据,因此我们需要将数据持久化存储起来。 数据落盘问题解决方案 下面以一个应用的日志收集为例,该日志需要持久化收集到ElasticSearch集群中,如果不考虑数据丢失的情形,可以直接使用前面提到的应用日志收集一

    • 为了学习数据的持久化,写一个简单的地址薄合约.虽然这个例子因为各种原因作为生产环境的合约不太实用,但它是一个很好的合约用来学习EOSIO的数据持久化并且不会因为与eosio multi_index不相关的相关业务逻辑分心. Step 1:创建一个新的文件夹 进入之前的目录: cd /Users/zhong/coding/CLion/contracts 为我们的合约创建一个新的目录并进去: mkd

    • 主要内容:一、数据持久化,二、持久化的形式,三、源码分析,四、总结一、数据持久化 redis做为一种内存型数据库,做持久化,个人感觉略有鸡肋的意思。似乎有一种,别人有,自己不有也不行的感觉。以目前Redis主流的应用方式,如果仔细分析,基本上都是在内存中即可完成,对持久化没要求或者说不大。再举一个反例,如果内存中有几百G甚至更多的数据,真要是整体当机,恢复的时间基本就是灾难。 目前基本应用仍然是以关系型数据库或者其它数据库(如Hadoop,Mysql等)为持久化

    • 目的 配置 NFS 共享为 OpenShift 节点提供存储,并且配置 OpenShift 持久卷以绑定至数据库 Pod。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 配置 NFS 共享持久卷1. 登录到 NFS 服务器 # ssh nfs.example.com2. 创建 config-nfs.sh 脚本,内容如下 #!/usr/bin/sh exp

    • 我正在使用网络逻辑10.3。我正在尝试配置一个持久订阅,其中包含由 jdbc 存储(在 Oracle DB 中)支持的持久消息。我有一个主题,MDB 正在作为持久订阅者侦听该主题。在场景-1下:如果我发送消息,它会命中MDB。 在场景2中:我挂起了MDB,希望发送到主题的消息只要不被MDB(它是唯一注册的持久订阅者)使用,就会一直存在。但是当我向主题发送消息时,它短暂地出现在那里,然后就消失了(我

    • 我正在开发一个服务,在该服务中,我侦听队列,反序列化接收到的消息,并将它们持久化到数据库(Oracle)。大致情况: 在缺省消息侦听器bean中,我设置并发性和setSessionTransactived(true)。这足以使整个onMessage具有事务性吗?因此,在一个事务中接收并保存一条消息,并在其中任何一点出现故障时回滚?当试图保存特定消息时,我尝试对其抛出异常,消息确实被回滚到队列,侦听