作为新生的,不用背负任何历史包袱的全新语言,仓颉充分吸收了过去数十年来众多编程语言之长,原生智能化、天生全场景、高性能、强安全。作为华为鸿蒙系统的平台语言,仓颉拥有良好的发展潜力和前景,极有可能成为第一款形成世界级影响的国产编程语言。青少年现在学习仓颉,就是在投资未来!

版权声明

作者:重庆大学 陈波

本文可以在互联网上自由转载,但必须注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。本文不可以以纸质出版为目的进行改编、摘抄。

1.1 了解计算机

  现代电子计算机仍然没有超出由匈牙利科学家冯·诺依曼(von Neumann)于1945年提出的冯·诺依曼体系结构的范畴。在该结构中,计算机被认为由5大部件组成,如图1-1所示。

image-20240928100934990

图1-1 冯·诺依曼体系结构

  其中,典型的输入设备包括键盘、鼠标、网卡等,它们负责从计算机外部输入数据到计算机;典型的输出设备包括显示器、打印机、网卡等,它们负责将计算机内部的数据输出到计算机外部。读者可能注意到了,网卡既是输入,也是输出设备。

  中央处理单元(Central Processing Unit),简称CPU,是计算机的核心。它由运算器和控制器组成。其中,运算器负责加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较、传送等操作。控制器则是计算机中指令的解释和执行机构,它控制运算器、存储器、输入输出设备等部件的协调动作。

  存储器又分为内部存储器及外部存储器两个部分。其中,内部存储器简称内存,通常是易失的,容量相对较小,但存取速度显著快于外部存储器。所谓易失,是指计算机断电后,内存中的数据会自动丢失。外部存储器通常指硬盘、固态硬盘、U盘等存储设备,相对于内存,其数据可以在断电后永久保存,容量通常也更大,但数据存取速度通常显著慢于内存。 如果把计算机看作一个完成计算任务的计算员的话,内存可以理解为计算员的草稿纸,它存储计算步骤以及临时的中间结果,而外存,则用于存储计算任务的输入以及计算的最终结果。

  冯·诺依曼计算机是所谓存储程序计算机,计算机处理的数据和指令(程序)一律用二进制表示,并存储于存储器中。在CPU内部控制器的控制下,CPU从存储器逐条读入并执行程序的指令。每条指令执行一个单一的任务:比如将寄存器R0与整数3相加,并将计算结果存储到指定地址的内存单元中。借助于跳转、逻辑判断等指令,程序员可以将各种简单的计算操作进行组合,从而让计算机完成诸如从一大堆图片中找出加菲猫等复杂任务。

  计算机可以执行的原始指令的集合称之为指令集。当代的计算机,最主要的指令集分为两类,一类是Intel的x86指令集,主要用在笔记本及台式计算机上;另一类则是ARM的ARM指令集,主要使用在手机等移动终端,以及大量的嵌入式低功耗计算机上。上述两类指令集均是商业指令集,任何公司如果期望生产使用上述指令集的计算机,需要获得相应的授权。为了实现更美好的共享的全球化的世界,另一种开源的指令集RISC-V,近年来异军突起,得到工业界相当多的关注和支持。

🚸 注意——

  本节所描述的计算机结构是一个极简化的版本,真实的情况要复杂得多。广义地说,一台笔记本电脑、一部手机、一台洗衣机、一张使用IC的银行卡上的IC,都属于计算机的范畴,其具体结构差异非常大。

1.2 仓颉语言及编译器

  仓颉(Cangjie)是由华为公司开发的一种高级程序设计语言。通过仓颉语言,人类用接近自然语言和数学语言的形式,向计算机描述需要执行的工作及其步骤。比如,下述仓颉语言代码应用一个循环计算1+2+3+…+100的值并将计算结果打印输出在屏幕上。

