非典型性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

相关文章

一文带你搞懂Python中__init__.py到底是什么

《一文带你搞懂Python中__init__.py到底是什么》朋友们,今天我们来聊聊Python里一个低调却至关重要的文件——__init__.py,有些人可能听说过它是“包的标志”,也有人觉得它“没... 目录先搞懂 python 模块(module)Python 包(package)是啥?那么 __in

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA