Skip to content

了解编程语言

更新: 2025/2/24 字数: 0 字 时长: 0 分钟

本章节我们来了解一下编程语言,为将来学习编程做一个铺垫。

基本概念

首先,我们需要来了解一下编程语言中的一些基本概念。

字面解释

什么是编程?什么是编程语言?编程,字面意思讲就是编写程序,即通过键盘向电脑输入一些遵循特定语法的字符从而构建出程序。编程语言,就是构建程序的语言,例如 C、C++、Java、Python 等,它们都有自己特定的关键词组和语法风格

img

语言效率

我们要知道无论用使用哪种编程语言,写出来的程序最终都是要放到计算机硬件上去执行的。由于不同的语言与硬件之间的距离不一样,因此不同语言写出来的程序在硬件上的执行效率也会不一样。所谓的**“执行效率(Execution Efficiency)”指的是程序在运行时所消耗的时间和资源**。一个程序的执行效率越高,它在给定的时间内可以完成的任务就越多,或者使用的资源越少。一般来说,贴近硬件的语言,其程序的执行效率都会比较高;远离硬件的语言,其程序的执行效率都会比较低。当然程序的执行效率不完全取决于语言种类,还与数据结构、算法、编译器或解释器的优化能力、底层硬件的特性等相关。除了语言的执行效率以外,在程序开发的过程中还需要考虑到语言的开发效率。所谓的**“开发效率(Development efficiency)”指开发人员在开发软件时所消耗的时间和资源**。一个语言的开发效率越高,开发人员在开发软件时所消耗的时间和资源就会越少。一般来说,贴近硬件的语言,需要更多的代码进行底层控制和处理,其开发效率就会比较低;远离硬件的语言,提供了很多抽象和内置功能,还有丰富的标准库和第三方库,用少量的代码就可以快速开发出程序,其开发效率就会比较高

image-20241008112041191

建议

执行效率和开发效率的关系就像是“鱼和熊掌”不可兼得,在不同的场景下,两者的权重是不一样的。例如,在开发程序有关性能的关键部分时,那么执行效率就比开发效率更为重要;但如果希望能快速开发出程序产品投入到市场抢占份额时,那么开发效率就比执行效率更为重要。在实际项目中,开发团队需要根据具体情况综合考虑并权衡这两个方面,以便在达到最佳效果的同时满足项目的需求和目标。

语言分类

目前,编程语言的数量众多,预计总数在数百到上千之间,具体有多少种很难确切统计,因为新的编程语言不断被开发,旧的编程语言可能被遗弃或不再广泛使用。这么多的编程语言,我们通常会按照语言的抽象层次、与硬件的距离以及易用性将语言分类为“低级语言”和“高级语言”。一般来说,低级语言更接近计算机硬件,而高级语言则提供了更多的抽象,距离底层硬件更远,具体如下图:

image-20240327091855428

低级语言

低级语言是一类贴近计算机硬件的语言(主要包含机器语言、汇编语言),这类语言通常需要程序员手动进行内存管理(如在汇编语言中管理寄存器、栈等),并直接与硬件交互。所以开发人员在使用这些语言时,需要对底层的硬件结构有深入的了解。

机器语言

机器语言是最贴近计算机硬件的低级语言,它由 0 和 1 的二进制数字序列组成,这些数字指令可以直接被计算机处理器所识别和执行,因此机器语言可以说是执行效率最高的语言。但由于机器语言全都是难以被理解和编写的二进制数据,所以通常不会直接使用机器语言来编写程序。

image-20240329105130622

提醒

每个处理器架构都有自己专属的机器语言。

汇编语言

汇编语言是一种更高级的低级语言,提供了与处理器操作指令集(ISA)直接相关符号化的指令(如 MOVADD)。虽然汇编语言不如机器语言贴近计算机硬件,但它仍然非常接近硬件,可以使用符号化的指令实现类似于机器语言来操作计算机的硬件资源,而且相对于机器语言来说更容易理解和编写

image-20240329105304208