1
2
3
4
5
6
7
8
//sum100.cj
main(){
var s = 0
for (i in 1..=100){
s = s + i
}
println("sum = ${s}")
}

  数字计算机通过蚀刻在半导体硅片上的晶体管工作。这种数字电路中的导线或者门电路的管脚只能表达或者接受两种状态,即电平的高或低。与此对应,计算机的工作基于二进制,即计算机的CPU只能识别和接受由0 和1构成的低级机器语言指令。为了在计算机上执行用仓颉语言编写的程序,一种称之为编译器的软件工具承担了翻译的工作,负责将仓颉语言指令转换成机器语言指令。

image-20240928101340831

图1-2 仓颉程序的编译执行过程

  如图1-2所示,程序员编写完成的仓颉语言程序以文件的形式保存在计算机的文件系统里;仓颉编译器对这些程序文件进行“翻译”,生成包含机器语言指令的目标文件/可执行文件;当使用者需要时,在操作系统协助下,可执行文件被装载至内存,并交给CPU去执行。

1.3 仓颉编译器的下载及安装

  要使用仓颉语言进行程序设计,首先需要安装仓颉SDK(Software Developing Kit),仓颉编译器是该工具包的组成部分之一。仓颉SDK可从开源开发者平台GitCode下载,其中仓颉社区的访问网址为:https://gitcode.com/cangjie。

image-20240928101527577

图1-3 仓颉SDK的版本列表

  作者使用的是基于Windows操作系统的笔记本电脑,故选择图1-3中倒数第4个链接,点击后,来到如图1-4所示的页面。在操作过程中,读者可能需要注册GitCode账号并申请Cangjie社区的访问权限。

image-20240928101605251

图1-4 仓颉SDK的文件清单

  在图1-4所示的页面中,将鼠标指针悬停在表格第1列单元格的上方,可以查看文件的全名。我们选择下载其中名为Cangjie-0.55.3-windows_x64.exe的安装文件。用鼠标点击该文件名,便来到如图1-5所示的文件下载页面。

image-20240928101645324

图1-5 仓颉SDK安装文件的下载

  点击图1-5中的“下载”按钮,稍作等待后,我们得到如图1-6所示的安装文件。

image-20240928101716168

图1-6 下载完成后的仓颉SDK安装文件

  用鼠标双击运行该文件。然后在安装模式(Select install mode)对话框中选择“为所有用户安装(Install for all users)”;接下来在协议确认(License Agreement)对话框中选择“我接受协议(I accept the agreement)”;接下来就来到安装路径选择对框话,如图1-7所示。为了后续使用方便,我们将安装路径人工修改为“C:\Cangjie”,然后点击“Next”。接下来在后续的安装选项中,一直使用默认选项,直至如图1-8所示的环境变量选项对话框出现。

image-20240928101744604

图1-7 选择仓颉SDK的安装路径

image-20240928101809562

图1-8 仓颉SDK安装的环境变量选项

  在图1-8所示的环境变量选项对话框中,选择“为所有用户设置CANGJIE_HOME(Set CANGJIE_HOME for all users)”,然后点击“Next”。

image-20240928101839269

图1-9 仓颉SDK安装的系统路径选项

  在图1-9所示的系统路径对话框中,选择“为所有用户添加Cangjie至系统路径(Add Cangjie to the system PATH for all users)”,然后单击“Next”。接下来一直使用默认选项,并按下“Install”按钮。在经过一段时间的等待后,系统将报告仓颉SDK安装完成,如图1-10所示。点击“Finish”按钮关闭该对话框。

image-20240928101910046

图1-10 仓颉SDK安装完成

  在仓颉SDK安装完成后,我们可以在Windows PowerShell中检验安装是否成功。在键盘上按下Windows徽标键,然后输入PowerShell进行查询,即可找到PowerShell工具,如图1-11所示。

image-20240928101955945

图1-11 查找PowerShell工具

  选择“打开”运行PowerShell,然后录入命令“cjc -v”并按下回车键,如图1-12所示。其中,cjc是仓颉编译器的可执行文件名,参数“-v”用于显示编译器的版本(Version)。如果读者在自己的计算机上未获得类似结果,说明前述安装过程有误,请卸载后重新安装。

image-20240928102025604

