仓颉语言学习和编程实验

       最近关注了华为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代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一望无际的大草原

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值