当前位置: 首页 > news >正文

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

目录

一、代码运行的过程

二、跨平台的实现

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++开始,它是其他高级语言的思想根基。而且以后编程终将会成为每个人的通用技能,就如开车一样,它本身也不是一项高深的技术,只是辅助我们工作的一项工具。所有打好基础是关键,再学习任何一种语言都会很便捷。

相关文章:

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

目录 一、代码运行的过程 二、跨平台的实现 1)C/C 2)C# 3)Java 三、总结 一、代码运行的过程 开发程序无论使用何种编程语言,至少都需要经历编码、编译、连接和运行这么4个过程,C语言是这样,Java语言…...

MySQL MHA 部署全攻略:从零搭建高可用数据库架构

文章目录 1.MHA介绍2.MHA组件介绍3.集群规划4.服务器初始化5.MySQL集群部署5.1 安装MySQL集群5.2 配置一主两从5.3 测试MySQL主从5.4 赋予MHA用户连接权限 6.安装MHA环境6.1 安装MHA Node6.2 安装MHA Manager 7.配置MHA环境8.MySQL MHA高可用集群测试8.1 通过VIP连接MySQL8.2模…...

windows怎样查看系统信息(处理器等)

首先打开命令行工具 win R 输入 cmd, 输入 msinfo32 ,然后回车 这个页面就可以看到 电脑的锐龙版就是 AMD 芯片 酷睿版就是 intel 芯片...

007 HBuilderX提示IDE service port disabled. To use CLI Call, open IDE

描述 微信小程序 工具的服务端口已关闭 解决方案 在HBuider的菜单“运行”选择“运行到小程序模拟器-微信开发者工具”时,步骤如图: 提示:IDE service port disabled. To use CLI Call, open IDE -> Settings -> Security Settings,…...

计算机网络之TCP的可靠传输

上一篇内容可能比较多,显得比较杂乱,这一篇简单总结一下TCP是靠什么实现可靠传输的吧。 校验和 TCP是端到端的传输,由发送方计算校验和,接收方进行验证,目的是为了验证TCP首部和数据在发送过程中没有任何改动&#x…...

Python爬虫系列教程之第十四篇:爬虫项目部署、调度与监控系统

大家好,欢迎继续关注本系列爬虫教程! 在前面的文章中,我们已经详细讲解了如何构建爬虫、如何处理反爬、如何实现分布式爬虫以及如何使用 Scrapy 框架开发高效的爬虫项目。随着项目规模的不断扩大,如何将爬虫项目稳定部署到生产环境…...

线程与进程的深入解析及 Linux 线程编程

在操作系统中,进程和线程是进行并发执行的两种基本单位。理解它们的区别和各自的特点,能够帮助开发者更好地进行多任务编程,提高程序的并发性能。本文将探讨进程和线程的基础概念,及其在 Linux 系统中的实现方式,并介绍…...

在ubuntu上用Python的openpyxl模块操作Excel的案例

文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前,需…...

【OS安装与使用】part6-ubuntu 22.04+CUDA 12.4运行MARL算法(多智能体强化学习)

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 下载源码并安装2.2.2 安装缺失的依赖项2.2.3 训练执行MAPPO算法实例 三、疑问四、总结 一、待解决问题 1.1 问题描述 已配置好基础的运行环境,尝试运行MARL算法。 1…...

【Python爬虫(35)】解锁Python多进程爬虫:高效数据抓取秘籍

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…...

HarmonyOS 开发套件 介绍 ——上篇

HarmonyOS 开发套件 介绍 ——上篇 在当今科技飞速发展的时代,操作系统作为智能设备的核心,其重要性不言而喻。而HarmonyOS,作为华为推出的全新操作系统,正以其独特的魅力和强大的功能,吸引着越来越多的开发者和用户的…...

Linux 高级篇 日志管理、定制自己的Linux系统、备份与恢复

一、日志管理 (1)基本介绍 日志文件是重要的系统信息文件,记录了如用户登录、系统启动、系统安全、邮件及各种服务等相关重要系统事件在安全方面,日志也至关重要,它能记录系统日常发生的各类事情,可用于检…...

deepseek与其他大模型配合组合

DeepSeek与其他大模型的配合组合,展现了其在多个领域中的强大应用潜力和灵活性。以下是对DeepSeek与其他大模型配合组合的详细分析: 一、DeepSeek与华知大模型的组合 背景介绍: 华知大模型是同方知网与华为联手打造的,具备全学科…...

经验分享—WEB渗透测试中遇到加密内容的数据包该如何测试!

经验分享—WEB渗透测试中遇到加密内容的数据包该如何测试! 01 加解密的意义 现阶段的渗透测试让我发现越来越多的系统不只是在漏洞修补方面做了功夫,还对一些参数进行加密,干扰爬虫或者渗透测试的进行。 在我小白阶段看到下图这种加密方式…...

JUC并发—9.并发安全集合四

大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 4.JUC的各种阻塞队列介绍 (1)基于数组的阻塞…...

JSON格式,C语言自己实现,以及直接调用库函数(一)

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。以下为你提供不同场景下常见的 JSON 格式示例。 1. 简单对象 JSON 对象是由键值对组成,用花括号 {} 包裹&…...

MinkowskiEngine安装(CUDA11.8+torch2.0.1+RTX4070TI)

1、背景 1)因为项目要用这个库:MinkowskiEngine,Minkowski Engine — MinkowskiEngine 0.5.3 documentation 然后就用了之前安装好 MinkowskiEngine 的torch1.8.1,cuda11.1的环境。 2)自己的代码出现cuda不支持torch用gpu进行矩…...

Spring监听器Listener

目录 1、Spring监听器简介 2、事件(Event) 3、监听器(Listener) 3、事件发布器 4、监听器使用 4.1、自定义事件 4.2、自定义监听器 4.3、发布事件 4.4、测试 4.5、使用注解方式监听 4.6、异步事件处理 5、总结 1、Spri…...

【深度学习在图像配准中的应用与挑战】

图像配准在深度学习中的解决方案越来越多,尤其是通过卷积神经网络(CNN)和生成对抗网络(GAN)等方法,可以显著提升图像配准的效果,尤其是在处理复杂的非刚性变换和大范围的图像差异时。 1. 基于深…...

使用 Docker-compose 部署 MySQL

使用 Docker Compose 部署 MySQL 本文将详细指导如何使用 docker-compose 部署 MySQL,包括基本配置、启动步骤、数据持久化以及一些高级选项。通过容器化部署 MySQL,你可以快速搭建一个隔离的数据库环境,适用于开发、测试或小型生产场景。 关…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如&#xff1a…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...