图1-12 查看仓颉编译器的版本号

1.4 第一个示例:学习仓颉,拥抱未来

  我们使用Visual Studio Code作为代码编辑工具。Visual Studio Code的下载、安装过程,请扫描阅读页侧二维码。

  为了存储我们自己编写的仓颉程序,我们首先在C盘创建一个名为PRACTICE的文件夹,其路径为C:\PRACTICE。这个文件夹的名称可以不同,但我们强烈建议不要在其中包含汉字、空格或任何标点符号。

  运行Visual Studio Code,选择菜单项File –> Open Folder,定位并打开C:\PRACTICE文件夹。完成上述操作后的界面如图1-13所示。

image-20240928102331978

图1-13 Visual Studio Code中的PRACTICE文件夹

  如图1-14所示,点击界面中的”New File”按钮(图中PRACTICE右侧第1个)创建一个新文件,取名为“1.cj”,然后按下Enter键。文件名“1.cj”中的“1”为文件的基本名,“cj”则为文件的扩展名,它向操作系统表明了文件的类型,即“仓颉语言程序文件”。请读者务必注意“1.cj”中的“.”只能是英文符号,不可以是中文的句号。

image-20240928102455938

图1-14 新建名为1.cj的仓颉程序文件

  接下来,在Visual Studio Code中录入如图1-15所示的源代码,然后使用组合键Ctrl+S或者菜单项File–>Save保存文件。请注意,1.cj中的全部字符,包括双引号,圆括号等均应为英文符号,不可以是中文符号。

image-20240928102528491

图1-15 1.cj的源代码内容

  现在,我们在C:\PRACTICE目录下拥有了一个名为1.cj的仓颉语言程序文件,可以使用仓颉编译器编译并运行这个文件了。按照本书1.3节所述的方法再次打开Windows PowerShell,然后依次执行如表1-1所示的命令,如图1-16所示。

image-20240928102557488

图1-16 编译并运行1.cj
表1-1 在PowerShell中执行的命令
序号 命令 说明
1 cd \PRACTICE 改变目录(change directory)为\PRACTICE。 C:\Users\Alex为PowerShell的当前目录,执行该命令后,当前目录切换为C:\PRACTICE。
2 ls (字母l而非数字1) 显示当前目录,即C:\PRACTICE下的所有内容。执行结果显示,当前目录下只有一个名为1.cj的文件,其长度为71字节。
3 cjc 1.cj -o 1.exe 执行仓颉编译器cjc,对程序文件1.cj进行编译,输出编译结果至名为1.exe的可执行文件。参数“-o”用于指定输出(output)文件名。对于Windows操作系统而言,扩展名exe源自英文executable,表明该文件为包含机器语言指令的可执行文件。
4 ls 再次显示当前目录下的内容。执行结果显示,编译结束后,多出了一个名为1.exe的可执行文件,以及两个因编译过程产生的中间文件。
5 ./1.exe 将当前目录下的可执行文件1.exe读入内存,并交给CPU执行。命令中的“.”表示当前目录。

  如图1-16所示,我们编写的第一个仓颉语言程序向屏幕输出了“Learn Cangjie, embrace the future!”的信息。作为新生的,不用背负任何历史包袱的全新语言,仓颉充分吸收了过去数十年来众多编程语言之长,原生智能化、天生全场景、高性能、强安全。作为华为鸿蒙系统的平台语言,仓颉拥有良好的发展潜力和前景,极有可能成为第一款形成世界级影响的国产编程语言。青年学生们现在学习仓颉,就是在投资未来!

海洋饼干叔叔的仓颉语言学习笔记将持续更新… 敬请期待。


欢迎支持海洋饼干叔叔系列程序设计教材,案例、配套资源丰富,实践性强,都是高等教育出版社出版的。

高校教学同行如果需要样书,或者索取教学支持资源, 请联系公众号或者海洋饼干叔叔本人。

《Python编程基础及应用》 《Python编程基础及应用实验教程》 《C++编程基础及应用》
book1 实验书图片 Cpp小尺寸