硕鼠的博客站

范路的博客主站,时而会发些东西。

大家好,欢迎收听“老范讲故事”的YouTube频道。今天,咱们来讲一讲华为,仓吉编程语言终于来了。在刚刚过去的HDC,也就是华为开发者大会上,除了发布鸿蒙新一代操作系统,感谢了一大堆友商,还故意把腾讯的名字落掉之外,还发布了众望所归,或者大家期盼已久的仓吉编程语言。2020年,华为就申请了仓吉的商标,而且告诉大家说,我要去做编程员了。当时很多人就直接疯了,说哎呀,华为要做中文编程语言,我们再也不需要使用英文字符去写程序了,我们要用古老的中文去写了。

在这件事情上呢,华为采用了叫不承认不否认,不负责的态度。什么意思?就是华为自己从来不承认说,我要做中文编程语言,没有任何中文编程语言相关的报导是从华为出来的。但是华为呢,也不否认任何人说华为要做中文编程语言了,他也不出来辟谣,也对所有市面上流传的信息不负责任。反而不是我说的这件事情呢,传来传去,传来传去,传到2024年,这个仓吉编程语言终于发布了。

对于程序员来说,中文编程语言这件事就是个笑话,不可能有,想都不用想。为什么?因为中文的输入效率很低。我们现在使用这种26个字母的英文键盘,你打英文肯定是最快的嘛。这么大量的内容要输进去,你要打中文拼音,然后再挑字,有时候还写错别字,这玩意咋弄?而且中文那么多的字之间,入和这个人为和末它很像,你到最后找bug,你咋吵?所以,这件事是不可能的,想都不用想啊。现在,华为的仓吉编程语言终于发布了。

首先,说结论是:它不是中文的,而是英文的。跟中文有关系的部分不是完全没有啊,是什么呢?就是它的名字——仓吉编程语言的这个语言名呢,是仓吉的汉语拼音,也不敢写中文。它的程序后缀是CJ,仓吉嘛,仅此而已啊。剩下的跟中文就没有任何关系了。大家要知道,我对于华为的看法呢,就是他们的技术一直都还是可以啊,但是他们使用的很多手段,让我觉得比较不齿。但是技术我从来不质疑啊,包括他们很多生产的设备的工艺,都是很好的。

咱们讲讲仓吉编程语言到底怎么样。仓吉编程语言呢,是一种缝合怪。他把现在最好的这些语言特性,都缝在一块。但这个呢,并不是贬义词。其实所有的编程语言,就是新发展出来都是缝合怪。什么意思呢?编程语言发展一段时间以后说啊,现在的新的编程环境啊,新的程序编造的任务有些什么变化了,那么我们有一些新的编程语言的特性需要出来。那么只要有新的编程语言出来,他们就会把所有这些新特性都塞进去。所以只要是新编程语言都是缝合怪,不是说到华为这都变缝合怪了。

最后,这个编程语言到底能不能成功啊,是不是大家喜欢用,跟它是不是缝合怪本身,这件事并没有关系。编程语言本身呢,其实也一直在发展。发展的方

可能就是其他新编程语言的3-5倍,或者有的可能达到十几倍。包括Objective C,这是苹果原来在iOS上开发用的。这种语言相对来说比较繁琐。现在新的语言都比较简洁,相对来说更易读易懂。以前为什么搞得那么复杂?因为那时候的都是软件工程,有架构师负责设计,然后底下的人必须按照这种复杂的规则工作,像螺丝钉一样。你写的越严格定义,写的越长,它就越不容易出错。通过这样的方式来实现。

但是现在呢,都是小团队开发,甚至有好多代码是一两个人写的。你让他写一大堆又臭又长的代码,人家觉得才不费这劲呢,太累了。然后易读性这个事,程序是一个工程,即使到现在可能也还是工程,需要多个人来配合。你这个人写完程序以后,下一个人读不懂了,这玩意你咋弄啊?或者说我自己写的程序,过俩月我再看,我自己看不懂了,这事也没法整啊。所以程序一定要易读。

