热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编程语言是从哪蹦出来的——大型伦理寻根现场

Hello,我是Alex007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫Alex的人太多了,再加上每天007的生活,Alex007就诞生了。聊一聊编程到底是啥,怎

Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了。

聊一聊编程到底是啥,怎么发展起来的呢?

编程语言是从哪蹦出来的?

一、什么是编程?

看过《黑客帝国》这部电影的人们应该会对一个场景印象深刻,黑色的屏幕落下一行行的代码,屏幕前的程序员十指飞舞干脆利落,十分炫酷。

这个画面让很多人以为这就是编程,坐在电脑前飞快的敲键盘,其实也没错,编程确实等价于敲代码,但是可没有电影中表现的那么精彩。

编程其实就是程序员通过键盘输入代码与计算机做沟通,既然是沟通,那就必须是双方的,程序员通过代码向计算机发出指令,计算机执行指令之后将结果反馈到屏幕或文件上显示给程序员。

计算机的反馈,可以是文字,可以是图片,也可以是视频,这是以我们能理解的方式显示,所以编程也是必须以计算机能理解的方式发布指令。

我们都知道,计算机底层所有的工作都是以二进制的形式进行的,也就是说它只认识0和1,当初最早的程序员也确实是靠二进制写程序。

由二进制代码0和1表达的指令称为机器指令,所有的机器指令的集合构成计算机的机器语言。

《编程语言是从哪蹦出来的——大型伦理寻根现场》
慢慢的,程序越来越多,逻辑也越来越复杂,特别容易出错,代码维护极其困难,单独的0和1已经不能够满足需求了,为了让编程变得更加直观,程序员就把二进制的01进行分组,四位二进制数表示一位十六进制数,程序员输入十六进制的数,然后有一个专门的程序将十六进制数转换为二进制数之后再交给计算机执行。

《编程语言是从哪蹦出来的——大型伦理寻根现场》

但是,这种由十个数字和六个字母组成的语言还是不够直观,只有专业人员能看懂,普通人想要理解太过困难,这就导致编程的学习门槛高,最好是能够让计算机直接认识单词,这样的程序看起来也比较直观。

程序员又把二进制的机器语言重新分组,让固定长度的由01字符组成的机器码直接对应英文单词,这样程序员就可以直接输入单词进行编程,于是汇编语言就此诞生。

我们来看一段汇编语言的代码:

section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov edx, len ;message length
mov ecx, msg ;message to write
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax, 1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string

这段代码的功能其实就是输出“Hello World!”而已,这么一个简单的功能,却需要那么多行的代码,那我每次要想输出字符的时候都要把上边的代码再敲一遍。

因此,又有程序员将固定功能的汇编语言代码封装起来,用一个简洁的单词代表,比如上述汇编语言的代码是向屏幕输入一个字符串,那么我把这个功能用一个单词print代表,这样就只需要输入print(“Hello World!”),就可以在屏幕上打印字符串,这就是高级语言。

高级语言简化了编程的过程,具有如下优点:

1.不需要再使用繁琐的二进制或十六进制的机器码
2.更加平易近人,让编程是以程序员的思路进行,而不是思考计算机底层应该怎么做

编程语言经过层层优化,从最开始的机器语言,到汇编语言,再到高级语言,风格越来越优雅,现在通过高级语言编程只需要输入美丽的英文语句就可以向计算机发布指令。

二、高级语言的分类

在屏幕上打印字符串,使用高级语言可以写成:

print("Hello World!")

对我们而言,一看这行代码就知道我们是给计算机发布了一个打印字符串的命令,而在计算机内部会把这条语句转换成用机器语言编写的等价指令,一大堆以01机器码形式表现的指令,看起来非常麻烦。

但是对于计算机来说恰恰相反,高级语言编写的指令就是一堆火星文,毫无用处,计算机本质上还是只能识别二进制的机器码,要想执行我们给它发布的指令,就必须把指程序翻译成机器语言。