以下是一个汇编语言程序示例:汇编代码指示处理器将数值 1 存入寄存器 AX,然后再将 AX 中的值加上 2。

MOV AX, 1
ADD AX, 2

特点总结

最后,我们总结一下低级语言的一些共同特点:

  • 贴近硬件:低级语言距离计算机硬件通常都非常近,能够完全控制计算机硬件。
  • 语法简单:低级语言的语法往往简单直接,所编写的代码与机器指令非常相似。
  • 执行效率高:低级语言通常直接与计算机硬件进行交互,因此程序的执行效率都比较高、执行速度也都比较快。
  • 开发效率低:使用低级语言与计算机硬件交互时,需要处理大量硬件相关的细节问题,这也意味着使用低级语言编写的程序往往需要投入更多的代码量和时间,因此低级语言的开发效率低。例如,汇编语言中的一个简单加法操作可能涉及多个寄存器和内存地址。
  • 可移植性差:由于低级语言通常与特定的硬件架构紧密相关,因此它们的可移植性较差。汇编语言的程序通常只能在与编写时相同的硬件平台上运行。
  • 语言适用场景:由于低级语言更接近硬件,允许更细粒度的控制,所以适用于性能关键或与硬件强相关的任务,通常应用在一些实时性要求高、控制权需要精细掌握的场景中

高级语言

高级语言是人们为了简化编程过程所发明的一系列对人类理解更为友好的编程语言,如主流的 C、C++、Java、Python 等,它们基本脱离了机器的硬件系统,用较为接近自然语言和数学公式的方式来编写程序。

两大类型

高级语言通常不能被计算机直接执行,而是通过“翻译软件”将其翻译成计算机能执行的形式。根据源代码翻译的结果是否为机器语言将“翻译软件”分为“编译器”、“解释器”两种,依此被翻译的高级语言可以分为“编译型”和“解释型”两种。

编译型

“编译器”是一种将高级语言翻译成机器语言的软件工具,而使用“编译器”进行翻译的过程叫“编译”。整个编译的过程是一次性地将整个程序翻译成机器语言,里面通常包括词法分析、语法分析、语义分析、优化和代码生成等阶段。编译完成后,会生成一个或多个目标文件,这些目标文件包含了可以直接由计算机硬件执行的机器语言。

  • 主要特点:编译过程是整体的、一次性的,并且在程序运行之前完成。编译后的机器语言执行效率高,但平台依赖性也比较高,即在不同平台间上编译的机器语言不能通用。

  • 编程语言:C、C++、Go、Pascal、Objective-C 等。

编译型

解释型

“解释器”是一种将高级语言翻译成中间形式(如字节码)并执行的软件工具,而使用“解释器”进行翻译的过程叫“解释”。整个解释的过程是逐行或逐块地将高级语言代码翻译成中间形式(如字节码)并执行,这意味着解释器需要实时读取、翻译和执行源代码,这通常比编译过程更慢,因为编译后的程序通常可以更快地执行。然而,解释器也有其优点,例如可以方便地实现交互式编程,并且可以在不修改源代码的情况下,通过修改解释器来改变程序的行为。

主要特点:执行效率相对较低,但平台依赖性不高,只要安装好了对应平台的解释器,代码放在任何平台都能执行。

编程语言:Python、JavaScript、Ruby 等。

解释型

主流语言

C

C 语言是一种静态类型、编译型计算机编程语言,支持结构化编程、词法变量作用域和递归等功能,有高效且灵活的内存管理,并允许直接访问硬件内存地址等低级功能,是应用最广泛的一种计算机编程语言。C 语言的特点包括:

  1. 简洁紧凑、灵活方便:C 语言一共只有 32 个关键字,9 种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这一切又是用高级语言的方式来实现的。
  2. 运算符丰富:C 语言的运算符包含的范围很广泛,共有 34 种运算符。C 语言把括号、赋值、强制类型转换等都作为运算符处理。从而使 C 语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
  3. 数据类型丰富:C 语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。
  4. 目标代码质量高,程序执行效率高:一般只比汇编程序生成的目标代码效率低 10%~20%。
  5. 允许直接访问物理地址,对硬件的操作能力强:既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而且这三者可以混合运算。
  6. 用C语言编写的程序可移植性好:基本上不做改变就可以用在各种型号的计算机、各种操作系统上。