然后第三个呢,叫什么就是适合描述当前主要任务。因为大家知道,随着计算机行业、互联网行业,包括现在人工智能行业不断地往前发展,我们用写程序的方式要解决的主要问题和矛盾转变了。以前的很多程序语言其实不太适合描述当前的任务。你描述的过程,可能会变得非常的冗长。这个事是非常麻烦的。所以呢,就会要求编程语言发展。这个发展实际上是两个方向:第一个方向呢,就是传统编程语言其实也在一个版本更新的过程中,不断地在优化和改进。

第二个方向,就是新兴的编程语言,它们在设计之初就考虑到了现代软件开发的需求,更加注重易读性、易用性和描述当前主要任务的能力。这些语言往往更简洁,语法更贴近自然语言,使得开发者能够更加专注于问题本身,而不是语言的细节。这种趋势使得编程语言的发展更加多元化,满足了不同场景和需求下的开发工作。

一个版本往前迭代的二个分,就是要不断有新的编程语言出现。那么,新的编程语言到底需要具备什么特性呢?让我们稍微讲点技术,我尽量讲得让大家能听明白。现在有很多新的编程语言,比如说谷歌现在在推广的Kotlin,安卓里边现在使用Kotlin;苹果做的Swift;还有Go和Rust,这些都是属于新编程语言。它们都会有一些共同的特性。为什么讲这个?因为,仓吉把所有东西都放到自己身上,谁最后一个出现,就会把前面的都放到自己身上。都有哪些新特性呢?

第一个,它内存安全。程序运行的时候,在内存里头有执行代码,有数据代码。传统的编程语言呢,会经常出现一些叫内存越界和内存泄露的问题。所以,新的编程语言一定要解决这个问题。内存越界是什么意思?就是我告诉操作系统说,我需要10个字节的内存,它分配给我了,然后我去访问第11个字节去了,这个事肯定是不行的。他分配给你以后,实际上是告诉你说,给你一个地址,说这个地址就是你的,从这个地址往后十个字节都是你的。我去访问第11个字节,这事肯定是错的。访问其他的,在我这个地址范围之外的地方,都是错的。什么人去干这种事?病毒都是干这个事的,还有很多破解,都是要内存要越界的。

那么内存泄露是什么意思?就是我分配了10个字节,用完了以后,我得告诉操作系统,我用完了,释放掉。然后操作系统呢,再有人来分配的时候,再把这块内存再分配给别人。

他是这样去工作的。但是如果我光去调用了,我告诉操作系统来给我分配,内存分配回来了,用完了以后呢,我没有去释放啊。最后积攒了一大堆没释放的内存,就是内存的碎块在这个计算机里头啊。这叫内存泄漏啊。传统的编程语言都是这种问题啊。现在新的编程语首先要解决这个啊。第二个呢,叫什么叫并发安全啊?什么叫并发安全?现在的这个计算机呢,甭管是手机啊,电脑啊,还是平板啊,其他所有设备吧,都是多核心设计啊。就是你的CPU上有非常多的计算核心。那么我们需要什么呢?并行处理。传统的程序是顺序的啊,执行完第一句,执行第二句,执行完第二句执行第三句,对吧。那么现在呢,说我们要提高效率,我一看哦,8个核心,我就赶快把这个数据拆好了,分配到八个核心里,你们都去执行,执行完了以后,把执行结果拿回来,我再把这些执行结果拼在一起,再接着往前走。但是在这个过程中呢,却有个问题:计算核心他在工作的时候呢,不能随便去访问外边的数据啊。他只能访问他自己分配到这个计算核心里面缓冲里边的数据。所以呢,一般情况下,县城跟县城,或者说叫并行运行的这些程序之间是隔离的。你不能说我执行一段时间以后,我要到外面去访问一下别人的数据,这事是不允许的啊。这个就叫并发安全。在写程序的时候,你先要把这个事情搞定。然后第三个呢,是类型安全。现在新的编程语言大部分是强类型,就是我们规定好你这个东西到底是什么类型,你再去给他赋一些其他类型。

他是这样去工作的。但是如果我光去调用了,我告诉操作系统来给我分配,内存分配回来了,用完了以后,我没有去释放。最后积攒了一大堆没释放的内存,就是内存的碎块在这个计算机里头啊。这叫内存泄漏啊。传统的编程语言都是这种问题啊。现在新的编程语言首先要解决这个。