我们知道,翻译有两种方式,假如我用中文写了一本书,然后想让一个只懂英语的外国人看,第一种方案是我找一个翻译把整本书翻译成英文版本,把译本直接给外国人,他就可以直接阅读,第二种方案是把翻译人员和外国人都叫过来,我把内容读给翻译人员听,翻译人员理解了之后再翻译成英文说给外国人听。

这两种方案其实就是编程语言的两种分类,一种是将程序代码全部翻译成机器语言之后交给计算机执行,这叫编译型语言,承接翻译工作的是编译器;另一种是将程序代码一行一行的翻译成机器语言然后计算机一行一行的执行,这叫解释型语言,承接翻译工作的是解释器。

统一来讲,编译器或解释器就是将我们能够理解的高级语言程序转换成计算机能够理解的机器语言程序。

程序员负责进行思维活动编写代码,编译器或解释器负责代码的翻译工作。

编译型

我们说编译就类似于将一本书全部翻译成机器语言程序,那么编译的过程肯定要消耗一定的时间,而计算机拿到“这本书”之后可以很快的阅读,不仅如此,编译之后的译本还可以给很多能看懂的计算机执行,相比与此编译所使用的时间就不足为虑了。

编译型语言的优点:

1.执行速度快。
对于同一个任务采用不同的语言实现,一般编译型语言的执行速度是解释型语言执行速度的2~10倍。
2.调试方便。
编译型语言的代码编写要求比较严谨,在调试时比较方便。
3.源码不依赖。
编译型语言执行时不需要源代码。

编译型语言的缺点:

1.代码量大。
完成同一个任务一般编译型语言的代码量是解释型语言代码量的10~50倍。
2.平台依赖性。
编译型语言是要基于不同平台底层实现的,因此对平台的依赖性比较大。
3.更新代价大。
每次修改完源代码之后都要重新编译。

常见的编译型语言:C、C++、Fortran、Visual Foxpro、Pascal、Delphi、Ada。

解释型

解释型语言的优点:

1.代码简洁。
解释型语言的代码相对编译型语言的代码更为简洁,方便阅读。
2.平台独立性和安全性。
解释器内部已经实现了对不同平台的交互处理,这使得解释型语言适合互联网和WEB应用的开发。

解释型语言的缺点:

1.执行速度慢。
相比于编译型语言,解释型语言的执行速度较慢。
2.内存占用大。
必须先运行相关的解释器才能执行解释型语言,而解释器会大量消耗资源,占用CPU周期和内存。

常见的解释型语言:Python、Tcl、Perl、Ruby、Vbscript、 Javascript。


推荐阅读
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • Java多重继承的替代方案及设计考量
    本文探讨了Java为何不支持多重继承,并深入分析了其背后的原理和替代方案。通过理解Java的设计哲学,开发者可以更好地利用接口和其他特性来实现复杂的类结构。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • MongoDB的核心特性与架构解析
    本文深入探讨了MongoDB的核心特性,包括其强大的查询语言、灵活的文档模型以及高效的索引机制。此外,还详细介绍了MongoDB的体系结构,解释了其文档、集合和数据库的层次关系,并对比了MongoDB与传统关系型数据库(如MySQL)的逻辑结构。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • 本文详细解析了Java中throw和throws的关键区别,同时涵盖了JDK的定义、Java虚拟机的关键约定、Java的跨平台性、自动垃圾回收机制、源文件结构、包的概念及作用等多个核心知识点,旨在帮助学生更好地准备Java期末考试。 ... [详细]
  • PC时代的传奇人物
    回顾过去几十年,个人电脑(PC)的发展历程犹如一部英雄史诗。每一位杰出人物都在这一领域留下了不可磨灭的印记,他们的贡献不仅推动了技术的进步,也深刻影响了现代社会的发展。 ... [详细]
  • 本文详细介绍了Java编程语言中的基本数字类型,包括各类运算符(算术、关系、逻辑、位运算)的使用方法,以及Math和Random类的功能与应用。 ... [详细]
author-avatar
西北孤狼2502911947
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有