C

C++

C++ 由 Bjarne Stroustrup 于 1983 年创建,最初被设计作为 C 语言的增强版本,后来逐渐发展成为一种广泛使用的、通用的、面向对象的高级语言。它支持过程化编程、数据抽象、面向对象编程、泛型编程等多种编程范式。C++ 是 C 语言的扩展,提供了比 C 语言更强大的功能,包括类、继承、重载、异常处理、模板等特性。C++ 的主要特点包括:

  1. 面向对象:C++ 支持面向对象编程,通过类、对象、继承、封装和多态等概念,使代码更加模块化、可重用和易于维护。
  2. 性能:C++ 代码在编译时会被转换为机器语言,因此通常具有接近硬件的性能。这使得 C++ 在系统级编程、游戏开发、嵌入式系统等领域非常受欢迎。
  3. 跨平台性:C++ 代码可以在多种操作系统和硬件平台上运行,只要这些平台提供了 C++ 编译器。
  4. 泛型编程:C++ 支持模板,可以实现泛型编程,使得代码更加灵活和可重用。
  5. 标准库:C++ 标准库提供了大量的功能和工具,包括容器、算法、输入/输出流等,可以简化开发过程。
  6. 兼容性:C++ 与 C 语言具有良好的兼容性,大部分 C 代码可以在 C++ 编译器中直接编译和运行。
  7. 应用领域广泛:C++ 的应用领域非常广泛,包括操作系统、游戏开发、嵌入式系统、网络编程、数据库管理、图形界面开发等。它既是底层系统级编程的利器,也能用于构建大型、复杂的软件系统。
  8. 有一定的复杂性:C++ 的强大功能也带来了一定的复杂性。因此,学习和使用 C++ 需要一定的时间和经验积累。同时,为了写出高效、安全、可维护的 C++ 代码,开发者需要遵循良好的编程习惯和最佳实践。

C++

C#

C#(读作“C Sharp”)是微软公司开发的运行在.NET(.NET Framework和.NET Core)平台上的一种简单、现代、面向对象和类型安全的编程语言。它是专门为与 Microsoft 的 .NET Framework 一起使用而设计的,同时保留了 C 和 C++ 的强大功能,并整合了语言特性、运行时环境和丰富的类库。C# 的主要特点包括:

  1. 面向对象:C# 支持面向对象编程的所有基本特性,如封装、继承和多态。通过类和对象,C# 允许开发者创建可重用和可维护的代码。
  2. 类型安全:C# 是一种强类型语言,这意味着在编译时必须明确变量的类型,这有助于减少运行时错误并提高代码可靠性。
  3. 跨平台性:随着 .NET Core 的推出,C# 现在可以在 Windows、Linux 和 macOS 上运行,这使得 C# 成为一种真正跨平台的编程语言。
  4. 自动内存管理:C# 使用垃圾回收器自动管理内存,减少了内存泄漏和内存管理错误的可能性。
  5. 丰富的类库:.NET Framework 和 .NET Core 提供了大量的类库,包括用于文件操作、网络编程、数据库访问、图形用户界面开发等的类和方法。
  6. 异步编程:C# 提供了强大的异步编程支持,使开发者能够编写响应迅速且资源高效的应用程序。
  7. 应用领域:C# 主要用于构建 Windows 桌面应用程序、Web 应用程序、Web 服务、游戏、移动应用(通过 Xamarin)以及许多其他类型的软件。由于它的易用性和强大的功能集,C# 在企业级应用程序开发中特别受欢迎。
  8. 区别比较:与 C++ 相比,C# 更注重于易用性和开发效率,而 C++ 则更侧重于性能和底层控制。两者在不同的应用场景中都有各自的优势。

C#

Java