第二个呢,叫并发安全。什么叫并发安全?现在的这个计算机呢,甭管是手机啊,电脑啊,还是平板啊,其他所有设备吧,都是多核心设计啊。就是你的CPU上有非常多的计算核心。那么我们需要什么呢?并行处理。传统的程序是顺序的,执行完第一句,执行第二句,执行完第二句执行第三句,对吧。那么现在呢,说我们要提高效率,我一看哦,8个核心,我就赶快把这个数据拆好了,分配到八个核心里,你们都去执行,执行完了以后,把执行结果拿回来,我再把这些执行结果拼在一起,再接着往前走。但是在这个过程中呢,却有个问题:计算核心他在工作的时候,不能随便去访问外边的数据啊。他只能访问他自己分配到这个计算核心里面缓冲里边的数据。所以呢,一般情况下,县城跟县城,或者说叫并行运行的这些程序之间是隔离的。你不能说我执行一段时间以后,我要到外面去访问一下别人的数据,这事是不允许的啊。这个就叫并发安全。在写程序的时候,你先要把这个事情搞定。

然后第三个呢,是类型安全。现在新的编程语言大部分是强类型,就是我们规定好你这个东西到底是什么类型,你再去给他赋一些其他类型。

是不允许的啊。比如说,我规定了这是一个整数,你现在想往里头赋一个浮点数——就是带小数点后边那部分的那种数——这是不允许的,直接报错啊。然后呢,还有很多新的语言特性,比如说什么范型啊,闭包啊,命名函数,或者是函数增强什么的,它们都算是新的语言特性。为什么会有这种特性呢?就是为了让更大规模的程序可以被更灵活地编写。

然后呢,是需要有完善的生态和工序链。我记得我上大学,刚开始学计算机语言的时候啊,学C语言,学Pascal语言,学BASIC语言,每一个语言里头,它的关键词其实很少,大概有个几十个,有的有一两百个,也到头了。而且都很短小。但是学完这个语言的基本的结构,控制之后,你就会编程了吧。扯吧,你那玩意编不出来。真正要编程需要什么呢?就是需要大量的周边的函数库。比如说鸿蒙操作系统里头啊,我要调用某一个设备,你如果没有这些函数库,那这事费劲了对吧。你需要从最底层的去一层一层去折腾去。现在都是什么?有一个函数库叫摄像头,我现在调用函数库说,首先摄像头初始化一下,摄像头给我设定参数,摄像头给我拍一张照片回来啊,或者摄像头给我拿出一个预览图片回来。然后我要到哪里去显示啊。现在都是这样编程序的对吧。这个写的代码,基本上刚才我说的一句话,可能就对于编程语言就是一句对吧。现在都是这样,你要有完整的生态,然后呢,要有工序链啊。比如说,我可以给这个鸿蒙手机写程序啊,可以给鸿蒙平板写程序,可以给手表写程序。

那这个他要有完整的工序链,来去对应他们。然后呢,要有不同的应用场景——你比如说,我到底是前端用啊,就是写界面;还是网络上使用,做科学计算使用;还是后端操纵各种设备。它要有不同的应用场景。这是现代编程语言的一些新特性啊。所有这些特性,咱们的仓吉编程语言都有,都已经弄得齐齐的了。

另外还有一个什么东西呢?就是编译器啊。编程语言,你写完程序以后,是不能直接执行的呀。你要经过编译,编译成这种可执行的代码才可以去做。康杰编程语言呢,它使用的编译器,也是现在最时新最流行的,叫LLVM架构——叫low level virtual machine,就是底层的虚拟机系统。它呢,是一种模块化设计的编译器,里头每一个模块可以自由的拼接。然后呢,有很高级的优化,它可以将这个代码优化的非常高效。就是我写的时候,其实我是啊,不是那么在意,说你最后代码是怎么去执行的,都是由编译器去优化出来的。

然后呢,这种编译器最后编译出来代码,是跨平台的啊。你说我编译完代码,到底是在英特尔的CPU上跑,是在麒麟的CPU上跑,还是在瑞斯克5的CPU上跑,还是在一些啊,嵌入式的这种小的SoC上跑啊。它是用这样的编译器,可以一次性都编译出来啊。它是做这样的工作。而且呢,LLVM的这种编译器,也是有相对活跃的社区与生态的。这个编译器格式,是从2000年就开始在做,现在一些新的,比如像Swift呀什么的,也都是用这样的编译器模式啊。

