非典型性C语言教程- 0.3 计算机程序到底是什么

2024-02-08 05:18

本文主要是介绍非典型性C语言教程- 0.3 计算机程序到底是什么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前几天上课又又听到了老师在宣扬“计算机行业没有经验”的论点。说计算机行业发展的太快,越老越不行,积累的经验转眼就过时。这种浮躁的言论已经听过无数次了,但是一个大学研究生课的老师在课堂上讲出来还是第一次。今天这个主题就和60年前计算机就出现的东西有关。

上次讲了,编译程序首先调用预处理程序处理C语言文件中的预处理命令,然后自己编译之生成目标文件,最后调用连接程序将目标文件和库文件连接成一个可执行程序。那么一段计算机程序到底是什么呢?

60年前阿兰.图灵,冯.诺依曼等人提出了计算机的体系模型,60年过去了目前实际运行的计算机都是注明的冯.诺依曼体系。首先讲图灵机的概念,下面是www.wikipedia.org 条目Turing machienes对通用图灵机的简介:

Turing machines are extremely basic abstract symbol-manipulating devices which, despite their simplicity, can be adapted to simulate the logic of any computer that could possibly be constructed. They were described in 1936 by Alan Turing. Though they were intended to be technically feasible, Turing machines were not meant to be a practical computing technology, but a thought experiment about the limits of mechanical computation; thus they were not actually constructed. Studying their abstract properties yields many insights into computer science and complexity theory.

A Turing machine that is able to simulate any other Turing machine is called a Universal Turing machine (UTM, or simply a universal machine). A more mathematically-oriented definition with a similar "universal" nature was introduced by Alonzo Church, whose work on lambda calculus intertwined with Turing's in a formal theory of computation known as the Church–Turing thesis. The thesis states that Turing machines indeed capture the informal notion of effective method in logic and mathematics, and provide a precise definition of an algorithm or 'mechanical procedure'.

这个条目有图灵机的形式化定义,以及关于图灵机几个著名问题的证明。简单来说图灵机由4部分构成:
  1. 一条无限长的纸带,分为一个一个单元,这条纸带可以左右移动。每个单元可以记录符号。
  2. 一个头,可以在纸带上读和写符号。
  3. 活动表,记录了纸带和头如何活动。
  4. 一个状态寄存器,记录活动表的状态。
图灵模仿了人解题的过程,解决一个问题时,头在根据活动表的内容读或写纸带单元的内容,并相应的移动纸带。这个模型就是现代计算机的鼻祖。后来冯.诺依曼提出了更具体的计算机体系。计算机由5部分组成:
  1. 执行单元
  2. 运算部件
  3. 内存
  4. I/O
  5. 程序计数器PC
执 行单元根据PC指示的地址去内存中读取指令,然后指令可以读写内存,将内存取出的数字交给运算部件运算。冯.诺依曼机器中指令和数据是同一存储的。人通过 I/O来与计算机交互。这个模型和图灵机基本类似:纸带就是内存,活动表也是内存的一部分,头就是执行和运算部件。程序就是活动表中左右移动纸带,读写纸 带的活动序列。同样本质上来讲程序就是内存中的指令序列。

后来编写程序的技术日新月异,各种概念技术层出不穷,但是本质上来说任何程序, 静态的如C, Forturn,Pascal,稍微动态一点的C++,Java,动态的Python, Lua,Ruby,传说中的 Lisp,Prolog最终都是内存中的指令序列。因为60年来计算机都是遵循冯.诺依曼模型的。

虽然人自己到底是怎么描述世界的还不是 很清楚,但是人描述世界的方式肯定和计算机描述世界的方式差别巨大,于是人们就不断的发展编程技术使得编程能更接近人描述世界的方式。首先是汇编。显然一 串数字是很不好记住的,于是用助记符去代表难以理解的数字。比如讲0xCC表示为int 3。后来发展出第一种高级语言Forturn。

60 年代人们发现单纯的跳转指令,使得程序很不好理解(人不好理解,机器一点问题没有),于是发展出结构化程序设计,使得调用子程序(很多名字过程,函数,方 法)有了标准。后来人们发现子程序一般要和程序处理的数据结合在一起,于是就发展了面向对象OO的技术。编译器自动完成在函数调用的时候传递this参 数,省去了自己写的麻烦。后来发现程序编译完成后,没有源代码就无法知道该怎么调用,于是加入元数据让编译完成之后的组建也能自己描述自己。

无论技术怎么更新,新技术只是自动的解决原来技术中不足的地方。比如用汇编照样可以写出面向对象的程序,但是用Java就方便的多,因为编译器帮你完成了许多工作,但是一个Java程序和一个汇编程序一样,最终执行的时候都是一条一条的计算机指令没有什么区比。

第0章说过,C语言重要的一条原因就是C语言最贴近计算机的模型。C语言由一组函数构成,函数就是一段一段的指令序列。函数中有一个叫main的,程序从main开始执行起,就是指令序列的起点。一直到结束,就是一个完成的指令序列。 

这篇关于非典型性C语言教程- 0.3 计算机程序到底是什么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690001

相关文章

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写