技术与架构中语言章(1)之计算机语言方向解析

前言

鸟菜啊真是一个菜鸟,写该系列的第一节,也就这节。心里十分虚。因为鸟菜啊深入接触的只有高级语言。汇编语言只是简简单单玩了下,机器语言就更不用说了,只是在网络上看过,也只是看过,而且还不懂。但是为了给大家能深入理解计算及语言,找了很多资料,懂了点,厚着脸皮写。有不足之处,欢迎指出

计算机语言很多,按照发展来分类的话分为 机器语言,汇编语言,高级语言。本节解析这三个语言与计算机语言。这个是隐节。主要是为了第三节,做的铺垫。

现在鸟菜需要实现一个网络库

机械语言

当计算机被创造出来的时候,机器语言就诞生了。读过计算机相关专业的人,接触过编程的人,长期接触网络等计算机方面的人。都会知道机器语言就是0与1组合成的。0与1是硬件最容易识别的状态。所以机械语言也被称职硬件语言。那机械语言到底是什么了,就是一种指令集的体系。

什么是指令与指令集

深入理解 加法指令。

分析 1+ 2=? 大家会说这有什么分析的。不就是

一加二等于几吗?

这句解释是错误的。是因为一加一更加适合和方便人类思维与识别能力,并不是按照逻辑方式得出的答案。按照逻辑是

一 与 二 相加 等于

计算机不是人类,不会按照人类的逻辑能力与识别能力来处理事情,只能按照他的方式即物理操作,逻辑逻辑 从逻辑方式,简要分析 cpu如何实现一个加法指令的了

  1. 在某个地方拉取到 第一个计算的值 1
  2. 在某个地方拉取到 第二个计算的值 2
  3. 在把两个值进行计算等到计算后的值,
  4. 然后把结果送到某个地方

物理操作比逻辑操作更加复杂。一个逻辑操作相当于多个物理操作 简要(并可能有些错误的)分析。

列如 第一个逻辑操作 在某个地方拉取到 第一个计算的值 1

  1. 先识别是什么地方。比如是cpu缓存,还是内存
  2. 数据地址是
  3. 拉取的数据长度
  4. 拉回来
  5. 看下是否有空间存在值 ...
  6. 有,分配一个空间
  7. 把值放到分配的空间里面

是不是很复杂。是啊。很复杂。怎么办。其实人类的文明早就有解决方案了。

用名字映射这个问题。比如突然有人呼叫你的名字,也就是呼叫你这个人,人是多么复杂的组合体

使用一个名字,这个名字在计算机里面成为指令 指令是有多个逻辑操作组成,每个逻辑操作由多个物理操作组成。指令代表N个物理操作。当cpu执行某个指令的时候,会执行对应N个物理操作。

指令集

就是一大堆指令组合在一起

分析

下面有一些二进制码,大家知道什么意思吗?

1001010101 1001010101 00000011

1001010101 大家马上会进行二进制转十进制计算。

得出:597,597,3。一个简单的数值识别需要很大代价。

这些二进制码没含义啊。不是没有含义,而是菜鸟啊也不知道如何用二进制表达复杂的 597+597 这个加法操作

优点
  1. 特定型号的计算机上面,运算效率也是很高的
  2. 最终的硬件操作全是二进制,需要给硬件指定一个二进制的指令。高效的二进制指令,能让硬件操作更加高效
  3. 可以直接操作硬件
缺点
  1. 大量繁杂琐碎的细节牵制着程序员,使他们不可能有更多的时间和精力去从事创造性的劳动,执行对他们来说更为重要的任务。如确保程序的正确性、高效性。
  2. 程序员既要驾驭程序设计的全局又要深入每一个局部直到实现的细节,即使智力超群的程序员也常常会顾此失彼,屡出差错,因而所编出的程序可靠性差,且开发周期长。
  3. 由于用机器语言进行程序设计的思维和表达方式与人们的习惯大相径庭,只有经过较长时间职业训练的程序员才能胜任,使得程序设计曲高和寡。
  4. 因为它的书面形式全是"密"码,所以可读性差,不便于交流与合作。
  5. 因为它严重地依赖于具体的计算机,所以可移植性差,重用性差。
项目如何

使用 机器语言实现一个类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
  1. 没有用字符指令代替二进制指令
    1. add 可以代表 00000011
  2. 基本类型的出现
    1. 字节型(DB)
    2. 字类型(DW)
    3. 双字类型(DD)
    4. 三字类型(DF)
    5. 四字类型(DQ)
    6. 五字类型(DT)
    7. 字符串
  3. 函数出现,实现代码结构化
    1. 代码更加容易分类
    2. 代码更加容易组合,复用
    3. 代码更加容易管理
  4. 栈的出现
    1. 没有栈,函数无法实现。这是最主要的区别。为计算机及计算机语言的发展做了最基础的,最重要,最核心的基点
    2. push 就是把数字压入栈
  5. include关键字具有代码文件引用能力
    1. 提供了最强的组织能力
  6. 还有更多地方
先进体现在什么地方
  1. 更加让人理解,识别
  2. 出现了代码组织能力
项目如何

使用 机械语言实现一个类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);
}
  1. 字段的出现
  2. 结构体的出现
  3. 类,函数,字段声明的出现
  4. 面向过程
  5. 面向对象
  6. 类型的出现,
  7. 更多高级语言特性的增加。比如异常,枚举
先进体现在什么地方
  1. 面向对象的出现,接近了人的思想,识别,逻辑。让人的思想,识别,逻辑与计算机逻辑,物理操作完美的结合
  2. 管理相对简单
  3. 学习,开发,维护变得更加简单
  4. 能胜任更加复杂,多变,庞大的项目
项目如何

使用 机械语言实现一个类netty网络库,需要一年。

看看语言发展的助攻

来深入看下计算机另外一个方面中一个核心的发展。硬件方面,每个计算组成都是由两个大的方面硬件与软件组成的。语言是软件....那么简要的分析下硬件。从cpu说起

发展

cpu,一共发展了六代,每代都有很大的区别,鸟菜啊无法找到没带的性能差距图,那么以观豹纹知全豹的方式以 intel 的第六代处理器 i3 i5 i7为切入点。

性能对比

线程与内核数 频率与缓存.jpg

特性
  1. 多线程
  2. 多核心
  3. SMP
  4. NUMA技术
  5. 乱序执行
  6. 分枝技术
  7. 控制器

分析结论

  1. 性能越来越强
  2. 体积越来越小
  3. 容量越来越大,速度越来越快
  4. 特性越来越多
  5. 硬件的成本越来越低

参考资料

CPU 每一代之间的差距体现在什么地方 intel i3 i5 i7 性能对比

总结

硬件是可以进行量产的物质,而人才是无法量产,培养也十分繁琐。所以释放人力资源。所以相对时间与人力资源来说,硬件的成本少得可怜

时代对软件的需求越来越旺盛,各行各业基本每个点都需要软件。软件在生活,生产,科技等等领域都带来效率,快捷,服务等。 时代变化快,产出需要快速的跟上时代。 效率,产出,成本最低是计算机语言发展的基本趋势

发展规律

  1. 更加能接近人的思想,逻辑,识别,
  2. 可以用人的思想直接的描述(第四代语言的标准)
  3. 效率的提高
  4. 能胜任更加复杂,多变,庞大的项目
  5. 释放人力资源
  6. 能快速产出

猜你喜欢

转载自my.oschina.net/u/1261452/blog/1789824