不是说这个编译器叫 LRVM,而是编译器的形式是 LRVM。这是我们讲解的技术部分,就到这里了。然后,仓吉编程语言就包含了刚才我们讲的所有的这些新特性。那么,有没有想过为什么一定需要一种自己的编程语言呢?

首先,要讲的是,做编程语言这件事并没有像大家想象的那么神秘,那么高深莫测。现在我们用的一些很广泛的编程语言,其实出身并没有那么好。譬如说 PHP,很多的网站都是用它写的。PHP 实际上是某一位大神的大学本科毕业项目,他说那我自己做个编程语言吧,专门去写 Web 应用的这种编程语言。然后,就非常的流行,大家就写来用起来了。像包括 JavaScript,还有 C 语言,实际上都是很随机的就产生了。所以,做编程语言这件事本身并没有那么高大上。

但是,现在的编程语言已经不像那个时候了,已经发展的非常先进了。现在再有一个大学生说,我要做一个新的编程语言出来,已经非常非常难了,因为刚才那些特性你把它搞明白其实不容易的。现在,比如说谷歌最新做的 Dart 编程语言,为什么干这事呢?第一个,C++ 相对来说是一种比较笨重的语言,就是你要写同样的代码,完成同样的功能,它的代码量是别人的 5-10 倍。那个没必要嘛,对吧,何必跟自己过不去呢?我们需要一种新的、更简洁的编程语言。另一方面,C++ 的版权在谁手里头?在 Oracle 手里。Oracle 就不停地告谷歌,说你侵犯我版权了,你得给我钱。

那谷歌说:“算了,我不用了,行不行?我自己去整一套新的啊,quarterly到新编程语言,它的成本很高啊,因为你要自己搭建整个的生态,整个的社区,这个成本是非常高的,不是到逼不得已,一般不会有人干这个事啊。”五哥说:“既然你一直告我,那我就上吧,我有机会上新编程语言了,我就一定要把所有新特性全上!上啊,你原来那个沉重的包袱啊,这种需要写的,特别特别又臭又长的这种代码,不要了啊,整个扔掉。”这是谷歌,然后苹果的Swift呢,也是这样,就是说它的object啊,原来叫objective c啊,也是太笨重了啊,太陈旧了,说算了扔掉了,不玩了啊,整个整一套新的。所以苹果现在你做啊,Mac OS啊,iOS啊,iPadOS的开发都是Swift语言。

华为呢,原来其实是有一套自己的语言的,但是呢,它这个不是那么纯粹,它原来这个语言叫Ark TS,Ark是方舟的意思啊,它原来有方舟编译器,方舟的整个的代码库啊,它的编程语言TS是什么,叫typescript。但是这个里头有一个问题是什么呢?就是typescript的大版权是在微软手里的,虽然它的版权是阿帕奇2.0,它允许大家自己有去修改,允许大家去商业使用,就是华为去使用这种typescript是没有问题的。但是问题在哪儿呢?问题是,它的大版本是控制在微软手里,微软会不断地去升级typescript版本啊,不断地把新的语言特性加进去,改出来啊。而然后呢?(文本在此处似乎未完整结束)

所有的 TypeScript 的周边社区,对吧?你说我今天要给 TypeScript 写代码库了,啊,我要去给他写一些这个,呃,第三方的接口。我一定是跟着微软的标准走,我不可能跟着华为标准走。华为说:“哎,我想加点新特性进去。”微软说:“我不喜欢。”咔,干掉了,没了,对吧?然后那你说我这个新的代码库,我一个第三方的,比如说我是做鼠标的,我给这个设备专门写了一个 TypeScript 的接口库进去。那我肯定跟着微软标准走,不可能跟华为标准走。它是这样的,那么它这个叫什么呢?叫生态被微软绑定了。这个华为是不可接受的。

