本来我不太想说的,奈何有不少粉丝提问提到了这语言,目前的情况我不透露太多,看过这课程C++实现一门计算机编程语言到手撸虚拟机实战的懂的自然懂。
在互联网领域几乎大部分应用软件运行在X86 LINUX上居多,如果你有问题可以先学习这个https://www.bilibili.com/video/BV1Dj411d7GQ/?spm_id_from=333.999.0.0
所以本文内容也是居于linux x86环境【阿里云服务器,毕竟用它做服务器居多 互联网公司一般都是X86 指令集架构的居多】来进行测试。
下面是demo示例代码
cjc demo.cj 在LINUX下得到ELF格式可执行文件,内部存储了X86指令和数据
main() {
println("Hello, World!")
}
编译后得到如下几个文件
生成的ELF文件和X86指令内容
编译后得到的还是共享目标文件,但能直接执行,有兴趣可以自行去了解静态链接,动态链接的区别。
它底层运行时,依然是使用几十年没有变化的系统调用函数和几十年没有变化的X86指令集【感觉是一堆废话,运行在X86 LINUX上当然了,当然也能根据目标机器生成其它架构的代码】
运行它的系统调用过程如下[进程启动到死亡的过程]【所有的编程语言都这样】
[pid 18799] execve("./main", ["./main"], 0x5654ce18e360 /* 24 vars */) = 0
//装载ELF文件,将ELF文件的指令和数据添加到进程虚拟内存里
[pid 18799] openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
//c动态库
[pid 18799] openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
//不用说了 在LINUX C 课程说这
[pid 18799] write(1, "Hello, World!\n", 14) = 14
//调用write 系统调用函数 【此函数1991年到今天没有变过】
[pid 18803] exit(0) = ?
//调用exit系统调用函数 退出进程 【进程死亡】此函数同样是1991年到今天没有变过】
[pid 18803] +++ exited with 0 +++
[pid 18799] exit_group(0) = ?
//同上
[pid 18799] +++ exited with 0 +++
上面的系统调用函数在以下课程已经说过,但建议你去实践,技术只来源于实践,不是来源看【纸上得来终觉浅绝知此事要躬行】
https://edu.51cto.com/lecturer/14934648.html
测试了这些,只是想告诉各位一个事实,我讲的PHP多进程,物联网,LINUX C 它们的知识并没有过时,底层的东西依然是一样的东西,但不少程序员长期忽略,物有本末,事有终始,知所先后,则近道矣,底层的东西是核心关键
对于一个后端程序员,必学内功修炼课程和LINUX C 核心高级,千举万变【应用层各种层出不穷的框架和语言】,其道一也【底层】,以不变【底层】应【驾驭理解探索认知】万变【各种应用层的一切语言和框架】。
关于网络编程也是一样的技术,在这里不过多演示了。
虽然如此,但不少程序员还是沉入无穷无尽的编程语言和框架生态中...
物有本【底层】末,事有终【底层】始,知所先【底层】后,则近道矣.