从零开始学计算机硬件和编程,c++学习:从零开始学编程

c++学习:从零开始学编程

(2011-05-09 11:00:24)

标签:

杂谈

何谓顺序

顺序, 即进程的顺序, 准确地说应该是顺序排列的多个进程, 其是方法的描绘。 比如吃菜, 先用筷子夹起菜, 再用筷子将菜送入嘴中,

最初咀嚼并吞下。 其中的夹、送、咀嚼和吞下就被称作命令, 而菜则是资源, 其形态(如形状、位置等)随着命令的执行而不时发作变化。

下面就是吃菜这个方法的描绘, 也就是吃菜的顺序。

任何方法都是为了改动某些资源的形态而存在, 因此任何方法的描绘, 也就是顺序, 也都一定有命令这个东西以及其所作用的资源。

命令是由顺序的执行者来实现的, 比如下面的吃菜, 其中的夹、送等都是由吃菜的人来实现的, 而资源则一定是执行者可以改动的东西,

而命令只是通知执行者如何改动而已。

电脑顺序和下面一样, 是方法的描绘, 而这些方法就是人希冀电脑能做的事(注意不是电脑要做的事, 这经常一直混淆着许多人),

当人需要做这些事时, 人再给出某些资源以期电脑能对其做正确的改动。 如计算圆周率的顺序, 其只是方法的描绘,

自身是不能发作任何成效的, 直到它被执行, 人为给定它一块内存(关于内存, 请参考《c++从零开始(三)》),

通知它计算后果的精度及计算后果的寄存位置后, 其才改动人为给定的这块内存的形态以表现出计算后果。

因此, 对于电脑顺序, 命令就是cpu的指令, 而执行者也就由于是cpu的指令而必须是cpu了,

而最初的资源则就是cpu可以改动其形态的内存(当然不止, 如端口等, 不过普通运用顺序都少量运用内存罢了)。 所以,

电脑顺序就是电脑如何改动给定资源(普通是内存, 也可以是其他硬件资源)的描绘, 注意是描绘, 自身没有任何意义,

除非被执行。

何谓编程

编程就是编写顺序, 即制订方法。 为什么要有方法?方法是为了说明。 而之所以要有说明就有很多原因了,

但电脑编程的根本原因是由于语言不同, 且不仅不同, 连概念都不相通。

人类的语言五花八门, 但都可以通过翻译得到正解, 由于人类生活在同一个四维物理空间中, 具有相反或类似的感知。

而电脑顺序执行时的cpu所能感受到的空间和物理空间严重不同, 所以是不可能将电脑顺序翻译成人类语言的描绘的。 这很重要,

其招致了大局部顺序员编写出的拙劣代码, 由于人想的和电脑想的没有个性, 所以他们在编写顺序时就随机地无目的地编写,

进而招致了拙劣却可以执行的代码。

电脑的语言就是cpu的指令, 由于cpu就这一个感知途径(准确地说还有内存定位、中断响应等感知途径), 不像人类还能有肢体语言,

所以电脑编程就是将人类语言书写的方法翻译成相应的电脑语言, 是一个翻译进程。 这完全不同于普通的翻译, 由于前面的红字,

所以是不可能翻译的。

既然不可能翻译, 那电脑编程究竟是干甚?思索一个木匠, 我是主人。 我对木匠说我要一把摇椅, 躺着很舒服的那种。

然后木匠开始刨木头, 按照一个特殊的曲线制造摇椅下面的曲木以保证我摇的时分重心始终不变以觉得很舒服。 这里我编了个简单的顺序,

只要一条指令——做一把摇着很舒服的摇椅。 而木匠则将我的顺序翻译成了刨木头、设计特定的曲木等一系列我看不懂的顺序。 之所以会这样,

在这里就是由于我生活的空间和木工(是木工工艺, 不是木匠)没有个性。 这里木匠就相当于电脑顺序员兼cpu(由于最初由木匠来制造摇椅),

而木匠的手艺就是cpu的指令定义, 而木匠就将我的顺序翻译成了木工的一些规程, 由木匠通过其手艺来实现这些规程,

也就是执行顺序。

下面由于我生活的空间和木工(指木工工艺, 不是工人)没有个性, 所以是不可能翻译的, 但下面翻译成功了, 实践是没有翻译的。

在木工眼中, 那个摇椅只是一些直木和曲木的拼接而已, 由于木工空间中根本没有摇椅的概念, 只是我要把那堆木头当作摇椅, 进而运用。

假设我把那堆木头当作凶器, 则它就是凶器, 不是什么摇椅了。

“废话加荒唐加放屁!”, 也许你会这么大叫, 但电脑编程就是这么一回事。

cpu只能感知指令和改动内存的形态(不思索其他的硬件资源及响应), 假设我们编写了一个计算圆周率的顺序, 给出了一块内存, 并执行,

