对学习编程语言的一些理解

news/2025/2/22 11:58:46

目录

一、代码运行的过程

二、跨平台的实现

1)C/C++

2)C#

3)Java

三、总结 


一、代码运行的过程

        开发程序无论使用何种编程语言,至少都需要经历编码、编译、连接和运行这么4个过程,C语言是这样,Java语言也是这样。而需要开发人员具体实施的只有编码这个过程,其它都是交由计算机自动执行。对应这4个过程,也就有对应的工具。

        编码有很多可用工具,最简单的就是记事本,毕竟我们的代码文件就是文本文件。然而我们很少会使用记事本来编写代码,因为它的效率太低,除了能写文本外,不能给我们任何其他的辅助。因此,我们常用长多其他的编码工具,比如VS、PyCharm、idea等等,这些工具在我们编码过程中会根据不同语言的语法特征给我们大量提示信息,极大提高编码效率。

        每一种编程语言都有其对应的编译工具,编译就是将我们写的文本代码使用编译工具翻译成计算机能够识别的机器码。这个过程由编译工具去实现,比如gcc、g++、javac等这些编译工具。编译工具对应编程语言,同时也要适配不同的操作系统。同一种语言的编译工具在widows和Linux系统下是不一样的,他们互不兼容。因为不同操作系统提供的API接口实现是不一样的,我们写的应用程序必然要在操作系统上运行,需要调用操作系统提供的各类接口函数。

       连接就是将我们编写的程序在运行时需要调用的外部依赖与本程序关联起来。这些依赖存在于电脑操作系统中,他们是编译好的库文件,比如windows下的.dll,Linux下的.o文件等。连接过程会自动去寻找所需依赖文件的位置。

       运行,当我们运行编写的代码时,其实是在上述过程完成后,计算机真正开始执行程序。这是完全由计算机操作系统控制的,它执行的是编译完成后的二进制文件,并在执行过程中根据需要调用本地的库文件。即使在相同的电脑和操作系统下,也不要期望我们所编写的程序能够在另一台电脑百分百能运行。如果你把文本代码复制到另一台电脑,另一台电脑可能没有安装对应的编译器,那么它就不能编译代码,更不能运行你所编写的程序。如果你把编译完成的字节码文件复制到另一台电脑,另一台电脑可能因为缺失部分依赖库文件也同样无法运行。这时,我们也许会想到我们在安装一些常用软件时,并没有遇到过这种情况。这是因为这些软件安装包已经将编译好的字节码和运行所需要的依赖文件统一打包在了软件安装包里,我们在安装软件时就自动为软件的运行配置好了所需环境。

二、跨平台的实现

       让代码在不同的操作系统平台上运行是很有必要的,但这不是开发人员来实现的。前面已经说明,不同的操作系统底层实现是不一样的。程序跨平台运行不能绕开操作系统。其实对编程语言的跨平台运行,需要指明是在哪个层面。如果说指的是编译完成后的可执行程序,可以在任意一个平台编译,所有平台运行,那目前所有的编程语言都是实现不了的。如果说是代码层面的跨平台,那么几乎所有语言都可以实现跨平台,即同样一套代码可以在不同的操作系统上进行编译,当然有的还是会需要做一些小的改动。还有一种就是使用基本框架隔离操作系统,实现程序的跨平台运行。现就常见的几种语言谈谈自己的理解。

1)C/C++

       C/C++几乎是所有高级语言的基础,语法规则最难,精通C/C++后再去学习其他语言真的是易如反掌,这也是为什么现在大学的计算机语言入门仍然要求从C开始。windows和Linux等所有系统均支持C。然而它跨平台的实现是代码层面的,它需要在不同平台上编译后才能运行,并且可能需要做一些细节的改动。目前基于C++的QT框架在这个层面的跨平台实现很好,如果不调用一些特殊的类库,可以实现一套QT代码无需改动在Windows和Linux系统上编译运行。而且在Linux系统上开发图形应用程序使用最广泛的还是QT,特别是在国产化要求背景下。

2)C#

      C#跨平台运行是基于基本框架实现的。对与C#而言,不论是Windows还是Linux系统,均需要安装.net框架才能运行C#开发的程序。.net框架为C#程序运行提供了一个中间件,隔离了操作系统的影响,对操作系统API的调用由框架实现,从而开发人员不需要去关心与操作系统的直接交互操作。

