最近关注了华为6月份发布的最新国产编程语言--仓颉,并申请了内测用户。仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。具备高效编程、安全可靠、轻松并发、卓越性能等设计理念,可以说仓颉整合了C++、Java、python、javascript等语言的各种优点特性,是一种大模型浪潮下的AI for PL、PL for AI的形态,支持面向应用开发的一系列工具链,包括语言服务(高亮、联想)、调试(跨语言调试、线程级可视化调试)、静态检查、性能分析、包管理、文档生成、Mock工具、测试框架、覆盖率工具、Fuzz工具以及智能辅助编程工具,原生AI开发支持,进一步提升软件开发体验以及效率。本文主要结合白皮书和开发指南开展了以下几方面的测试试验,供大家参考学习。
准备工作:
1.在官网申请一个 仓颉Beta内测账号。
2.申请仓颉编程语言SDK、相关工具安装包以及插件工具等,通过gitcode下载对应的包。
3.在vscode中安装cangjie.VSIX插件,并配置好cangjie的SDK路径。
4.按照下面附录五的命令新建一个项目即可开展仓颉编程的体验。
一、字符串输出数据处理和基本类型扩展
利用仓颉语言实现字符串的输出,数据处理操作,基础类型的功能扩展。
import std.collection.*
main(): Int64 {
// 1.输出文本字符串
println("hello world");
println("你好,仓颉");
// 2.数据处理示例
let data = [-1, 2, 3, 4, 5, 6, 7, 8, 9]
data |> filter{a: Int64 => a > 0} |> // filter -1
step<Int64>(2) |> // [2, 4, 6, 8]
forEach<Int64>(println)
println('数据翻倍后的结果输出')
data |>map({x => x * 2}) |>forEach<Int64>(println)
let str = data |> filter{a: Int64 => a % 2 == 1} |> collectString<Int64>(delimiter: ">")
println(str)
println(data |> contains(2_i64))
// 3.基础类型的功能扩展
var str2 = "你好 !"
str2 = str2.map() {
s => "Cangjie: " + s
}
println(str2)
return 0;
}
// 使用extend可以对任意类型进行API扩展。比如给系统的String类型增加了一个map函数,它接收一个lambda表达式参数。
extend String {
// 如果lambda表达式是函数的最后一个参数,则可以直接追加lambda语句块到函数调用尾部
public func map(mapper: (String) -> String): String {
mapper(this)
}
}
二、自定义函数和调用
利用仓颉语言实现用户业务域的自定义函数或算法实现,并通过主函数调用。
main(): Int64 {
// 调用函数
print(greet01("张三")) // 输出 Hello, 张三!
return 0;
}
// 用户自定义的函数
func greet01(name:String):String{ // 定义一个名为greet的函数,接受一个参数name
return "Hello, " + name + "!\n" // 返回一个问候字符串
}
三、调用windows操作系统消息框
利用仓颉语言实现调用和弹出windows操作系统消息框,并将结果以MessageBox输出,相当于实现了仓颉到C语言的跨语言操作。
foreign func MessageBoxA(hWnd: IntNative, text: CString, caption: CString, uType: UInt32): UInt32
main (): UInt64 {
const MB_OK: UInt32 = 0
var text: CString = unsafe { LibC.mallocCString("This is windows messages") }
var cap: CString = unsafe { LibC.mallocCString("Title") }
var r = unsafe { MessageBoxA(0, text, cap, MB_OK) }
unsafe {
LibC.free(text)
LibC.free(cap)
}
return UInt64(r)
}
四、调用path中配置的各种cmd命令
利用仓颉语言调用外部指定exe,该exe可以为终端模式,并向该终端插入指定操作命令并回车。调用第三方如python工具,打开工具后,并向工具输入内容,实现跨语言操作。
import std.fs.*
foreign {
func popen(arg:CString,...):CString
func fprintf(arg:CString,...):Unit
func pclose(are:CString):Int
}
main(): Int64 {
unsafe{
let str = LibC.mallocCString("python.exe")
let wTag = LibC.mallocCString("w")
let openCli = popen(str,wTag)
let command = LibC.mallocCString("print('这是利用仓颉调用python里面的print语句命令')\n")
fprintf(openCli, command);
if (pclose(openCli)==-1){
pclose(openCli)
}
LibC.free(str)
LibC.free(wTag)
LibC.free(command)
}
return 0;
}
五、附录--如何构建第一个仓颉项目
1.在VS Code界面中使用快捷键ctrl + shift + p
2.在搜索框里输入关键字搜索Create Cangjie Project并选择
3.下一步,选择Create CJNative Cangjie Project
4.下一步,选择Create Executable Output Cangjie Project
5.在弹出的文件夹选择窗里选择工程存放的目录
6.回到之前界面,在上方输入框中输入工程的名称(如demo01),并回车
7.在左侧目录结构中找到src -> main.cj,源文件的后缀名为.cj,可以看到默认创建的一段helloworld代码