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

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...