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

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...