为了回忆“仓颉”的故事,我再一次翻起了《山海经》。

alt

(图源:央视纪录片)

《山海经》

一部中国先秦重要的古籍,一部荒诞不经的奇书。其内容丰富、风貌奇特的古代佳作,涉及历史、地理、民族、宗教、神话、生物、医学、水利、矿产等方面内容,是中国文化的珍品,是中国古人想象力的集中体现,深刻并鲜活地反映了上古时代的种种神话传说。它的篇幅并不长,大约三万多字,但内容却是包罗万象,从山川地理、植物、医药、矿产,到神话、人物、方国、祭祀、风俗,堪称研究上古中国社会历史的宝库。

《山海经》第二十二则:

又东南二十五里,曰葴山① ,水出焉,东南流注于汝水② ,其中多人鱼,多蛟,多颉③ 。 【注释】①葴(zhēn)山:山名。②汝水:水名,发源于伏牛山,淮河支流之一。③颉(xié):传说中的兽名,样子如青狗。 【译文】再往东南二十五里,有座葴山,水就从这座山发源,然后向东南流入汝水,附近水域里有大量人鱼、蛟龙和颉。 格式引文: [汉] 刘向 编,[西汉] 刘歆 编,郑志玲 译注著.山海经.酷威文化.2023:161. 得到电子书:https://d.dedao.cn/FCAcsUQ0Dxr1lRJg

alt

据《大辞海》记载:

仓颉造字说 关于汉字起源的传说,认为汉字是黄帝史官仓颉所造。《淮南子·本经训》云:“昔者仓颉作书而天雨粟,鬼夜哭。”《春秋元命苞》云:仓颉“生而能书,及受河图绿字,于是穷天地之变,仰观奎星圜曲之势,俯察龟文鸟羽,山川指掌,而创文字”。今陕西省白水县史官村仓颉庙有仓颉造字台等遗迹。其实黄帝时代的传说,大多无法究诘。《荀子·解蔽》云:“好书者众矣,而仓颉独传者,一也。”汉字应是广大群众长时间的集体创造,而仓颉可能对汉字做过整理、统一工作。

夏征农 主编,陈至立 主编著.大辞海(语言学卷 修订版).上海辞书出版社.2015:371. 得到电子书:https://d.dedao.cn/FCAmZbISos40wNtH

仓颉编程语言

说回我们今天的主角,“仓颉编程语言”。

“五年磨一剑”,如果说 Kotlin 是安卓应用开发首选语言,Swift 是 iOS 的首选,那么 Cangjie 就是鸿蒙系统应用开发的最佳伴侣。

alt

2024 年 6 月,华为全连接大会(HDC 2024),“仓颉”首次亮相。

alt

2024 年 10 月,仓颉编程语言官方网站 https://cangjie-lang.cn/ 正式上线。

alt

“仓颉”是一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持,为开发者打造友好开发体验和卓越程序性能。

其主要特性为:高效编程、安全可靠、轻松并发、卓越性能。

此外,仓颉还支持面向应用开发的一系列工具链,包括语言服务(高亮、联想)、调试(跨语言调试、线程级可视化调试)、静态检查、性能分析、包管理、文档生成、Mock 工具、测试框架、覆盖率工具、Fuzz 工具以及智能辅助编程工具,进一步提升软件开发体验以及效率。

alt
alt

你好,仓颉

准备 Linux 系统环境,这里使用 Ubuntu 20.04。

root@u20:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.6 LTS"
root@u20:~# uname -a
Linux u20 5.4.0-144-generic #161-Ubuntu SMP Fri Feb 3 14:49:04 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

别问我为啥不用 Rocky Linux,问了就是谁都有迈不过的砍。

[shawnyan@rl9 ~]$ cjc hello.cj -o hello
/opt/rh/gcc-toolset-13/root/usr/bin/ld: cannot find crtbeginS.o: No such file or directory
error: '/opt/rh/gcc-toolset-13/root/usr/bin/ld' '-o' '/home/shawnyan/hello' '-z' 'noexecstack' '-m' 'elf_x86_64' '--hash-style=both' '-dynamic-linker' '/lib64/ld-linux-x86-64.so.2' '-pie' '/lib64/Scrt1.o' '/lib64/crti.o' 'crtbeginS.o' '-L/home/shawnyan/cangjie/lib/linux_x86_64_llvm' '-L/home/shawnyan/cangjie/runtime/lib/linux_x86_64_llvm' '-T' '/home/shawnyan/cangjie/lib/linux_x86_64_llvm/cjld.lds' '/home/shawnyan/cangjie/lib/linux_x86_64_llvm/cjstart.o' '/tmp/cangjie-tmp-24aaHA3X7zo-beceecf0/hello.o' '--start-group' '-l:libcangjie-std-core.a' '--end-group' '-lcangjie-runtime' '-lsecurec' '-lm' '-lc' '-lclang_rt-builtins' 'crtendS.o' '/lib64/crtn.o' : command failed (use -V to see invocation)

[root@rl9 ~]# find / -name crtbeginS.o
/usr/lib/gcc/x86_64-redhat-linux/11/32/crtbeginS.o
/usr/lib/gcc/x86_64-redhat-linux/11/crtbeginS.o
/opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/32/crtbeginS.o
/opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/crtbeginS.o
/opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/32/crtbeginS.o
/opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/crtbeginS.o

目前仓颉工具链仅针对部分 Linux 发行版(如,SUSE 12 SP5,Ubuntu 20.04 等)做了完整功能测试。

Ubuntu 依赖环境准备。

apt-get install binutils libc-dev libc++-dev libgcc-9-dev
apt-get install build-essential

编译安装 OpenSSL 3。

wget https://github.com/openssl/openssl/releases/download/openssl-3.0.7/openssl-3.0.7.tar.gz
tar xf openssl-3.0.7.tar.gz
cd openssl-3.0.7
./Configure --libdir=lib
make
make install
export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

从仓颉编程语言官网下载 Cangjie 软件包。https://cangjie-lang.cn/download

解压安装包,配置环境变量。

tar zxf Cangjie-0.53.13-linux_x64.tar.gz
source cangjie/envsetup.sh

查看 Cangjie 版本。

root@u20:/home/shawnyan# cjc --version
Cangjie Compiler: 0.53.13 (cjnative)
Target: x86_64-unknown-linux-gnu

写一个小 Demo。

// hello.cj
main() {
    println("你好,仓颉~")
}

编译运行之。

root@u20:/home/shawnyan# cjc hello.cj -o hello
root@u20:/home/shawnyan# ./hello
你好,仓颉~

openGauss 6.0 Lite

上次接触 openGauss 还是在上次,转眼两年多过去了,openGauss 6.0 LTS 也已于 2024 年 9 月发布。

相对于 openGauss 5.0.0 LTS 版本,openGauss 6.0 LTS 主要新增以下功能特性:

  1. 内核能力增强
  2. 内核四高能力(高性能、高可用、高智能、高安全)
  3. DataPod 三层资源池化架构持续创新
  4. DataKit 数据全生命周期管理工具能力增强
  5. 生态兼容性增强

详细内容参见官方新闻:https://opengauss.org/zh/news/2024-09-30/

为了让“仓颉”更快“遇见” openGauss,接下来,我们一起安装 openGauss 6.0 Lite 轻量版本。

  1. 修改系统内核配置。
echo 'kernel.sem = 250 32000 100 999' >> /etc/sysctl.conf
sysctl -p
  1. 下载安装包 openGauss-Lite-6.0.0-CentOS7-x86_64.tar.gz,解压安装。

官方网站下载页面:https://opengauss.org/zh/download/

执行 install.sh 脚本安装 openGauss 轻量版安装包。

echo password | sh ./install.sh --mode single -D ~/openGauss/data -R ~/openGauss/install  --start

安装完成,并输出提示服务器已启动。

[2024-12-24 02:13:04.097][2845][][gs_ctl]: server started (/home/shawnyan/openGauss/data)
start datanode success.
...
info:run cmd 'source /home/shawnyan/.bashrc' to make the environment variables take effect.

并在 bashrc 文件里添加了环境变量。

