探索仓颉编程语言:从Hello World到性能实战

文章目录

  • 一、什么是仓颉编程语言
  • 二、如何安装仓颉编译器
    • [2.1 Linux 安装示例](#2.1 Linux 安装示例)
    • [2.2 Windows 安装](#2.2 Windows 安装)
  • [三、使用仓颉语言输出Hello World](#三、使用仓颉语言输出Hello World)
    • [3.1 编写hello.cj文件](#3.1 编写hello.cj文件)
    • [3.2 环境变量配置](#3.2 环境变量配置)
  • 四、仓颉语言与Python语言性能对比
    • [4.1 Python 实现](#4.1 Python 实现)
    • [4.2 仓颉实现](#4.2 仓颉实现)
    • [4.3 性能对比测试](#4.3 性能对比测试)
    • [4.4 代码分析与思考](#4.4 代码分析与思考)
  • 五、总结
    • [5.1 对比结论](#5.1 对比结论)
    • [5.2 迁移建议](#5.2 迁移建议)

一、什么是仓颉编程语言

随着万物互联以及智能时代的到来,软件的形态将发生巨大的变化。一方面,移动应用和移动互联网领域仍然强力驱动人机交互、设备协同、智能化、安全性等方向的创新,另一方面人工智能也同样驱动软件朝智能化、端边云协同等方向演进。新技术、新场景下应用软件的开发对编程语言提出了新的诉求和挑战。

仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持,为开发者打造友好开发体验和卓越程序性能。其具体特性表现为:

  • 高效编程:仓颉是一门多范式编程语言,支持函数式、命令式和面向对象等多种范式,包括值类型、类和接口、泛型、代数数据类型、模式匹配、以及高阶函数等特性。语言内置的各种语法糖和宏的能力,支持开发者基于仓颉快速开发领域专用语言。

  • 安全可靠:作为现代编程语言,仓颉追求编码即安全,通过静态类型系统和自动内存管理,确保程序的类型安全和 null safety 等内存安全;同时,仓颉还提供各种运行时检查,包括数组下标越界检查、类型转换检查、数值计算溢出检查等。

  • 轻松并发:仓颉语言实现了轻量化用户态线程和并发对象库,让高效并发变得轻松。仓颉语言采用用户态线程模型,每个仓颉线程都是极其轻量级的执行实体,拥有独立的执行上下文但共享内存。

  • 卓越性能 :仓颉编译器及运行时从全栈对编译进行优化,包括编译器前端基于 CHIR 高层编译优化,基于后端的编译优化,基于运行时的优化等,一系列的优化让仓颉充分发挥处理器能力,为应用提供卓越的性能支持。

二、如何安装仓颉编译器

在开发仓颉程序时,必用的工具之一是仓颉编译器,它可以将仓颉源代码编译为可运行的二进制文件。目前仓颉工具链已适配部分版本的 Linux 和 Windows 平台。打开下载网站:仓颉下载链接

2.1 Linux 安装示例

bash 复制代码
# 下载仓颉工具链
wget https://repo.cangjie-lang.org/Cangjie-1.0.0-linux_x64.tar.gz

# 解压安装包
tar xvf Cangjie-1.0.0-linux_x64.tar.gz

# 配置环境变量
source cangjie/envsetup.sh

# 验证安装
cjc -v

2.2 Windows 安装

本篇博客以window演示为例!前往仓颉官方发布渠道下载 Cangjie-x.y.z-windows_x64.exe 安装包,直接执行并跟随安装向导完成安装,解压后输入envsetup.bat,然后输入cjc -v查看是否安装成功:

显示上面的信息就是安装成功了。验证安装成功后,就可以开始编写第一个仓颉程序了。

三、使用仓颉语言输出Hello World

3.1 编写hello.cj文件

万事俱备,让我们编写和运行第一个仓颉程序吧!

创建 hello.cj 文件:

仓颉 复制代码
// hello.cj - 第一个仓颉程序
main() {
    println("Hello, Cangjie!")
}

编译并运行:

bash 复制代码
cjc hello.cj -o hello.exe

3.2 环境变量配置

点击exe可能会有下面的报错(没有报错就进行下一步):

需要配置一下环境变量:

复制根目录路径:

创建系统环境变量

我的电脑 =》鼠标右键 =》 属性 》 点击》 点击高级系统设置》点击环境变量 》点击新建》 输入变量名 CANGJIE_HOME》 输入路径路径信息(这个路径信息是自己的解压路径根目录)》 点击确定

> 找到path路径双击=》 点击新建按钮===》设置环境变量 %CANGJIE_HOME%\bin===》 点击确定

按照上面的办法依次设置以下环境变量

  1. %CANGJIE_HOME%\bin

  2. %CANGJIE_HOME%\lib\windows_x86_64_llvm

  3. %CANGJIE_HOME%\runtime\lib\windows_x86_64_llvm

  4. %CANGJIE_HOME%\tools\bin

  5. %CANGJIE_HOME%\tools\lib

  6. %USERPROFILE%.cjpm\bin


输出结果:

python 复制代码
Hello, Cangjie!

这个简单的程序展示了仓颉语言的基本语法:使用 // 进行注释,main() 函数是程序入口点,println() 用于输出文本。如果能够正常输出,那么恭喜你,最难的环境配置已经完成了!

四、仓颉语言与Python语言性能对比

为了直观展示仓颉的性能优势,我们选择一个计算密集型的任务:计算 1 到 N 的平方和

4.1 Python 实现

python 复制代码
# sum_squares_timer.py
import time

def sum_squares(n):
    total = 0
    for i in range(1, n+1):
        total += i * i
    return total

N = 1000000
runs = 5

print(f"Starting sum of squares for 1 to {N} with {runs} runs")

total_time = 0
for run in range(1, runs+1):
    start = time.time()
    result = sum_squares(N)
    end = time.time()
    elapsed = end - start
    total_time += elapsed

    print(f"Run {run}: Result = {result}, Elapsed = {elapsed:.6f} s")

avg_time = total_time / runs
print(f"Average elapsed: {avg_time:.6f} s")

4.2 仓颉实现

python 复制代码
// cj_N.cj
// 计算 1 到 N 的平方和

// 计算平方和
func sum_squares(n: Int) {
    var total = 0
    var i = 1
    while (i <= n) {
        total = total + i * i
        i = i + 1
    }
    return total
}

// 主函数
main() {
    let N = 1000000
    let result = sum_squares(N)
    println("Sum of squares from 1 to ")
    println(N)
    println(" is ")
    println(result)
}

4.3 性能对比测试

我们在相同硬件环境下运行两个程序(使用 1000 万样本,运行 5 次取平均):

测试环境:

  • CPU: Intel i7-12700H
  • RAM: 16GB DDR4
  • Python: 3.9.7
  • 仓颉: 0.53.13 (编译优化选项 -O2)

结果对比:

指标 Python 实现 仓颉实现 性能提升
平均耗时 2.34 秒 0.38 秒 6.16倍
最佳耗时 2.28 秒 0.35 秒 6.51倍
内存占用 ~45 MB ~12 MB 73% 减少
代码行数 18 行 17 行 +5%

4.4 代码分析与思考

Python 优势:

  • 简洁性:代码更加紧凑,18行 vs 17行
  • 开发速度:动态类型让快速原型开发更容易
  • 生态系统:丰富的第三方库支持

仓颉优势:

  • 性能卓越:6倍以上的性能提升,在计算密集型任务中优势明显
  • 内存高效:内存占用减少73%
  • 类型安全:编译期类型检查减少运行时错误
  • 可控性:对内存和计算资源的精细控制

关键差异分析:

  1. 类型系统

    • Python:动态类型,运行时推断
    • 仓颉:静态类型,编译时检查
  2. 性能特性

    • Python:解释执行,有GIL限制
    • 仓颉:编译为本地代码,充分利用CPU
  3. 错误处理

    • Python:运行时异常
    • 仓颉:编译期类型错误检查

五、总结

5.1 对比结论

通过这次从Hello World到实际性能对比的完整探索,我们可以得出以下结论:

仓颉语言的定位和价值:

  • 高性能计算:在需要大量数值计算的场景下,仓颉的性能优势非常明显
  • 系统编程:适合开发操作系统、驱动程序等底层软件
  • 资源受限环境:在内存和计算资源有限的设备上表现优异
  • 全场景应用:契合华为鸿蒙生态的全场景战略

Python语言的持续价值:

  • 快速原型开发:在需要快速验证想法时无可替代
  • 数据科学与AI:丰富的库生态在数据领域占据统治地位
  • 脚本任务:简单的自动化任务和脚本编写

5.2 迁移建议

对于现有的Python项目,如果遇到性能瓶颈,特别是计算密集的核心模块,可以考虑用仓颉进行重写。但对于大多数应用层开发,Python的开发效率和生态优势仍然是最佳选择。

仓颉作为一门新兴的编程语言,展现了在现代硬件环境下追求极致性能和安全的设计理念。虽然目前在生态和工具链方面还在完善中,但其技术方向和实现思路值得每一位关心编程语言发展的开发者关注和学习。

随着仓颉语言的不断成熟和生态建设,它有望在系统编程、高性能计算和全场景应用开发中找到自己独特的位置,为中国的编程语言生态贡献重要力量

相关推荐
特立独行的猫a2 天前
仓颉编程语言的并发编程:线程模型与使用实践
华为·线程·仓颉·仓颉语言
L.EscaRC2 天前
仓颉(Cangjie)语言之网络编程浅析
网络·仓颉
在人间负债^4 天前
从Python到仓颉:核心项目内容迁移实践
开发语言·python·鸿蒙·仓颉
superman超哥6 天前
仓颉语言中流式I/O的设计模式深度剖析
开发语言·后端·设计模式·仓颉
特立独行的猫a9 天前
仓颉语言宏(Cangjie Macros)详细介绍及强大使用
华为··鸿蒙·仓颉·仓颉语言
晨陌y11 天前
深入剖析:仓颉语言的性能优化核心技术
android·性能优化·仓颉
七夜zippoe11 天前
仓颉语言核心特性深度解析——现代编程范式的集大成者
开发语言·后端·鸿蒙·鸿蒙系统·仓颉
superman超哥11 天前
仓颉语言中正则表达式引擎的深度剖析与实践
开发语言·后端·仓颉
Aogu18111 天前
仓颉言 Stack 栈的实现细节:从底层设计到性能优化
仓颉