Java 是由 Sun Microsystems 公司(现在属于 Oracle 公司)的 James Gosling 和同事们于 1995 年共同开发的一门面向对象的编程语言。它提供了跨平台的能力,能在任何安装了 Java 虚拟机(JVM)的计算机上运行,这主要得益于 Java 的“编译一次,到处运行”的特性。不仅如此,Java 语言因其稳定、安全、高效和跨平台的特性,成为了软件开发行业中最受欢迎的语言之一。Java 的主要特点包括:

  1. 面向对象:Java 是一种纯面向对象的语言,支持类和对象的概念,以及继承、封装和多态等面向对象编程的基本原则。
  2. 跨平台性:Java 程序被编译成字节码(bytecode),然后在 Java 虚拟机(JVM)上运行。由于 JVM 可以在多种操作系统上实现,因此 Java 程序具有跨平台的能力。
  3. 自动内存管理:Java提供了垃圾回收机制来自动管理内存,程序员无需手动释放不再使用的内存。
  4. 丰富的API:Java 标准库(JDK)提供了大量的类和方法,用于处理各种常见的编程任务,如文件 I/O、网络编程、数据库访问等。
  5. 安全性:Java 设计了多种安全特性,如字节码验证、访问控制等,以防止恶意代码的执行。
  6. 多线程支持:Java 内置对多线程编程的支持,使得开发并发应用程序变得更加容易。
  7. 应用领域:Java 在多个领域都有广泛的应用,包括 Web 开发(通过Servlet、JSP、Spring等框架)、企业级应用(通过 EJB、JPA 等)、桌面应用(通过 Swing、JavaFX 等)、移动应用开发(通过 Android 平台)、嵌入式系统、大数据处理等。

Java

JavaScript

JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发 Web 页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式(如函数式编程)范式。JavaScript 的主要特点包括:

  1. 动态类型:JavaScript 是一种动态类型的语言,你可以在程序运行期间改变变量的类型。
  2. 面向对象:JavaScript 支持面向对象编程,包括封装、继承和多态等概念。不过,它使用的是基于原型的继承方式,而不是基于类的。
  3. 异步编程:JavaScript 支持异步编程,这对于处理诸如网络请求、文件读写等耗时操作非常有用,可以避免阻塞主线程。
  4. 浏览器兼容性:JavaScript 是 Web 开发的核心语言,几乎所有的现代浏览器都内置了 JavaScript 引擎,可以直接运行 JavaScript 代码。
  5. 事件驱动:JavaScript 是一种事件驱动的语言,它可以响应用户的各种交互事件,如点击、滚动、键盘输入等。
  6. 丰富的API:浏览器提供了大量的 JavaScript API,用于操作 DOM(文档对象模型)、CSS、网络请求、存储等。
  7. 应用领域:JavaScript 主要用于 Web 开发,包括网页的交互效果、动态内容更新、表单验证、游戏开发等。同时,随着 Node.js 的出现,JavaScript 也可以用于服务器端开发,构建高性能的 Web 服务器和应用程序。此外,JavaScript 还被用于构建桌面应用(通过 Electron 等框架)和移动应用(通过 React Native 等框架)。

JavaScript

建议

Java 和 JavaScript 的关系犹如“北大”和“北大青鸟”,只是名字相似,但是两种完全不同的编程语言。

Python

Python 是一种解释型、交互式、面向对象的编程语言。它设计哲学强调代码的可读性,允许开发者用少量代码表达想法,支持多种编程范式,包括面向过程、面向对象和函数式编程。Python 具有以下几个主要特点:

  1. 易于学习:Python 语法简单明了,使得初学者能够迅速上手,编写出实用的程序。
  2. 代码可读性高:Python 语法设计使得代码易于阅读和理解,这对于团队协作和代码维护非常有利。
  3. 丰富的标准库和第三方库:Python 提供了大量的内置模块和函数,可以满足基本编程需求。此外,还有大量的第三方库可供使用,覆盖了从 Web 开发、数据分析到机器学习等各个领域。
  4. 跨平台:Python 可以在多种操作系统上运行,包括 Windows、Linux 和 macOS 等。
  5. 免费和开源:Python 是一种免费且开源的编程语言,这意味着你可以自由地使用、修改和分发 Python。
  6. 应用领域广泛:Python 被广泛应用于 Web 开发、数据分析、人工智能、脚本编写、科学计算等多个领域。例如,Python 是数据科学领域非常流行的语言,因为它有强大的数据处理和分析库,如 NumPy、Pandas 和 Matplotlib 等。
  7. 可扩展性:Python 可以调用 C、C++ 编写的代码,也可以在 C、C++ 中嵌入 Python 代码。

