当前位置: 首页 > 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.dtcms.com/a/271371.html

相关文章:

  • 深度学习12(卷积神经网络)
  • java idea 本地debug linux服务
  • Vue响应式原理四:响应式-监听属性变化
  • 国密算法(SM2/SM3/SM4)
  • 【MySQL】一些操作:修改MySQL root密码等等
  • Java 多线程编程:原理与实践
  • UI前端与数字孪生结合实践探索:智慧物流的仓储优化与管理系统
  • 供应链管理:定量分析中的无量纲化处理
  • Java 各集合接口常用方法对照表
  • 虚拟化技术,容器技术和Docker
  • Android View 绘制流程 简述 (无限递归+BitMap问题)
  • android activity生命周期温习
  • Java HashMap 的 get 和 put 方法的实现流程
  • android——热修复(补丁)
  • 微软官方C++构建工具:历史演变、核心组件与现代实践指南
  • SQL注入:现象、本质与防御详解
  • 文本标签提取与大模型理解:方法论深度指南
  • Kubernetes 集群部署、配置和验证-使用kubeadm快速部署一个K8s集群_笔记
  • 【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南
  • 使用LLaMA-Factory微调Qwen2.5-VL-3B 的目标检测任务-LLaMA-Factory训练数据配置
  • 图像处理中的霍夫变换:直线检测与圆检测
  • 【软件运维】前后端部署启动的几种方式
  • 区块链系统开发技术应用构建可信数字生态链
  • 股指期货交割日避坑指南
  • 【MkDocs踩坑】图片路径问题的排查与解决
  • 由 DB_FILES 参数导致的 dg 服务器无法同步问题
  • 【动手学深度学习】4.10 实战Kaggle比赛:预测房价
  • Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
  • 深度学习预备知识
  • MyBatisPlus-03-扩展功能