详细视频:https://www.bilibili.com/video/BV1E4421U7TG/?spm_id_from=333.999.0.0&vd_source=23895afa07bb1ceeeb2f0a557f472bd5

华为仓颉编程语言的背后本质_linux


在互联网后端或是前端任何编程语言编写的应用都是应用软件,都要运行在操作系统之上,操作系统都要运行在硬件之上。

而互联网领域主要以linux 操作系统为服务器最多,同时用的硬件CPU主要是intel CPU为主。

大家入职了公司可以在自家公司服务器运行如下命令大部分都是linux os/intel cpu

华为仓颉编程语言的背后本质_系统调用_02

最下面的如果你看过内功修炼课程自然熟悉MMX,SYSCALL,FPU,AVX,AVX512,SSE,SSE2,CPUID等指令。

比如开源项目php AI框架 swoole java jvm mysql等都用到。

没有操作系统,没有硬件CPU,我们的编程语言怎么运行?显然不行。

而我们做应用层开发,其实很少关注操作系统和CPU的变化,我们的应用软件最终都是运行在操作系统上,所有的指令都要运行在CPU上,操作系统会提供一组接口给软件工程师去调用,即操作系统调用接口,系统调用接口是使用汇编实现的【同样在内功修炼课程里】,所有编程语言都要通过系统调用达成功能。

同时系统调用接口是非常稳定的,所谓的稳定即函数功能不变,函数名字不变,掌握后能用到linux os和intel cpu退出市场为止,但linux 1991年到2024年它们的系统函数没有变化,x86 1985,x64从2000年到2024年架构还是那是那个架构,指令还是那个指令,只是增加了新的指令,对于应用层的软件工程师而言,没有什么变化,因为你平常很少关注到操作系统的变化和CPU架构的指令集变化。

华为仓颉编程语言的背后本质_系统调用_03

所以新出来的编程语言华为仓颉同样也是如此,它的底层还是几十年没有变的系统调用函数以及指令集。

而互联网领域WEB项目的核心就是数据传输,数据传输的依赖就是TCP/IP协议,而TCP/IP的系统函数接口就是SOCKET API,掌握了它就掌握了web 应用,包括各种数据库,缓存,中间件,各种编程语言开发的应用的根。

下面我们拿仓颉的网络程序演示看看它背后的东西

//import std.socket.*  这是仓颉官方文档上的代码 会编译报错
from std import socket.* //这是我自已修改的代码 编译通过
//import std.time.* 这是仓颉官方文档上的代码 会编译报错
from std import time.* //这是我自已修改的代码 编译通过
//import std.sync.* 这是仓颉官方文档上的代码 会编译报错
from std import sync.* //这是我自已修改的代码 编译通过


let SERVER_PORT: UInt16 = 8080


func runTcpServer() {
    try (serverSocket = TcpServerSocket(bindAt: SERVER_PORT)) {
        serverSocket.bind()


        try (client = serverSocket.accept()) {
            let buf = Array<Byte>(10, item: 0)
            let count = client.read(buf)


            // 服务端读取到的数据为: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0]
            println("Server read ${count} bytes: ${buf}")
        }
    }
}


main(): Int64 {
    spawn {
    //创建监听socket
        runTcpServer()
    }
    sleep(Duration.millisecond * 500)
//创建客户端连接 自已连接自已 
    try (socket = TcpSocket("127.0.0.1", SERVER_PORT)) {
        socket.connect()
        socket.write(Array<Byte>([1, 2, 3]))
    }


    return 0
}

华为仓颉编程语言的背后本质_linux_04

华为仓颉编程语言的背后本质_linux_05

[pid 26567] execve("./target/release/bin/main", ["./target/release/bin/main"], 0x55f07661e1e0 /* 21 vars */) = 0
//运行加载ELF文件
[pid 26589] socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3
//创建IPV4 SOCKET
[pid 26589] bind(3, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
//绑定地址和端口
[pid 26589] listen(3, 1024)             = 0
//监听服务
[pid 26589] epoll_ctl(4, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=1856134560, u64=94091704688032}}) = 0
[pid 26593] epoll_wait(4, [{EPOLLIN|EPOLLOUT|EPOLLRDHUP, {u32=3556772976, u64=140629375978608}}], 64, 10) = 1
[pid 26593] epoll_wait(4,  <unfinished ...>
//打印数据
[pid 26594] write(1, "Server read 3 bytes: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0]\n", 52) = 52
[pid 26594] epoll_ctl(4, EPOLL_CTL_DEL, 6, 0x55936e9fcb90) = 0
[pid 26594] epoll_ctl(4, EPOLL_CTL_DEL, 3, 0x55936e9fcb90) = 0
[pid 26593] <... epoll_wait resumed> [], 64, 10) = 0
//退出进程 进程结束
[pid 26593] exit(0)

上面的系统调用函数大家应该非常熟悉,特别是学习过LINUX C 核心和内功修炼课程的朋友。

如果学习过我讲的PHP多进程和物联网【网络编程】的朋友其实加上LINUX C 的内容再学习华为仓颉新语言也是简单,就算去学RUST WEB编程也是一样的。不存在什么过时的问题。

正所谓:物有本末,事有始终,知所先后,则近道矣

掌握了这些就是掌握了所有编程语言的背后根本,就掌握了千万变化的核心。

对于开发WEB项目故障处理,BUG排查,性能优化,项目运行原理都是有极大的益处。

但你只要学一次就不需要学什么了。

华为仓颉编程语言的背后本质_编程语言_06

https://edu.51cto.com/lecturer/14934648.html