Python

Golang

Golang,又称 Go,是 Google 开发的一种开源的静态强类型、编译型语言。它的设计哲学强调简单、直接和高效,旨在提供一种简洁而强大的方式来表达编程思想。Golang 自推出以来,已经吸引了大量的开发者,并在多个领域得到了广泛的应用。以下是 Golang 的主要特点:

  1. 简洁的语法:Golang 的语法清晰、直观,减少了冗余和复杂性,使得代码更加易读和易写。这对于初学者来说非常友好,同时也有助于提高开发效率。
  2. 强大的并发编程支持:Golang 内置了并发编程的支持,通过轻量级的协程(goroutines)和通道(channels)来实现高效的并发处理。这使得开发者可以更容易地编写出高性能、高并发的应用程序。
  3. 高效的垃圾回收机制:Golang 具有一个高效的垃圾回收器,能够自动管理内存,减轻了开发者的负担。开发者无需担心内存泄漏和手动管理内存的问题,可以更加专注于业务逻辑的实现。
  4. 静态类型系统:Golang 采用静态类型系统,这意味着在编译时就能捕获类型错误,提高了代码的可靠性和稳定性。同时,静态类型也有助于提高代码的可读性和可维护性。
  5. 内置的包管理工具:Golang 内置了包管理工具(如go mod),方便开发者管理项目的依赖关系。这有助于保持代码的整洁和一致性,也提高了团队协作的效率。
  6. 跨平台支持:Golang 具有良好的跨平台支持特性,可以在多个操作系统和架构下运行。这使得开发者能够更容易地将应用程序部署到不同的环境中。
  7. 丰富的标准库和第三方库:Golang 的标准库提供了大量的常用功能和工具,可以满足基本的编程需求。同时,也有大量的第三方库可供使用,覆盖了从 Web 开发、数据处理到机器学习等各个领域。
  8. 快速编译:Golang 的编译速度相对较快,这使得在开发过程中能够快速迭代和测试代码。

image-20240319140639082

特点总结

最后,我们总结一下高级语言的一些共同特点:

  • 远离硬件:高级语言距离计算机硬件通常都比较远,而且屏蔽了底层的硬件细节(比如,内存管理、数据类型处理、硬件资源管理等都是自动完成),所以开发人员不需要关心具体的硬件实现。
  • 语法简洁:高级语言提供了更高的抽象层次,语法更接近自然语言和数学公式。例如,在 Python 中,a + b 可能涉及背后许多复杂的操作,但对程序员来说,语法非常简洁直观。
  • 执行效率低:计算机硬件不能直接执行高级语言,运行程序时需要经过编译器或解释器将代码转换为机器能够执行的低级语言才能被计算机硬件执行,所以其执行效率不如低级语言高。
  • 开发效率高:高级语言的语法设计接近自然语言和数学公式,相比起低级语言,更利于理解、阅读和开发。
  • 可移植性强:高级语言提供了硬件无关的抽象,程序编写后可以在多种不同平台上运行(前提是目标平台有相应的编译器或解释器)。例如,Java 使用 JVM(Java 虚拟机)来实现“编写一次,运行多次”的理念,而 Python 和 JavaScript 跨平台兼容性也很强。
  • 语言适用场景:高级语言因其抽象性高、开发效率高,适用于许多不同的场景,包括应用程序开发、自动化和脚本编写、游戏开发、数据科学和人工智能、科研与教育等领域。

建议

每种语言都有其特定的用途和发展轨迹,选择合适的编程语言对于项目开发和实际应用至关重要。