前言
鸟菜啊真是一个菜鸟,写该系列的第一节,也就这节。内心十分虚。由于鸟菜啊深刻接触的只有高级语言。汇编语言只是简简单单玩了下,机器语言就更不用说了,只是在网络上看过,也只是看过,并且还不懂。可是为了给你们能深刻理解计算及语言,找了不少资料,懂了点,厚着脸皮写。有不足之处,欢迎指出html
计算机语言不少,按照发展来分类的话分为 机器语言,汇编语言,高级语言。本节解析这三个语言与计算机语言。这个是隐节。主要是为了第三节,作的铺垫。程序员
如今鸟菜须要实现一个网络库编程
机械语言
当计算机被创造出来的时候,机器语言就诞生了。读过计算机相关专业的人,接触过编程的人,长期接触网络等计算机方面的人。都会知道机器语言就是0与1组合成的。0与1是硬件最容易识别的状态。因此机械语言也被称职硬件语言。那机械语言究竟是什么了,就是一种指令集的体系。缓存
什么是指令与指令集
深刻理解 加法指令。
分析 1+ 2=? 你们会说这有什么分析的。不就是网络
一加二等于几吗?多线程
这句解释是错误的。是由于一加一更加适合和方便人类思惟与识别能力,并非按照逻辑方式得出的答案。按照逻辑是函数
一 与 二 相加 等于性能
计算机不是人类,不会按照人类的逻辑能力与识别能力来处理事情,只能按照他的方式即物理操做,逻辑逻辑 从逻辑方式,简要分析 cpu如何实现一个加法指令的了学习
- 在某个地方拉取到 第一个计算的值 1
- 在某个地方拉取到 第二个计算的值 2
- 在把两个值进行计算等到计算后的值,
- 而后把结果送到某个地方
物理操做比逻辑操做更加复杂。一个逻辑操做至关于多个物理操做 简要(并可能有些错误的)分析。线程
列如 第一个逻辑操做 在某个地方拉取到 第一个计算的值 1
- 先识别是什么地方。好比是cpu缓存,仍是内存
- 数据地址是
- 拉取的数据长度
- 拉回来
- 看下是否有空间存在值 ...
- 有,分配一个空间
- 把值放到分配的空间里面
是否是很复杂。是啊。很复杂。怎么办。其实人类的文明早就有解决方案了。
用名字映射这个问题。好比忽然有人呼叫你的名字,也就是呼叫你这我的,人是多么复杂的组合体
使用一个名字,这个名字在计算机里面成为指令 指令是有多个逻辑操做组成,每一个逻辑操做由多个物理操做组成。指令表明N个物理操做。当cpu执行某个指令的时候,会执行对应N个物理操做。
指令集
就是一大堆指令组合在一块儿
分析
下面有一些二进制码,你们知道什么意思吗?
1001010101 1001010101 00000011
1001010101 你们立刻会进行二进制转十进制计算。
得出:597,597,3。一个简单的数值识别须要很大代价。
这些二进制码没含义啊。不是没有含义,而是菜鸟啊也不知道如何用二进制表达复杂的 597+597 这个加法操做
优势
- 特定型号的计算机上面,运算效率也是很高的
- 最终的硬件操做全是二进制,须要给硬件指定一个二进制的指令。高效的二进制指令,能让硬件操做更加高效
- 能够直接操做硬件
缺点
- 大量繁杂琐碎的细节牵制着程序员,使他们不可能有更多的时间和精力去从事创造性的劳动,执行对他们来讲更为重要的任务。如确保程序的正确性、高效性。
- 程序员既要驾驭程序设计的全局又要深刻每个局部直到实现的细节,即便智力超群的程序员也经常会顾此失彼,屡出差错,于是所编出的程序可靠性差,且开发周期长。
- 因为用机器语言进行程序设计的思惟和表达方式与人们的习惯截然不同,只有通过较长时间职业训练的程序员才能胜任,使得程序设计曲高和寡。
- 由于它的书面形式全是"密"码,因此可读性差,不便于交流与合做。
- 由于它严重地依赖于具体的计算机,因此可移植性差,重用性差。
项目如何
使用 机器语言实现一个类netty网络库,须要三十年。
参考资料
机械语言(百度百科) 指令集(百度百科) 精简指令集(百度百科)
汇编语言
汇编语言是在机器语言的基础上诞生的一门语言,用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,这也提升了语言的记忆性和识别性。
汇编语言与机械语言的区别
一段汇编代码
_add_a_and_b: ; 定义了函数 add_a_and_b push %ebx mov %eax, [%esp+8] mov %ebx, [%esp+12] add %eax, %ebx pop %ebx ret _main: ; 定义了函数main push 3 push 2 call _add_a_and_b ; 经过call指令调用 _add_a_and_b 函数 add %esp, 8 ret
- 没有用字符指令代替二进制指令
- add 能够表明 00000011
- 基本类型的出现
- 字节型(DB)
- 字类型(DW)
- 双字类型(DD)
- 三字类型(DF)
- 四字类型(DQ)
- 五字类型(DT)
- 字符串
- 函数出现,实现代码结构化
- 代码更加容易分类
- 代码更加容易组合,复用
- 代码更加容易管理
- 栈的出现
- 没有栈,函数没法实现。这是最主要的区别。为计算机及计算机语言的发展作了最基础的,最重要,最核心的基点
- push 就是把数字压入栈
- include关键字具备代码文件引用能力
- 提供了最强的组织能力
- 还有更多地方
先进体如今什么地方
- 更加让人理解,识别
- 出现了代码组织能力
项目如何
使用 机械语言实现一个类netty网络库,须要五年。
参考资料
高级语言
目前98%的程序员只掌握了高级语言,对汇编
int c = 0; int add_a_and_b(int a, int b) { return a + b; } int main() { return add_a_and_b(2, 3); }
- 字段的出现
- 结构体的出现
- 类,函数,字段声明的出现
- 面向过程
- 面向对象
- 类型的出现,
- 更多高级语言特性的增长。好比异常,枚举
先进体如今什么地方
- 面向对象的出现,接近了人的思想,识别,逻辑。让人的思想,识别,逻辑与计算机逻辑,物理操做完美的结合
- 管理相对简单
- 学习,开发,维护变得更加简单
- 能胜任更加复杂,多变,庞大的项目
项目如何
使用 机械语言实现一个类netty网络库,须要一年。
看看语言发展的助攻
来深刻看下计算机另一个方面中一个核心的发展。硬件方面,每一个计算组成都是由两个大的方面硬件与软件组成的。语言是软件....那么简要的分析下硬件。从cpu提及
发展
cpu,一共发展了六代,每代都有很大的区别,鸟菜啊没法找到没带的性能差距图,那么以观豹纹知全豹的方式以 intel 的第六代处理器 i3 i5 i7为切入点。
性能对比
特性
- 多线程
- 多核心
- SMP
- NUMA技术
- 乱序执行
- 分枝技术
- 控制器
分析结论
- 性能愈来愈强
- 体积愈来愈小
- 容量愈来愈大,速度愈来愈快
- 特性愈来愈多
- 硬件的成本愈来愈低
参考资料
CPU 每一代之间的差距体如今什么地方 intel i3 i5 i7 性能对比
总结
硬件是能够进行量产的物质,而人才是没法量产,培养也十分繁琐。因此释放人力资源。因此相对时间与人力资源来讲,硬件的成本少得可怜
时代对软件的需求愈来愈旺盛,各行各业基本每一个点都须要软件。软件在生活,生产,科技等等领域都带来效率,快捷,服务等。 时代变化快,产出须要快速的跟上时代。 效率,产出,成本最低是计算机语言发展的基本趋势
发展规律
- 更加能接近人的思想,逻辑,识别,
- 能够用人的思想直接的描述(第四代语言的标准)
- 效率的提升
- 能胜任更加复杂,多变,庞大的项目
- 释放人力资源
- 能快速产出