0%

脚本代码和实现代码的区别

脚本

常见就是lua,python,shell脚本了,这些脚本可以实现很多系统级别的操作,非常神奇,甚至可以开发上位机,开发游戏等。问题来了,脚本究竟是什么?我们写的代码究竟是什么?其实就是调用系统资源+逻辑+内存。

c语言

相信大部分人,都是c语言开始的,helloworld。但是,为什么会显示出来呢?为什么printf可以打印出来呢?这个大家想过吗?当时肯定是没想过,反正它能打印出字出来,非常好用。

使用这个函数就得有一个头文件,stdio,这个,为什么这个库函数可以使用printf,因为这个函数会调用系统的打印io,从而使得数据得以打印出来,说白了,真正的C语言,如果只是纯粹的语法的话,是不会调用任何系统资源的,完完全全的逻辑和内存代码。

note:我们就会发现为什么c语言移植性那么差啊?因为不同平台的库函数是不一样的,mac,win,linux都是不一样的库函数,所以,同样的c代码,很可能无法公用,必须修改。所以嵌入式设备,无法二次编译,因为,这些消耗本来就少的嵌入式资源。

对比

其实会发现,不论脚本还是c语言其实都是调用系统资源,但是本质是不一样的,因为脚本是调用c语言写好的驱动,而c语言是调用系统的驱动。

想要更加直接的理解区别,我们可以直接尝试使用MCU去动态解析lua代码,对没错mcu动态解析,虽然lua可以编译成luac,但是动态解析就会发现一个事情,其实这个的本质就是c语言的函数指针加上索引实现的,也就是lua解释器生成之后,动态解析时会去检索对应函数指针进行操作处理。也就是说,如果lua语言不对外输入输出,它本质就是一个无意义的行为,一个孤立的代码,不用考虑任何平台和资源的代码,但是一旦要对外输入输出就必须有对外的接口,这个接口就是最好用的键值对了,找到名字调用对应函数即可。

可以参考如下博客:

lua移植到STM32F4全过程-CSDN博客

总结

大家觉得我可能再说废话,其实,不是的,我们要明白一件事,脚本只是调用现有已经实现了的驱动、可执行文件、指令等操作,c语言是可以做到驱动,可执行文件,指令的编写。我们都说c语言是静态语言,其实不完全是的,c语言只是在编译的时候选择了静态编译,不代表它的语言不是动态的,函数指针、内存访问、内核指令操作等,这些就是c语言最大的王牌,这些可以直接控制cpu完完全全可以做到动态去解析其他语言,所以才说脚本语言是动态语言,因为有c语言牺牲了自己来给脚本提供了动态平台,所以,脚本这个层面,一般是不参与底层驱动,而是调用驱动+逻辑处理+文件操作+内存操作等,这些操作都是基于现有存在了才能执行,它们的动态解析器会在动态解析运行时候去检索是否存在调用的行为。

-------------下次的来访是什么时候呢[doge]-------------