TypeScript 还有一个问题是什么呢?就是它更适合写前端,就是它去写很多跟界面相关的事情。因为 TypeScript 语言是从 JavaScript 的这种,就是前端语言里头演进出来的一种语言。所以呢,它对于很多的科学计算啊,对于很多后端的任务呢,其实并没有那么擅长。这也是华为为什么要去抛弃它的原因。就是现在的鸿蒙上都是使用的叫 ARCTS,未来呢,就准备通通都整到仓吉上面去。就是必须要有一套可以完全自己掌控节奏的全域编程语言啊,大家注意我讲的两个定语啊:第一个自己掌握节奏,我想升级就升级啊,我想加新特性就加新特性,不需要看任何别人的脸色啊。如果你想跟我兼容,你就老老实实跟着我的节奏走。这里头没有第二名啊,你就跟着我走。我们只有一个声音啊,这第一个。第二个是什么呢?叫痊愈编程语言。不过,最后一句似乎没有完整表达出说话人的原意,可能需要进一步的上下文来明确“痊愈编程语言”的具体含义。在这段话中,主要讨论了标准、生态绑定、以及华为对于编程语言选择的考量,特别是对 TypeScript 的观点,以及华为对于自主可控编程语言的需求。

我不但要负责界面的开发,服务器的编程,网络设备的设定,科学计算的处理,我还要确保所有环节无缝对接,这正是“仓吉”系统所承担的任务。那么,我们来探讨一下,“仓吉”是否有望成功,它是否拥有光明的前景。如今,甚至有人开始学习编程,我是否也应该掌握“仓吉”编程语言呢?这个问题,虽与技术相关,但也并非完全取决于技术。一个编程语言能否最终立足,关键在于其生态与工具链的建设。生态,正如我们之前所讨论的,指的是是否有一群开发者围绕该语言编写程序,是否有足够的工具和上下游相关的代码库支持。例如,当我使用“仓吉”编程语言时,如果我发现手机上的运动传感器无法找到相应的驱动,这就表明生态体系存在缺陷,最终可能导致该语言无人问津。

“仓吉”编程语言能否成功,归根结底,还是要看其生态和工具链的建设情况。目前,华为正投入大量资源致力于此。同时,谷歌也在推广多种编程语言,如Python、Rust、Go、Dart等,并表示愿意出资支持其生态链的建设。苹果公司也在推广其Swift语言,且Swift是开源的,但问题在于,很少有人愿意主动与苹果的系统兼容。尽管Swift是一种全功能的编程语言,有人用它来编写高性能的服务器程序,但这并不意味着它已经广受欢迎。

在讨论编程语言的未来时,我们不能忽视其生态建设的重要性,这将直接影响到语言的普及和应用。

都是在你手机上跑的一些APP啊。苹果的Swift始终在苹果生态里没出来,就是我们很少能看到,不是苹果系统,我去用Swift语言去写程序这个事,基本上没有。华为的现在也是如此。它的生态本身,相对于苹果这种封闭生态来说呢,还是要稍微小一点。毕竟苹果全世界那么多人在用,相对来说,华为也好,苹果也好呢,都是在外面没有人用。鸿蒙系统,你离开华为也没人使,对吧,就跟iOS、iPad OS什么这个东西,离开苹果也没人使是一样的啊。所以呢,他有可能就在华为鸿蒙生态系统内啊,可以继续跑下去,就像Swift一样啊。这个事可能性是存在的,但是前提你是鸿蒙得推的下去啊。如果你鸿蒙也没推下去的话,那这个仓吉也就没有任何意义了。华为的生态链啊,到底是不是足够强大,才是仓吉本身是不是成功的核心。他的生态链强大了,他就可以养的活,社区啊,社区这个东西其实是很现实的。如果我在你这个社区里写了程序,没有人用,没有人让我这个吃饱肚子,那就没有人在里头去玩耍,那这个社区就会快速的枯竭下去。玩编程社区里头还有很多其他的东西,明后天我们有机会再给大家讲啊。这个里头还有什么礼节对吧,还有很多的约定俗成的东西,如果你不遵守的话,会被整个的程序员社区所唾弃的。好啊,这就是仓吉编程语言这个故事啊,我们今天讲到这里啊。稍微有些技术啊,有些可能大家听着会费劲一点,但我尽量是用简单的方式讲。好啊,这期就讲到这里,感谢大家收听,请帮忙点赞。

点小铃铛,参加disco讨论群。也欢迎有兴趣、有能力的朋友加入我们的付费频道。再见。

 

Both comments and pings are currently closed.

Comments are closed.

Close Bitnami banner
Bitnami