【编程漫谈】程序的运行环境

很多人即使“Hello,world!”这样的程序也未必能运行起来。比如你会C++了,但如果让你用DirectX,在屏幕显示一个转动的3D“Hello,World!”你还觉得那么轻松吗? 或者给你一块32*16的二色LED屏,然后在上边滚动显示“Hello,World!”,那你是不是又要懵圈了?如果答案是“是”,那就对了。当年谭浩强的C语言教程也是看得我一脸的懵逼,当时只觉得自己蠢到家了,连个入门的C语言都玩不来,以后还怎么在IT界混啊?但后来经过多年摸索发现,不是自己蠢,而是完全被这本书给误导了。

一本语言类教程居然可以脱离运行环境,单纯地只讲语言,这让许多误认为用记事本写段代码保存为文本文件.c结尾的文本就可以了,然后就没有然后了。就如同我之前写的一些C语言的示例,可能很多初学者根本就不知道gcc为何物,也不知道gcc在哪里,即使知道也不知道怎么用。所以,在每学一门语言的,你得知道这门语言写出来的程序是如何运行的。

以C举例,大家可能知道C的用途很广,但实际并不知道C是如何运用的,作者本来以前也仅仅知道有个叫turbo C的东东,一个文本界面的C编辑器,编辑完了可以编译运行,仅此而已,对于C程序如何在单片机上运行就毫无概念了,其实这就是对运行环境的不理解。在PC上,用C写的程序,经过编译及组装变成可执行程序,在Windows上表现为.exe程序,在linux上是个任意后缀的二进制文件,拥有可执行权限。不同的操作系统会调用不同的运行库,根据预编译条件,生成相应的可执行程序。

如果在单片机上运行,同样需要相应的编译器,将程序生成相应的单片机可识别的二进制代码。因为这种程序是在单片机上运行的,所以要把编译好程序写到单片的可擦写ROM上去,由于单片机上没有操作系统,需要在代码中设定无限循环来响应单片机的时钟周期,然后在每个时钟周内直接操作单片机输出针脚的电平。此时可以自定义单片机的脉冲协议,你可以直接控制二极管矩阵的发光,也可以连接编码器,让编码器去控制二级管矩阵的发光。

所以,编程语言只是开发项目中的冰山一角,并不是说你会一门语言就能干什么事了,而你要透彻理解编程语言所支持的运行环境。比如你要写一个3D程序,你就得知道显卡工作原理,然后你才能知道DirectX 3D的各个API函数的含义,这样你才可能写出上边所说的3D效果。

像现在比较时髦的Python,它其实Java虚拟一样的东西,只不过Python不用编译,他通过Python解释器直接解释运行。所以想要运行Python程序,则你的电脑上必须要有Python解释器,一般情况下就是到Python的官网下载一个安装包,安装完,在你的安装目录下就会找到python或python.exe这个东东,这个可执行程序就是解释,如果没有这个解释器,你的Python程序是毫无意义的。如果你用的是Python.net那么,这个Python只是.net上的一个语言分支,编译出来的是.net程序,跟原生的Python没有什么关系了。

写这篇文章对于科班出生的人可能觉得毫无意义,因为上机的时候肯定会环境让你写代码,让你编译程序,但对于非科班的自学编程的人来说,我觉得还是有点意义的,虽然现在好多编程语言在文档中都会说运行环境,但对于一些比较古老的编程语言就不一定了,你想C++标准都已经到20了,如果你找了一段C20的代码跑C90上,那肯定会出问题的。而你却不明就里地以为,C++太TM难学了。

原文地址:https://www.cnblogs.com/icoolno1/p/11402229.html