华为仓颉语言使用体验 | Mayx的博客
Author: mayx
Description: 看看“自研”的轮子有什么特别之处？
Date: 2024-08-03T00:00:00+08:00

3 August 2024 - 字数统计：2126 - 阅读大约需要7分钟 - Hits: Loading...

# 华为仓颉语言使用体验

by mayx

这是一篇创建于 天前的文章，其中的信息可能已经有所发展或是发生改变。

AI摘要

这篇文章主要介绍了作者尝试华为的仓颉编程语言的使用体验。仓颉语法与Python有较大差异，作者通过编写乘法表和递归函数验证其运行性。然而，编译后的程序在其他电脑上不能运行，因为依赖的“libcangjie-runtime”和“libsecurec”库在测试版SDK中是动态链接且缺失静态编译版本。文章还提到仓颉语言融合了多种特性，如Java的复杂性、TS的声明以及CJVM字节码支持，但它似乎没有内置异步语法。虽然支持C和Python库调用，但对于仓颉的特别之处暂无明显显现。作者提到鸿蒙Next的目标和可能存在的挑战，指出其他开发者可能会倾向于使用成熟且生态丰富的语言。最后，作者表达了对华为大规模投入不明朗项目的态度，认为过多的营销可能对公司前景构成风险。

- 起因
- 编写体验
- 对仓颉语言的看法
- 感想

看看“自研”的轮子有什么特别之处？

#
起因

前段时间因为华为对它的仓颉编程语言开启了公测（公开内测），随后媒体又吹了一波。虽然华为最近也整了好多乱七八糟的东西，但至少我没有亲眼见过。既然这个仓颉的编译器公测了我就申请试试看呗，反正编译器又不需要特定的设备或者系统运行。

申请之后过了几天就通过了，然后编译器的安装包就可以在GitCode上下载。目前看起来没有开源，可以在Windows x64，macOS和Linux的x64和aarch64上运行和编译，另外也支持它的那个鸿蒙Next系统，虽然我申请了那个插件也通过了，但是毕竟没有真机，而且那个IDE挺大的也就算有模拟器可以用也懒得试😂。

#
编写体验

首先我下了Windows版的编译器，安装好之后看了看文档，感觉语法倒是没什么复杂的，不过和Python差别还是挺大的，所以还是得看着文档写😂。看了一圈之后首先写个九九乘法表试试看：

    main() {
        for (i in 1..10) {
            for (j in 1..i + 1) {
                print("${j}*${i}=${i*j}\t")
            }
            println()
        }
    }

编译之后运行倒是没什么问题，随后再写个递归版的试试看：

    func row(i: Int): Unit{
        if(i < 10){
            col(i, 1)
            println()
            row(i + 1)
        }
    }

    func col(i:Int, j:Int): Unit{
        if(i >= j){
            print("${j}*${i}=${i*j}\t")
            col(i, j + 1)
        }
    }

    main() {
        row(1)
    }

运行也没有问题，那就试试看把编译的产物放别的电脑运行试试看？结果就不能运行了。似乎是依赖了“libcangjie-runtime”和“libsecurec”这两个库，即使是在编译选项里开了静态编译也没有用，因为SDK里没有这两个的静态库文件，而且也没有它们的源代码……像Golang都是静态编译没有什么乱七八糟的依赖的啊……

另外我在Github上搜了一下，“libsecurec”这个库是有源代码的，叫做libboundscheck，看名字是用来字符边界检查之类的库，似乎华为很多产品里都有用，在这个SDK里用的是这个版本。

不过如果仓颉主要是给鸿蒙Next用的话，那个系统应该是预先有装仓颉的运行环境的，应该不静态编译也行。

#
对仓颉语言的看法

单从我上面写的这点代码看的话这语法比C都复杂😂，看了一下文档乱七八糟的概念还挺多，毕竟是融合了各种各样的语言，有Java的复杂，支持什么注解和反射之类的，还有TS的声明类型，变量还要指定变不变啥的，不过似乎没有关于异步的语法，可能是用线程弥补吧？其他近些年出的语言我没怎么接触过所以其他的不太清楚，不过让AI看了看我写的那段代码它说像Kotlin，然后讨论群里又说借鉴了50%的Rust🤣，确实融合的有点多。另外据说除了编译成机器码（CJNative）外还能编译成字节码（CJVM），不过CJVM在内测，不知道到时候会不会正式发布……除此之外也能调C和Python的库，似乎是用的FFI调用，可以不用单独开个进程然后去获得输出的值，效率应该还是挺高的。

但是要说这个语言有什么特别之处目前似乎也看不出来，不过毕竟仓颉语言算是给鸿蒙Next系统用的，学着iOS/macOS整Swift那样吧，但是在苹果系开发要想用苹果的框架，可能Swift是最好的选项。鸿蒙Next除了这个还整的什么ArkTS（那个可能算是小程序吧，毕竟那个没见过不知道底层是怎么运行的），至于鸿蒙Next能不能用其他语言开发目前也不知道（倒是能用NDK），要是能的话大家肯定是用现有已经开发好的改改然后移植到鸿蒙Next吧（前提是这些公司认为用鸿蒙Next的人使用他们的软件有足够的收益），如果不行从头开发成本就更高了，估计得劝退一大堆公司。毕竟鸿蒙Next没有历史，和Android以及iOS根本不能比，而且相比也没有解决什么痛点，另外其他手机厂商也不会考虑使用鸿蒙Next，只能像苹果一样搞成仅自家使用的系统。但是用户量根本和iPhone不能比，公司可不会听华为在网上的营销，毕竟公司是要实实在在赚钱的，靠营销只能忽悠普通人（但要是普通人买来发现除了国内大厂的软件其他软件全不能用估计也没人买了🤣）。

另外鸿蒙Next好像也会搞PC版，就像Mac那样。不过Mac是正经啥语言写的都能运行，而且相对还是挺开放的，到时候如果PC版的鸿蒙Next连终端个也没有，而且只能运行仓颉语言写的软件那怕是比其他Linux发行版还废了🤣。

不过如果用户侧如果搞不好的话说不定可以在服务器上用，毕竟服务器的话只在乎能不能写出这个软件，至于用什么语言写其实不重要，只要性能好就行，如果华为能整一批写仓颉的学生，还能把该整的库整好，也许会有公司考虑用，在做政府相关的项目说不定可以作为卖点🤣。

#
感想

虽然说华为整的这堆莫名其妙的东西也许没什么用，或者也可能会有些用，不过毕竟搞这些东西已经算是用公司的前景去赌未来了，虽然拿这些东西搞营销很恶心，但目前来看至少确实是有在也许没回报的东西上投真金白银的，还是挺厉害的。

但正因为它们营销搞太多了，到时候因为搞这些东西把公司玩死了我觉得也是大快人心的🤣🤣🤣。

tags: 华为 - 仓颉 - 体验 查看原始文件

#### 推荐文章

Loading...

上一篇：使用Cloudflare Workers制作博客AI摘要
下一篇：Mac mini 2018使用体验
想问这篇文章
召唤伊斯特瓦尔