20240627仓颉更新说明-Cangjie 0.51.4

0. 版本介绍

该版本点分式版本号为 Cangjie 0.51.4 。该版本sealed 修饰符使用规则变更,--diagnostic-format 选项新增 json 输出格式。调试器支持基础类型表达式计算,包管理器cjpm支持可视化展示包依赖关系,run命令支持添加运行时环境变量等,静态检查工具cjlint五条数据流规则适配了CHIR 2优化,API文档生成工具cjdoc支持windows平台。修复若干已知问题,感谢各位开发者反馈。

1. 语言特性

Feature

  • sealed 修饰符使用规则变更
    sealed 修饰符只能修饰抽象类和接口,表示被修饰的 class 定义只能在本定义所在的包内被继承或实现和扩展。 sealed 已经蕴含了 public open 的语义,因此定义 sealed 抽象类或接口时若提供 public open 修饰符,编译器将会告警。详细用法和示例见class 的继承接口的定义 章节。

Bugfix

  • NA

Remove

  • NA

3. CJNative后端

Feature

  • NA

Bugfix

  • NA

Remove

  • NA

5. 工具链

1 IDE插件

Feature

  • 调试支持自动配置动态库依赖路径

Bugfix

  • NA

Remove

  • NA

2 cjdb

Feature

  • cjdb提供支持表达式计算能力的基础框架
  • cjdb适配仓颉线程查看命令
  • cjdb表达式计算支持仓颉字面量
  • cjdb表达式计算支持基础数据类型变量名

Bugfix

问题描述
启动调试后,在debug console窗口输入查看变量的命令(如:-exec p main_str3),变量值错误

Remove

  • NA

3 cjpm

Feature

  • cjpm交叉编译时支持控制指定宏包编译目标平台产物
  • cjpm支持可视化展示包依赖关系
  • 优化dev-dependencies字段,支持开发阶段依赖
  • cjpm run 命令支持添加运行时环境变量配置(目前仅支持Linux平台)

Bugfix

问题描述
【cjpm】手动删除main后增量编译不符合预期
cjpm build 循环依赖检查时卡死

Remove

  • NA

4 cjlint

Feature

  • G.FIO.01 临时文件使用完毕必须及时删除 适配CHIR2.0
  • G.SER.03 保证序列化和反序列化的变量类型一致 适配CHIR2.0
  • G.OTH.01 禁止在日志中保存口令、密钥和其他敏感数据 适配CHIR2.0
  • P.02 避免数据竞争(data race) 适配CHIR2.0
  • G.CHK.01 跨信任边界传递的不可信数据使用前必须进行校验 适配CHIR2.0

Bugfix

  • NA

Remove

  • NA

5 cjfmt

Feature

  • NA

Bugfix

  • NA

Remove

  • NA

6 cjcov

Feature

  • NA

Bugfix

  • NA

Remove

  • NA

7 cjprof

  • NA

Feature

  • NA

Bugfix

  • NA

Remove

  • NA

8 cjdoc

Feature

  • cjdoc支持Windows平台

Bugfix

  • NA

Remove

  • NA

8. CangjieStudio

Feature

  • 支持debug中复杂变量的值的查看
  • 全局变量与静态变量分开展示

Bugfix

描述
同一个文件vscode打开并debug中,cangjiestudio进行编辑保存报错提示不准确
启动了lsp之后,切换中文输入法,输入字符之后按下tab键,多次操作之后IDE崩溃
生成多行代码时,在生成代码的下面有效行打断点,会把没有行号的也打上断点

Remove

  • NA

9. 已知问题

  • 部分const + tuple场景会编译失败,比如此类写法,const t = (c1, c2, c3, c4),会在下个版本修复。


  • 部分match类型场景可能会编译失败,编译成功的代码不会受此问题影响,参考如下用例,预计下个版本修复。


    class CA {}
    struct A {
    var ca = CA()
    }
    struct B {
    var x = 3
    }
    func foo() : Int64 {
    var x : A = A()
    match (x) {
    case b : B => b.x // 此处处理存在异常
    case _ => 0
    }
    }
    main() { foo() }

  • 受中间IR影响,部分cjlint 规则的检查受到影响,可能在某些(部分)场景行为不符合预期,受到影响的规则有:

    • G.FIO.01 临时文件使用完毕必须及时删除
    • P.02 避免数据竞争(data race)
    • G.SER.03 保证序列化和反序列化的变量类型一致
    • G.CHK.01 跨信任边界传递的不可信数据使用前必须进行校验
    • G.OTH.01 禁止在日志中保存口令、密钥和其他敏感数据
Rate this post
发表回复 0