blog/_posts/2024-08-03-cangjie.md
2024-08-03 17:33:00 +00:00

58 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: post
title: 华为仓颉语言使用体验
tags: [华为, 仓颉, 体验]
---
看看“自研”的轮子有什么特别之处?<!--more-->
# 起因
前段时间因为华为对它的仓颉编程语言开启了公测(公开内测),随后媒体又吹了一波。虽然华为最近也整了好多乱七八糟的东西,但至少我没有亲眼见过。既然这个仓颉的编译器公测了我就申请试试看呗,反正编译器又不需要特定的设备或者系统运行。
申请之后过了几天就通过了然后编译器的安装包就可以在GitCode上下载。目前看起来没有开源可以在Windows x64macOS和Linux的x64和aarch64上运行和编译另外也支持它的那个鸿蒙Next系统虽然我申请了那个插件也通过了但是毕竟没有真机而且那个IDE挺大的也就算有模拟器可以用也懒得试😂。
# 编写体验
首先我下了Windows版的编译器安装好之后看了看文档感觉语法倒是没什么复杂的不过和Python差别还是挺大的所以还是得看着文档写😂。看了一圈之后首先写个九九乘法表试试看
```kotlin
main() {
for (i in 1..10) {
for (j in 1..i + 1) {
print("${j}*${i}=${i*j}\t")
}
println()
}
}
```
编译之后运行倒是没什么问题,随后再写个递归版的试试看:
```kotlin
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](https://github.com/openeuler-mirror/libboundscheck)看名字是用来字符边界检查之类的库似乎华为很多产品里都有用在这个SDK里用的是[这个](https://github.com/openeuler-mirror/libboundscheck/tree/5701ca210dfb71037f3cb3340166d150917e8a4d)版本。
不过如果仓颉主要是给鸿蒙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发行版还废了🤣。
不过如果用户侧如果搞不好的话说不定可以在服务器上用,毕竟服务器的话只在乎能不能写出这个软件,至于用什么语言写其实不重要,只要性能好就行,如果华为能整一批写仓颉的学生,还能把该整的库整好,也许会有公司考虑用,在做政府相关的项目说不定可以作为卖点🤣。
# 感想
虽然说华为整的这堆莫名其妙的东西也许没什么用,或者也可能会有些用,不过毕竟搞这些东西已经算是用公司的前景去赌未来了,虽然拿这些东西搞营销很恶心,但目前来看至少确实是有在也许没回报的东西上投真金白银的,还是挺厉害的。
但正因为它们营销搞太多了,到时候因为搞这些东西把公司玩死了我觉得也是大快人心的🤣🤣🤣。