对学习编程语言的一些理解
目录
一、代码运行的过程
二、跨平台的实现
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 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...

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,你可以快速搭建一个隔离的数据库环境,适用于开发、测试或小型生产场景。 关…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...