当前位置: 首页 > news >正文

仓颉语言 1.0.0 升级指南:工具链适配、collection 操作重构与 Map 遍历删除避坑

本文为原创文章,版权归作者所有。转载请注明出处,作者:行十万里人生,未经允许不得转载。

1. Cangjie 1.0.0 工具链适配

版本号 1.0.0 为 Cangjie 语言首个长期支持版本(LTS)。根据 文档-仓颉编程语言官网 中的指导,即可成功安装仓颉工具链 :下载并解压安装包 -> 执行安装脚本 -> 配置环境变量。

如果使用 VS Code 进行 Cangjie 开发,则还需下载并安装适用于 VS Code 的插件(下载中心-仓颉编程语言官网)。

进行完以上流程后,可在 power shell 中执行 cjc -v 命令,检验版本号 1.0.0 工具链安装是否成功。

2. 非标准库组件迁移(版本 0.53.18 -> 1.0.0)

版本号 0.53.18 中存在多个非标准包,如:encoding、net、serialization、log …

随着版本升级,部分内容被纳入版本号 1.0.0 的标准库(std)中,其余部分则被整合进 stdx 包进行统一管理。

要在版本 1.0.0 中使用这些非标准包组件,需要执行以下步骤:

  • 首先下载 stdx 包,并将其解压缩至本地存储位置。
  • 接着在项目文件 cjpm.toml 中添加如下配置,以保证正确引用 stdx 包:
[target.x86_64-w64-mingw32]                                                     # 系统架构和 OS 信息[target.x86_64-w64-mingw32.bin-dependencies]# 根据 stdx 实际路径进行配置path-option = ["C:\\cangjie-stdx-windows-x64-1.0.0.1\\windows_x86_64_llvm\\dynamic\\stdx"] 

下载路径:cangjie-stdx

在这里插入图片描述

3. collection 操作统一与新增类型

旧版本 0.53.18 中,不同 collection 类型提供了各自独立的操作接口。例如,ArrayList<T> 支持 append 和 appendAll 方法,而 HashMap 和 HashSet 则使用 put 方法进行元素插入。

新版本统一了各 collection 的 API 命名规范。如使用 add(或 addXxx)方法来进行元素的插入操作,使用 remove 方法进行元素移除的操作;且通过函数重载机制, 这些方法能够支持单元素、批量元素或其他操作。

以 ArrayList<T> 和 HashMap<K, V> 为例,具体详见 类 - 仓颉编程语言 :

  • class ArrayList<T> :

  • class HashMap<K, V> :

除了统一 collection 类型的 API 命名规范之外,版本 1.0.0 拓展了多种常见的容器类型,进一步丰富了内置库的数据结构能力,包括:

  • 线性结构:ArrayDeque<T> (双端队列)、ArrayQueue<T> (循环队列) 、ArrayStack (栈)
  • 有序结构:TreeMap<K, V> (基于 BST 实现的有序映射)、TreeSet<T> (基于 TreeMap 实现的有序集合)
  • 链表结构:LinkedList<T> (双向链表)

4. Map / Set 遍历删除避坑

在 Cangjie 中,Map / Set 类容器(HashMap / HashSet / TreeMap / TreeSet)均不支持 “遍历并删除” 的行为。这对于需要在遍历过程中,筛选(不)满足条件的 key 值并进行删除的场景带来了极大不便。

好在 Cangjie 中各类容器的 remove 操作支持批量删除元素,因此可以在遍历过程中使用 ArrayList 收集所有(不)满足条件的 key 值,在遍历结束后调用 remove(all : deleted) 方法进行批量删除,从而解决此问题。

// 伪代码:let deleted = ArrayList<T>()for ((key, value) in map) {// 收集所有(不)满足条件的 key 值if (xxx) {deleted.add(key)}
}map.remove(all : deleted)

正常情况下 “直接删除数据” 与 “批量删除数据” 的性能差异并不大,以 HashMap 为例:

Ubuntu 20.04 平台下进行测试。

http://www.xdnf.cn/news/1090639.html

相关文章:

  • ali linux 安装libreoffice
  • 《重构项目》基于Apollo架构设计的项目重构方案(多种地图、多阶段、多任务、状态机管理)
  • Context Engineering:从Prompt Engineering到上下文工程的演进
  • Ragas的Prompt Object
  • 微软 Bluetooth LE Explorer 实用工具的详细使用分析
  • JVM字节码加载与存储中的细节
  • 川翔云电脑:突破硬件极限,重构设计生产力范式
  • 【vim中替换】
  • 【自动驾驶】经典LSS算法解析——深度估计
  • BEV感知算法:自动驾驶的“上帝视角“革命
  • django 一个表中包括id和parentid,如何通过parentid找到全部父爷id
  • 免费扫描软件NAPS2:跨平台支持 旋转裁剪 + 多页合并,纸质文档变 PDF / 图片
  • 详解Kafka重平衡机制详解
  • Python(30)基于itertools生成器的量子计算模拟技术深度解析
  • 18-C#改变形参内容
  • 《设计模式之禅》笔记摘录 - 5.代理模式
  • AI应用实践:制作一个支持超长计算公式的计算器,计算内容只包含加减乘除算法,保存在一个HTML文件中
  • 设计模式(行为型)-责任链模式
  • Flink Forward Asia 2025 主旨演讲精彩回顾
  • 两张图片对比clip功能
  • React 19 概览:新特性与生态系统变革
  • 1.1 ARMv8/ARMv9安全扩展
  • 网络安全之RCE分析与利用详情
  • 前端使用Web Cryptography API进行内容加密,几乎无法破解
  • 循环神经网络详解
  • 数据结构之位图和布隆过滤器
  • Web 前端框架选型:React、Vue 和 Angular 的对比与实践
  • [特殊字符] 突破小样本瓶颈:DataDream——用Stable Diffusion生成高质量分类数据集
  • “AI 曼哈顿计划”:科技竞赛还是人类挑战?
  • VUE混合开发,选哪个PHP框架最顺手?