export GAUSSDATA=/home/shawnyan/openGauss/data
export PGDATA=/home/shawnyan/openGauss/data
export GAUSSHOME=/home/shawnyan/openGauss/install
export PATH=/home/shawnyan/openGauss/install/bin:$PATH
export LD_LIBRARY_PATH=/home/shawnyan/openGauss/install/lib:$LD_LIBRARY_PATH
  1. 访问 openGauss 服务器。

使用客户端 gsql 访问 openGauss 数据库,查看版本和版权信息。

[shawnyan@el7 ~]$ gsql -d postgres
gsql ((openGauss-lite 6.0.0 build aee4abd5) compiled at 2024-09-29 18:57:54 commit 0 last mr  release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

openGauss=# select version();
                                             version
-------------------------------------------------------------------------------------------------
 (openGauss-lite 6.0.0 build aee4abd5) compiled at 2024-09-29 18:57:54 commit 0 last mr  release
(1 row)

openGauss=# \copyright
GaussDB Kernel Database Management System
Copyright (c) Huawei Technologies Co., Ltd. 2018. All rights reserved.

openGauss=# \q
  1. 创建测试库、表。

为了方便后面的测试,这里创建一个名为 shawnyan 数据库,一个 mydb 模式,创建表 t,并写入一条数据。

openGauss=# create database shawnyan;
CREATE DATABASE
openGauss=# \c shawnyan
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "shawnyan" as user "shawnyan".
shawnyan=# create schema mydb;
CREATE SCHEMA
shawnyan=# create table mydb.t (id int);
CREATE TABLE
shawnyan=# insert into mydb.t select 1;
INSERT 0 1
shawnyan=# table mydb.t;
 id
----
  1
(1 row)
  1. 创建测试用户。

这里创建测试用户 cj 便于从程序中远程连接到数据库。

openGauss=# create user cj;

“高斯”转角遇到“仓颉”

我们已经准备好了 openGauss 数据库,并对 Cangjie 编程语言有了初步了解,接下来就是创造“偶遇”的时刻。

G-Star 优质开源项目计划(简称:G-Star 计划)是 GitCode 官方发布的针对开源项目成长全流程的孵化计划。G-Star 计划毕业项目,包括:CangjieCommunity、OpenHarmony 字节码分析工具、opengauss-driver 等百余个项目。

GitCode 开源社区,是 CSDN 和华为云联合发布的新一代面向全球开发者的开源社区,提供原创博客、开源代码托管、代码协作、项目管理等服务,旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目,共同构建中国下一代面向开源开发者的旗舰级平台。

alt

“仓颉三方库”,Cangjie-TPC(Third Party Components)是用于汇集基于仓颉编程语言开发的开源三方库,帮助开发者方便、快捷、高质量构建仓颉程序。

opengauss-driver 既是 Cangjie-TPC 中的一个开源项目,也是 G-Star 优质毕业项目。

项目地址为:https://gitcode.com/Cangjie-TPC/opengauss-driver

opengauss-driver 是纯仓颉语言实现的 openGauss 数据库驱动,可以帮助开发人员更加便捷地连接到 openGauss 数据库。

以下是部分由仓颉语言编写的示例代码。

import opengauss.driver.*
import std.database.sql.*

main(): Int64 {
    loadDefaultEnv()
    var url = "opengauss://cj:Cangjie123@192.168.43.79:5432/shawnyan"
    let drvopt = DriverManager.getDriver("opengauss")
    var drv: Driver
    match (drvopt) {
        case Some(v) => drv = v
        case None =>
            println("cannot get the opengauss driver")
            return 1
    }
    let ds = drv.open(url)
    try (conn = ds.connect()) {
        sql = "select id from cj.t"
        st = conn.prepareStatement(sql)
        st.execute()
        st.close()
    } catch (ex: Exception) {
        ex.printStackTrace()
    }
    return 0
}

#仓颉 #opengauss #harmony #gitcode

Have a nice day ~


🌻 往期精彩 ▼


-- / END / --

👉 这里可以找到我

👉 这里有得聊

如果对国产基础软件(操作系统、数据库、中间件)感兴趣,可以加群一起聊聊。

关注微信公众号:少安事务所,后台回复[群],即可看到入口。

如果这篇文章为你带来了灵感或启发,就请帮忙点『』or『在看』or『转发』吧,感谢!ღ( ´・ᴗ・` )~

本文由 mdnice 多平台发布

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