zoukankan      html  css  js  c++  java
  • 【编程漫谈】程序的运行环境

    很多人即使“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难学了。

  • 相关阅读:
    入门菜鸟
    FZU 1202
    XMU 1246
    Codeforces 294E Shaass the Great 树形dp
    Codeforces 773D Perishable Roads 最短路 (看题解)
    Codeforces 814E An unavoidable detour for home dp
    Codeforces 567E President and Roads 最短路 + tarjan求桥
    Codeforces 567F Mausoleum dp
    Codeforces 908G New Year and Original Order 数位dp
    Codeforces 813D Two Melodies dp
  • 原文地址:https://www.cnblogs.com/icoolno1/p/11432816.html
Copyright © 2011-2022 走看看