热门标签 | 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。


推荐阅读
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
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社区 版权所有