12.关于编程语言的那些事儿
12.关于编程语言的那些事儿
编程语言的分类
1.机器语言:
机器语言是计算机最原始的语言,是一种指令集
的体系。这种指令集称为机器码
。仅由 0
和 1
组成。 CPU 在工作的时候只认识机器语言。每台机器都会存在自己的指令集。
最早计算机是以 穿孔纸带 进行编程的。带孔为 1,无孔为 0,经过光电输入到计算机当中。纸带就充当了存储介质。后面被 磁带
所取代。
机器语言的 可读性、可移植性差,编程非常繁杂。
但是直接和机器打交道,运行速度可以接近硬件的极限,资源占用少;
2.汇编语言
汇编语言,即一种低级语言,他用人类容易记忆的语言和符号来表示一组 0
和 1
的代码。相当于是 0 和 1 的一种高层次封装,一组 0 和 1 用一个单词表示。
不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性,难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生 bug,难于调试,使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O 端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源,目标代码简短,占用内存少,执行速度快。
所以汇编语言一般用来开发 CPU 指令集,驱动程序,逆向工程,破解,单片机,嵌入式开发,系统底层开发等。
3.高级语言
运行速度和执行效率低于汇编语言,程序大小与编译器有关。
高级语言接近 算法语言 ,易学、易掌握,提供结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;高级语言远离机器语言,与具体的计算机硬件关系不大,可移植性好,重用率高;由于把繁杂琐碎的事务交给了编译程序去做,所以自动化程度高,开发周期短,且程序员得到解脱,可以集中时间和精力去从事对于他们来说更为重要的创造性劳动,以提高程序的质量。
高级语言按照执行方式又可以被分为 编译型语言 和 解释型语言
编译型语言:
编译语言,一般会通过编译器处理,先将代码编译为机器码,再加以执行。比如 exe
文件,以后需要运行的时候就不用再重新编译了,运行时不需要再编译,所以执行效率很高。
解释型语言:
解释型语言,一般通过 解释器 将代码一句一句直接执行,不需要像编译语言一样先编译为机器码之后再执行。在执行期,动态将代码逐句解释并执行。典型的如脚本语言。
脚本语言:
脚本语言是一种解释型语言,脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。脚本语言一般都 有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本语言的分支,两者也有实质上的相同之处。脚本语言一般都是以文本形式存在,类似于一种命令。
- 脚本语言是解释型的语言,也就是解释型语言包括脚本语言。
- 解释语言是说解释执行的语言,但执行的代码并不一定是文本格式的。
- 脚本语言的程序是文本文件,并且是解释执行的。
通常来说 编译型语言的执行速度要比解释型语言快,不用像解释型语言一样多一道解析过程。而且编译型语言是编译成机器码来执行的,所以它们能比解释型语言更好的控制硬件,例如内存管理和 CPU 使用率。典型的如 c/c++ ,rust ,zig 他们一般用于系统和底层库的开发,在高级语言当中,它们是性能的天花板。
脚本语言代表:Python,Javascript,PHP,它们是开发效率的代名词。
目前来说,除了一些极为特殊的领域,如芯片指令集开发,嵌入式领域等,大部分时候都是采用的高级语言。
主流编程语言介绍
C 语言
C 语言的主要应用领域是操作系统、嵌入式和服务器这三块,它是一门强大的被广泛运用于底层的高级语言,比如说微软的 Windows 系统占据着全球 90%以上的操作系统份额,而它的内核就是用 C 语言写的。还有 著名的 Unix/Linux 也是由 C 语言编写。
c 语言因为其 陡峭的学习曲线,较低的开发效率,缺乏一些现代语言特性,而且容易出错(比如内存泄露溢出等),一般来说都不太推荐使用 C 语言进行应用开发。
但是由于其出色的性能和可以直接访问硬件的特性,在系统底层开发具有不可取代的地位。
C++
相当于 C 语言的增强版,是 C 语言的超集。它进一步扩充和完善了 C 语言,并提供了很多高级特性,如面向对象、封装、继承、多态,抽象。使得其更容易编写大型和复杂项目。
它的性能基本上和 C 语言不相上下。
C++主要用于游戏领域、办公软件、图形处理、网站、搜索引擎、图形界面层、关系型数据库、浏览器、软件开发、集成环境 IDE 等等业务复杂但是对性能有一定要求的地方。
https://www.runoob.com/cplusplus/cpp-tutorial.html
直到现在为止,c/c++
在编程领域仍然占据着统治地位。它们是性能的代表,是现代计算机编程领域的基石,大多数语言的 编译器和解释器 都是 用它们开发的。也就是说,没有 c/c++
就没有 现代编程语言 。
Java
既是编译型语言又是解释型语言。 这是因为 Java 源代码首先经过编译器编译成字节码文件(.class 文件),然后由 Java 虚拟机(JVM)解释执行字节码。 编译型语言将源代码一次性编译成机器语言,然后可以直接在计算机上执行。
Java 主要用于企业级应用开发、网站平台开发、移动领域的手机游戏和移动 android 开发。举个例子吧,几乎所有的交易网站(淘宝,天猫,京东等)的保险和金融等网站都是用的 Java 做开发。
Java 是目前市面上找工作机会非常多但也同样竞争最激烈的一门语言,相对于 C 语言来说,Java 更容易学一些。
其性能低于 C/C++ , 但具备非常高级的抽象和表达能力,具备更好的可维护性,让编写复杂庞大的业务逻辑变得极为方便。
缺点是占用内存非常庞大,语法大多数时候显得很啰嗦。
C#
这是一门很先进的语言,基本上可以应用于任何领域,语法类似 Java。他基本上可应用于任何领域的开发。但因为早期其生态环境太过于依赖 Windows
而不被市场考虑。
相关阅读:微软是怎么把 C#玩砸的?
Rust
其诞生目的是为了取代 C/C++
,其应用领域和 c++
一样,也拥有等同于 C语言
的性能。
它一样具有着陡峭的学习曲线,但是其强调了内存安全。可以在编译期帮开发者查找出代码中的大部分错误。
目前 Linux 中一部分已经采用 Rust 进行重构。它在当下越来越流行,被誉为 最有希望取代 C 语言的语言。
Zig
又一个想要替代 C
语言的语言,他可以完成所有 C 语言能完成的工作,还可以方便的集成 C 库。提供了丰富的特性和高级抽象能力,学习曲线相对比较平缓。是近几年刚刚展露头角的语言。
Go
go 是非常年轻的一门语言,它拥有不亚于 Python、Javascript 等脚本的开发速度,又具有接近 C/C++
的执行性能,还非常简单和易于学习。
它具备强类型,易于维护,语法简洁,特性简单。可以支持几乎所有平台的交叉编译,天生具有高并发的特性,自带 GC 和垃圾回收。
2015 年 8 月 19 日,Go 1.5 版本发布,这时它已经完全实现了 自举,现在已经是 1.22.4 了。
虽然目前看来Go
的实际性能和 C/C++
还有一点差距,但在高级语言当中也是数一数二的存在了。
它在开发效率和性能上达到了一个非常完美的平衡点。
它目前主要的应用于 内存数据库和云平台领域 。
目前国内越越来越多的企业正在切换成Go
JavaScript
简称 js ,是浏览器中的一等公民,在 Web 开发中有着无法被撼动的地位。
因为浏览器具有非常好的跨平台一致性,所以 Javascript 也同样具有良好的跨平台特性,凡是浏览器内核可以运行的地方,Javascript 就能发挥出极大的作用。
比如 Nodejs
就是用C
语言拓展了浏览器内核,使得 Javascript 这门客户端语言也可以应用于服务器开发。可以说, js 是唯一一门可以做到前后端 同构 的语言。
得益于 Webkit 内核的牛逼的优化,js 的性能在脚本语言当中也是数一数二的存在。
它具备非常快的开发速度和还不错的性能成为了,使得 Javascript 成为了最多开发人员和最广泛使用的编程语言之一。
但由于是弱类型语言,在构建大型项目的时候会非常难以维护。于是微软 于 2012 年发布了 TypeScript。它是 js 的超集,完美解决了 js 大型项目难以维护的缺点。
Python
Python 是动态类型的脚本语言,其执行效率非常慢,用 Python 编写大型项目也是一场灾难。
但是因为其语法简洁,并且编写方式很接近自然语言,上手入门非常简单。所以它受到了很多 非程序员
人士的喜爱。而且它可以非常方便的调用 C语言
编写的基础库,所以它作为基础库的 粘合剂
语言有着令人咂舌的生态。所以它的开发效率非常高,经常两三行代码就能完成一些非常复杂的任务。
因为这些特性,所以它常常被用于编写那种 用完即走 的工作流脚本。一般的 Linux/Mac 系统都会内置 Python
的的解释器。
所以它被广泛用于以下领域:
一、数据分析与科学计算;
二、Web 开发;
三、自动化脚本编写;
四、机器学习与人工智能;
五、网络爬虫;
六、游戏开发;
大多数时候,Python 在以上领域中其实仅仅只是扮演了 调用者 角色。但是作为一个 调用者 和 粘合剂 语言来说,Python 的确十分优秀。
选择适合自己的编程语言
相关信息
理论上讲,只要是图灵完备的编程语言,它们能做到的事情基本都是相似的。只是随着历史发展不同的编程语言更加适合不同的领域。
因为 C/C++
极致的性能, 所以系统底层开发离不开它们。但 Rust
、Zig
这些后起之秀也在不断挑战它的统治地位。
因为浏览器的发展历史,Javascript 在网页编程领域无法被取代。而且现在还有很多人致力于用 Javascript 开发一切。
因为十分便捷的特性和足够丰富的生态以及非常低的上手门槛,Python 一度火爆。
因为非常强的抽象和表达能力,以及高可移植性、可扩展性。在互联网发展伊始阶段 Java 在商业领域表现卓著。不过兼具性能和开发速度的后来者 Go
在一些地方正在逐渐取代 Java
。
因为非常极致的 Web 开发速度,PHP 曾经也创造了非常多的商业奇迹。虽然现在鲜有人问津。
你对网页,小程序,H5 开发非常感兴趣,那么推荐 Javascript 进行入门;
你学习编程语言的目的是为了方便快捷的完成一些琐事、杂事和工作流,或者是用于科学计算和市场分析,那么推荐 Python 进行入门;
如果你想要开发一些复杂的稳定的应用程序,想要构建一个平台,提供一些服务让很多人使用,推荐 Go语言
进行入门学习;
如果你想在编程领域有长远的发展,深入底层,有大量的时间可以进行钻研和深入学习,那么你可以尝试 Rust
。但是 Rust
并不适合入门玩家,我更推荐使用 C 语言入门,然后再去学习 Rust 。
如果想要开发游戏,最好的方法是直接学习 对应的游戏引擎的上层语言。
编程语言发展史
- 0
- 0
- 0
- 0
- 0
- 0