# @calcit/finger-vec 中文文档

规范地址：https://npmcn.com/package/%40calcit/finger-vec/

版本：0\.1\.1
npm 元数据更新时间：2026-10-02T02:56:22.625Z
中文译文更新时间：2026-11-08T23:45:02.736Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40calcit/finger-vec
原文对照：https://npmcn.com/package/%40calcit/finger-vec/?lang=original
项目主页：https://github.com/calcit-lang/finger-vec.ts#readme
源码仓库：https://github.com/calcit-lang/finger-vec.ts

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：39.4 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-10-01T18:17:09.911Z
- 最新版本发布：2026-10-02T02:56:22.137Z
- 近 30 天下载量：13414（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：2（近 12 个月 2 个）

## 中文简介

Calcit 运行时间的持久性向量: 有前后缓冲器的被块化的放松的 B- tree

## 安装

```sh
npm install @calcit/finger-vec
```

也可以使用：`pnpm add @calcit/finger-vec`、`yarn add @calcit/finger-vec`、`bun add @calcit/finger-vec`

## README

## 手指维克( TypeScript)

一种持久性(不可移动、结构共享)矢量,用于 [卡尔西特](https://github.com/calcit-lang/calcit) JavaScript 运行时间. 它取代了列表中 [@calcit/ternary-tree (英语)](https://github.com/calcit-lang/ternary-tree.ts)罗斯特双胞胎住在 [手指维克.rs](https://github.com/calcit-lang/finger-vec.rs);两者都使用相同的布局和算法.

![npm](https://img.shields.io/npm/v/@calcit/finger-vec?style=flat-square)

### 版式

```text
front buffer | relaxed B-tree of chunks | back buffer
```

-   元素生活在多达32个物项的块中;32个或更少的物项清单是一个阵列.
-   中间是松散的B-树(分支因子32,累积大小,所有叶子都在同一深度),和RRB矢量一样.
-   两端的缓冲使得推力和弹出都变得便宜. 附加到最新版本的列表会写入自己的后排而非复制;更古老的版本从不读过自己的结尾,因此不会受到影响.
-   接合会沿着接合线相接,并合并了那里的节点,因此接合环会保持高度对数.

| 运行 | 费用 |
| --- | --: |
| `get`, (中文(简体) ), `assoc` | `O(log₃₂ n)` |
| `pushLeft`, (中文(简体) ), `pushRight`, (中文(简体) ), `dropLeft`, (中文(简体) ), `dropRight` | 摊销 `O(1)` 加块复制件 |
| `concat`, (中文(简体) ), `split`, (中文(简体) ), `slice`, (中文(简体) ), `insert`, (中文(简体) ), `dissoc` | `O(log n)` |
| `FingerVec.from(array)` | `O(n)` |

### 使用量

```ts
import { FingerVec } from "@calcit/finger-vec";

const xs = FingerVec.of(1, 2, 3);
const ys = xs.pushRight(4).pushLeft(0);
ys.toArray(); // [0, 1, 2, 3, 4]
xs.len(); // 3, unchanged

const [left, right] = ys.split(2);
left.concat(right).equals(ys); // true
ys.slice(1, 3).toArray(); // [1, 2]
for (const x of ys) console.log(x);
```

主要方法: `len`, (中文(简体) ), `get`, (中文(简体) ), `first`, (中文(简体) ), `last`, (中文(简体) ), `pushLeft`编号 :`prepend`, (中文(简体) ), `pushRight`编号 :`append`, (中文(简体) ), `dropLeft`, (中文(简体) ), `dropRight`, (中文(简体) ), `rest`, (中文(简体) ), `butlast`, (中文(简体) ), `assoc`, (中文(简体) ), `dissoc`, (中文(简体) ), `insert(idx, item, after)`, (中文(简体) ), `insertAt`, (中文(简体) ), `assocBefore`, (中文(简体) ), `assocAfter`, (中文(简体) ), `split`, (中文(简体) ), `slice`, (中文(简体) ), `take`, (中文(简体) ), `skip`, (中文(简体) ), `concat`, (中文(简体) ), `FingerVec.concatAll`, (中文(简体) ), `reverse`, (中文(简体) ), `map`, (中文(简体) ), `forEach`, (中文(简体) ), `findIndex`, (中文(简体) ), `indexOf`, (中文(简体) ), `toArray`, (中文(简体) ), `equals`, (中文(简体) ), `items()` 财务报告和审定财务报表 `for...of`。 。 。 . `get` 返回时 `undefined` 超出范围; `rest`, (中文(简体) ), `butlast`, (中文(简体) ), `assoc`, (中文(简体) ), `dissoc`, (中文(简体) ), `insert` 财务报告和审定财务报表 `slice` 丢入无效的输入,匹配所使用的三角树函数 Calcit .

### 业绩

对照 `@calcit/ternary-tree 0.0.26` 在节点22上,Linux x86-64,单跑:

| 大小写 | 三角树 | 手指维克 | 加速 |
| --- | --: | --: | --: |
| 附录 100k | 70.00分钟 | 24.87分钟 | 2.8× (中文(简体) ) |
| 预花100k | 82.35毫秒 | 48.84毫秒 | 1.7× (中文(简体) ) |
| 从阵列 100k | 19.46分钟 | 0.95 分钟 | 20× (英语) |
| 随机 `get` 100k (100克) (100克) | 58.10毫秒 | 20.59分钟 | 2.8× (中文(简体) ) |
| `rest` 直到空出, 100克 | 32.91毫秒 | 18.94毫秒(每分钟) | 1.7× (中文(简体) ) |
| 随机 `assoc` 100k (100克) (100克) | 148.21 毫秒 | 90.48分钟 | 1.6× (中文(简体) ) |
| `concat acc [x]` 五千块 `get` 每个项目 | 118.18毫秒 | 1.65毫秒(每分钟一秒) | 72× (中文(简体) ) |
| 在中间3k插入 | 174.84分钟 | 32.33分钟 | 5.4× (中文(简体) ) |
| 队列: 附加+休息 100k | 110.77毫秒 | 22.44分钟 | 4.9× (中文(简体) ) |
| 32 项列表: 从数组 x300k | 543.96 毫秒(秒数) | 30.94毫秒(每秒) | 18× (中文(简体) ) |
| 8 个项目列表: 附加到同一基数×300k | 24.65毫秒 | 48.42分钟 | 0.5× (中文(简体) ) |
| `concat acc [x]` 5k 调用 | 6.33 分钟 | 9.41分钟 | 0.7× (中文(简体) ) |

重复复制到一个共享的小列表中 每次复制它的块, 它比Ternary-tree的小节点慢。 另一方面,三重树在5000个凸起后会达到2,501个深度,在几千个中间插入后会溢出堆栈; FingerVec会停留在3–4深度. 运行 `npm run bench` 给机器上的指纹号码.

### 发展

QQ 类型脚本QQ `npm run test:package` 焦油弹 焦油弹 节点-; 。

发布通过 `.github/workflows/npm-publish.yaml` 空虚 npm OIDC 信任的出版, QQ sord。 npm ch 信任的出版商 qq `calcit-lang/finger-vec.ts` 和文件名 `npm-publish.yaml`; 当前工作 43. GitHub Environment, 该选项留空。保存配置后可通过 发布QQ工作流程;2FA QQ。

```bash
npm install
npx tsc
node lib/test.mjs
node lib/bench.mjs
```

测试将随机操作序列与阵列进行比较,在每个步骤后检查结构变异性,并申明深度界限来进行接合循环和中间插入.

### 许可证

麻省理工学院

## 常见问题

### @calcit/finger-vec 是什么？

Calcit 运行时间的持久性向量: 有前后缓冲器的被块化的放松的 B- tree

### 如何安装 @calcit/finger-vec？

在项目目录运行 npm install @calcit/finger-vec，或使用 pnpm add / yarn add / bun add。

### @calcit/finger-vec 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @calcit/finger-vec 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @calcit/finger-vec 可以商用吗？

@calcit/finger-vec 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @calcit/finger-vec 的下载量有多少？

根据 npm 官方下载统计，@calcit/finger-vec 在 2026/10/09 – 2026/11/07 这 30 天内被下载 13,414 次，日均约 447 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @calcit/finger-vec 还在维护吗？

最新版本 0\.1\.1 发布于 2026/10/02（1 个月前）；至今共发布 2 个版本，其中过去 12 个月发布了 2 个；首次发布于 2026/10/02。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

