在这里插入图片描述

每日一句正能量

在路上,迎风奔跑,回顾过去、想起人生中无数次告别的时候,风会吹掉所有的坏,裸露出所有的好。

面向人群:

  • 有 Java/JS/Kotlin 基础,想快速上手鸿蒙原生开发的同学
  • 对“新一代国产语言”好奇,希望了解其语言设计、并发模型、UI 构建的开发者
  • 计划将现有 Android/iOS 模块迁移至鸿蒙,评估仓颉可行性的 Team Leader

阅读顺序:语言速览 → 工程搭建 → 语法深度 → 并发实战 → UI 构建 → 性能优化 → 踩坑记录 → 下一步计划


一、为什么鸿蒙需要“仓颉”?

2025 华为开发者大会披露:

  • 鸿蒙 NEXT 去除 AOSP 代码,仅支持原生鸿蒙应用
  • 仓颉(Cangjie)成为官方一级语言,与 ArkTS 并列;
  • 原生智能:语言级 AI 算子、自动微分;全场景:统一 IR 编译到手机/车机/穿戴;强安全:空指针零容忍、内存自动管理。

一句话:写一次,全场景运行,自带 AI 与安全 Buff


二、环境搭建:3 步走,10 分钟搞定

2.1 安装 DevEco Studio 5.0(仓颉插件)

  1. 官网下载 DevEco 5.0 → 安装时勾选 Cangjie Language Support
  2. 新建工程 → Language 选择 Cangjie → 模板选择 Empty Ability
  3. 首次编译会自动下载仓颉编译链(~400M,需代理)

新建工程动图

2.2 配置仓颉 SDK 路径

File → Settings → Cangjie → SDK Path
默认位于:~/Huawei/CangjieSDK/1.0/

2.3 Hello Cangjie!

// Entry.cj
package com.example.hm

import ohos.aafwk.ability.Ability
import ohos.aafwk.content.Intent

class MainAbility : Ability {
    override fun onStart(intent: Intent) {
        super.onStart(intent)
        println("Hello, Cangjie!")
    }
}

运行效果:日志输出 Hello, Cangjie! + 空白页面 ✅


三、语言速览:30 秒看懂仓颉语法

特性 示例 备注
函数式+OOP fun add(a: Int): Int = a + 1 单表达式可省略 {}
空指针安全 var name: String? = null 强制判空,无 NPE
协程并发 launch { delay(1000) } 语法级协程,无 callback
模式匹配 when (x) { 1 -> "一" else -> "?" } 比 Java switch 强大
字符串模板 "结果=${compute()}" 类似 Kotlin
自动微分 grad(f, x) 语言级 AI 算子

四、语法深度:从「变量」到「协程」

4.1 空指针安全实战

fun length(s: String?): Int {
    return s?.length ?: 0        // Elvis 操作符
}
fun main() {
    println(length(null))  // 输出 0,无 NPE
}

仓颉在编译期即插入判空指令,运行时无额外开销。

4.2 协程并发模型

仓颉协程=有栈协程(单线程异步,无锁切换)

import cj.concurrent.*

fun main() {
    runBlocking {
        repeat(100_000) {
            launch {                // 100k 协程
                delay(1000)
                println(it)
            }
        }
    }
}

内存占用:< 1MB(对比 Java Thread 100k ≈ 1GB)

4.3 模式匹配+ADT(代数数据类型)

sealed class Status
object Loading : Status()
class Error(val msg: String) : Status()
class Success(val data: String) : Status()

fun handle(s: Status) = when (s) {
    is Loading -> "加载中"
    is Error -> "错误=${s.msg}"
    is Success -> "数据=${s.data}"
}

编译器自动检查分支完整性,else 无法编译


五、并发实战:秒杀库存减扣(协程版)

需求:10w 并发扣库存,不超卖、不锁表。

5.1 协程思路

  • Redis 预减库存 + 队列异步落库;
  • 仓颉协程负责「等待队列」与「批量写 DB」;
  • 单线程,无锁,内存占用极低。

5.2 核心代码

import redis.clients.jedis.*
import cj.concurrent.*

val jedis = Jedis("127.0.0.1", 6379)

suspend fun seckill(sku: String, userId: Long): Boolean {
    val left = jedis.decr("stock:$sku")
    if (left < 0) {
        jedis.incr("stock:$sku")        // 回滚
        return false
    }
    // 异步队列
    launch {
        delay(Random.nextLong(50, 200))   // 模拟网络
        jedis.lpush("order:$sku", "$userId")
    }
    return true
}

fun main() = runBlocking {
    repeat(100_000) { launch { seckill("HM2025", it.toLong()) } }
}

压测结果:

  • 10w 协程,内存 320MB
  • 库存最终 = 0,无超卖
  • 落库延迟平均 95ms

六、UI 构建:声明式 DSL 对比

仓颉提供 CangjieUI(声明式),与 ArkTS 写法类似:

@Entry
@Component
struct MainPage {
  @State message: String = "Cangjie 鸿蒙"
  build() {
    Column() {
      Text(this.message)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
      Button("点我+1")
        .onClick(() => this.message += "!")
    }.width('100%').height('100%')
  }
}

编译后生成 方舟字节码,与 ArkTS 同一渲染管线,性能无差异。


七、性能优化:三把斧让启动速度提升 40%

7.1 懒加载 + 动态特性

@LazySingleton               // 首次使用才初始化
class DbHelper {
  init() { /* 重连接 */ }
}

7.2 协程调度亲和性

指定「IO 调度器」避免阻塞 UI:

launch(Dispatchers.IO) { /* 网络/DB */ }

7.3 包体积裁剪

build.gradle 开启
cangjie { abiFilters = ["arm64-v8a"] }
APK 减少 11MB。


八、踩坑记录(血与泪的 Tips)

现象 解决
协程内调用阻塞 API ANR Dispatchers.IO
空指针 ? 漏写 编译失败 使用 !! 或判空
CangjieUI 热重载失效 DevEco 插件旧 升级 5.0.2+
自动微分 grad 报错 函数非纯 @Pure 注解

九、实战项目(完整仓库)

项目名:CangjieTodo(鸿蒙原生 TodoApp)

Clone 后一键运行:

git clone https://github.com/yourname/cangjie-todo
cd cangjie-todo
./gradlew assembleDebug

十、总结与下一步

仓颉 = 现代语法 + 空指针安全 + 协程并发 + 原生 AI + 全场景编译
它是鸿蒙 NEXT 的「一等公民」,也是国产语言的新探索。

下一步计划

  1. 接入仓颉 AutoDiff,写个「图像分类」Demo;
  2. 实践「Cangjie → 车机」交叉编译;
  3. 把 Retrofit 移植到仓颉,做 HTTP 客户端库。

附录:资源合集


每一行仓颉代码,都是鸿蒙生态的脉搏;
每一次编译,都是国产技术的回响。
程序员节,愿我们写下的不仅是程序,更是未来。

欢迎 👍点赞✍评论⭐收藏,欢迎指正

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