当前位置: 首页 > 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.lryc.cn/news/583141.html

相关文章:

  • IT系统安全刚需:绝缘故障定位系统
  • Tailwind CSS纵向滚动条设置
  • PiscTrace深蹲计数功能实现:基于 YOLO-Pose 和人体关键点分析
  • 基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(4)集成Allure报表
  • JavaScript数组方法——梳理和考点
  • SpringBoot实现动态Job实战
  • DRT-Net: Dual-Branch Rectangular Transformer with Contrastive Learning
  • 离线二维码生成器,无需网络快速制作
  • springBoot使用XWPFDocument 和 LoopRowTableRenderPolicy 两种方式填充数据到word模版中
  • Android-重学kotlin(协程源码第一阶段)新学习总结
  • npm init vue@latestnpm error code ETIMEDOUT
  • 网络请求与现实生活:用办理业务类比理解HTTP通信
  • kotlin学习,val使用get()的问题
  • AI 知识库 2.0 时代!2025 设备管理系统如何实现 “智慧运维”?
  • Docker完全指南:从入门到生产环境实战
  • 将.net应用部署到Linux服务器
  • 深入解析 .NET 泛型:从原理到实战优化
  • Docker 搭建 Harbor 私有仓库
  • 使用 Docker 搭建 Go Web 应用开发环境——AI教你学Docker
  • mac m1安装大模型工具vllm
  • Vue的watch和React的useEffect
  • “AI 曼哈顿计划”:科技竞赛还是人类挑战?
  • 电商销量第一,贝锐向日葵智能远控硬件背后的软硬结合战略
  • Mac mini 高性价比扩容 + Crossover 游戏实测 全流程手册
  • Python-FAQ-单例模式
  • 深入理解图像二值化:从静态图像到视频流实时处理
  • 一天两道力扣(3)
  • 计蒜客T3473丑数、Leetcode2401最长优雅子数组、Leetcode167两数之和、Leetcode581最短无序连续子数组
  • 开源链动2+1模式与AI智能名片融合下的S2B2C商城小程序源码:重构大零售时代新生态
  • 【工具】Pycharm隐藏文件类型或目录