完成后就看见电脑的屏幕显示正确的后果。 但一定注意, 这里电脑实践只是将一些内存的数值复制、加减、乘除而已, 电脑并不知道那是圆周率,

而假设执行顺序的人不把它说成是圆周率那么那个后果也就不是圆周率了, 可能是一个随机数或其他什么的,

只是运气极好地和圆周率惊人地相似。

下面的东西我将其称为语义, 即语言的意义, 其不仅仅可运用在电脑编程方面, 实践上许多技术, 如机械、电子、数学等都有自己的语言,

而那些设计师则负责将客户的简单顺序翻译成相应语言描绘的顺序。

作为一个顺序员是极其有必要理解到语义的重要性的(我在我的另一篇文章《语义的需要》中对代码级的语义做过较详细的论述,

有兴味可以参考之), 在后续的文章中我还将提到语义以及其对编程的影响, 假设你还没有理解编程是什么意思,

随着后续文章的阅读应该可以越来越明了。

电脑编程的基础知识——编译器和衔接器

我从没见过(不过应该有)任何一本c++教材有讲过何谓编译器(compiler)及衔接器(linker)(倒是在很老的c教材中见过),

如今都通过一个类似

封装起来。 在此, 对它们的理解是十分重要的, 本系列前面将少量运用到这两个词汇,

其决定了能否理解如声明、定义、外部变量、头文件等十分重要的关键。

前面已经说明了电脑编程就是一个“翻译”进程, 要把用户的顺序翻译成cpu指令, 其实也就是机器代码。

所谓的机器代码就是用cpu指令书写的顺序, 被称作低级语言。 而顺序员的工作就是编写出机器代码。

由于机器代码完全是一些数字组成(cpu感知的一切都是数字, 即便是指令, 也只是1代表加法、2代表减法这一类的数字和工作的映射),

人要记住1是代表加法、2是代表减法将比较困难, 并且还要记住第3块内存中放的是圆周率, 而第4块内存中放的是有效位数。

所以发明了汇编语言, 用一些符号表示加法而不再用1了, 如用add表示加法等。

由于运用了汇编语言, 人更容易记住了, 但是电脑无法理解(其只知道1是加法, 不知道add是加法, 由于电脑只能看见数字),

所以必须有个东西将汇编代码翻译成机器代码, 也就是所谓的编译器。 即编译器是将一种语言翻译成另一种语言的顺序。

即便运用了汇编语言, 但由于其几乎只是将cpu指令中的数字映射成符号以帮助记忆而已, 还是运用的电脑的思索方式进行思索的,

不够接近人类的思索习惯, 故而出现了纷繁复杂的各种电脑编程语言, 如:pascal、basic、c等, 其被称作初级语言,

由于比较接近人的思索形式(尤其c++的类的概念的推出), 而汇编语言则被称作低级语言(c曾被称作初级的低级语言),

由于它们不是很契合人类的思索形式, 人类书写起来比较困难。 由于cpu同样不认识这些pascal、basic等语言定义的符号,

所以也同样必须有一个编译器把这些语言编写的代码转成机器代码。 对于这里将要讲到的c++语言,

则是c++语言编译器(以后的编译器均指c++语言编译器)。

因此, 这里所谓的编译器就是将我们书写的c++源代码转换成机器代码。 由于编译器执行一个转换进程,

所以其可以对我们编写的代码进行一些优化, 也就是说其相当于是一个cpu指令顺序员, 将我们提供的顺序翻译成机器代码,

不过它的工作要简单一些了, 由于从人类的思索方式转成电脑的思索方式这一进程已经由顺序员完成了,

而编译器只是进行翻译罢了(最多进行一些优化)。

还有一种编译器被称作翻译器(translator), 其和编译器的区别就是其是动态的而编译器是静态的。

如前面的basic的编译器在早期版本就被称为翻译器, 由于其是在运转时期即时进行翻译工作的,

而不像编译器一次性将所有代码翻成机器代码。 对于这里的“动态”、“静态”和“运转时期”等名词, 不用刻意去理解它,

随着后续文章的阅读就会理解了。

C++编译器把编译后(即翻译好的)的代码以一定格式(对于vc, 就是coff通用对象文件格式, 扩展名为。 obj)寄存在文件中,

然后再由衔接器将编译好的机器代码按一定格式(在windows

存储在文件中, 以便以后操作系统执行顺序时能按照那个格式找到应该执行的第一条指令或其他东西, 如资源等。

至于为什么中间还要加一个衔接器以及其它细节, 在后续文章中将会进一步说明。

也许你还不能理解到下面两个概念的重要性, 但在后续的文章中, 你将会发现它们是如此的重要以至于完全有必要在这唠叨一番。

文章由乐之小镇记忆枕整理,收集辛苦,希望能保留出处。

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值