3)Java

        Java的跨平台思想也是基于基本框架实现的,但Java的实现早于C#。使用Java编写的程序也不是直接运行于操作系统上的,Java与操作系统的关系如下图所示。在电脑操作系统之上需要安装一个Java程序运行环境,也就是JRE,它由Java虚拟机(JVM)、核心类库和java启动程序3部分构成。JRE是运行java程序的基础,不论是开发环境下,还是在程序部署环境下,要运行java开发的程序均需要安装JRE。在JRE之上是java字节码文件,这个文件之上就是开发人员所编写的java程序代码。

       通常我们编译java程序代码时,生成的编译结果就是java字节码,即以.class为后缀名的文件。我们通常说的java程序跨平台运行就是指的这个字节码文件可以拷贝到不同的操作系统下运行,前提是操作系统已安装的适配的JRE。java程序的真正运行是由java虚拟机(JVM)来控制的。这也是java实现跨平台的思想,它确实可以实现一次编译,多平台运行,但是编译生成的字节码文件并不是传统意义上理解的可执行程序。字节码文件并不是计算机可执行的机器码,它还需要在JRE中作进一步翻译。我们可以理解java初次编译生成的字节码为中间件,或者说是半成品。

三、总结 

        每种编程语言都有自己的优势,越是高级、最新的语言,学习越简单,开发效率越高。但个人认为C/C++仍然是所有高级语言的基础。很多人在学习编程时纠结该学哪一种语言,个人建议入门就应该从C/C++开始,它是其他高级语言的思想根基。而且以后编程终将会成为每个人的通用技能,就如开车一样,它本身也不是一项高深的技术,只是辅助我们工作的一项工具。所有打好基础是关键,再学习任何一种语言都会很便捷。


http://www.niftyadmin.cn/n/5862225.html

相关文章

快速入门——第三方组件element-ui

学习自哔哩哔哩上的“刘老师教编程”,具体学习的网站为:10.第三方组件element-ui_哔哩哔哩_bilibili,以下是看课后做的笔记,仅供参考。 第一节 组件间的传值 组件可以有内部Data提供数据,也可由父组件通过prop方式传…

泛微OA编写后端Rest接口

泛微OA编写后端Rest接口 前言 具体实现 运行结果 注意要点 总结 前言 在泛微E9中,可以通过注解的方式来编写对外的接口,之前的版本都是通过编写servlet类,然后在web.xml文件中将这个类和访问路径进行编辑之后才好在浏览器中通过输入对应…

MySQL 安装过程记录以及安装选项详解

目录 简述 1. 安装MySQL之前 1.1 下载地址 1.2 过滤组件 2. 选择安装组件 2.1 可选组件介绍 2.2 安装过程记录 2.2.1 认证界面说明 2.2.2 服务选项说明 2.2.3 服务器文件权限 2.2.4 应用配置说明 简述 本文主要是介绍如何安装MySQL Community Server 9.2 Innovatio…

动态存储斐波那契数列(递归优化)

递归 递归是c当中一种自身调用自身的算法。 普通递归解决斐波那契数列问题 #include<iostream> using namespace std; int f(int n){int sum;if(n<2){sum1;}else{sumf(n-1)f(n-2);}return sum; } int main() {int n;cin>>n;cout<<f(n);return 0;}当数据…

Mac book Air M2 用VMware安装 Ubuntu22.04

安装 VMware Fusion 下载 Ubuntu 安装VMware 完成之后运行新建 将对应Ubuntu 版本拖拽 如图 选择第一个回车 选绿色 回车 为空 相关命令行 sudo apt install net-tools sudo apt install ubuntu-desktop sudo reboot 常用命令行 uname uname -a clear ll ifconfig (查…

想象一个AI保姆机器人使用场景分析

把我的一个想象AI保姆机器人使用场景用DeepSeek和Kimi进行深度思考&#xff0c;下面2张图分别是kimi和ds的思维链。我觉得ds的总结一如既往的优秀。 关于AI是否具备智慧的判断与伦理反思 一、AI的“智慧”本质&#xff1a;能力与局限 当前AI的技术边界 无自主意识&#xff1…

计算机视觉基础|从 OpenCV 到频域分析

一、引言 在当今数字化时代&#xff0c;图像处理已渗透到我们生活的方方面面&#xff0c;从日常使用的智能手机拍照美化&#xff0c;到医学领域的精准诊断&#xff0c;再到自动驾驶中的环境感知&#xff0c;其重要性不言而喻。在图像处理领域中&#xff0c;OpenCV 和频域分析&…

【Vue.js 和 React.js 的主要区别是什么?】

Vue.js 和 React.js 的主要区别是什么&#xff1f; 前言 Vue.js 和 React.js 是当前最流行的两个前端框架&#xff0c;它们都用于构建用户界面&#xff0c;但在设计理念、语法和使用方式上有显著差异。本文将从多个维度对比 Vue.js 和 React.js 的主要区别&#xff0c;帮助开…