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

Rust 学习笔记:编程语言的相关概念

Rust 学习笔记:编程语言的相关概念

  • Rust 学习笔记:编程语言的相关概念
    • 动态类型 vs 静态类型
      • 动态类型 (Dynamically Typed)
      • 静态类型 (Statically Typed)
      • 对比
      • 示例
    • 强类型 vs 弱类型
      • 强类型 (Strongly Typed)
      • 弱类型 (Weakly Typed)
      • 对比
      • 示例
    • 编译型语言 vs 解释型语言
      • 编译型语言 (Compiled Languages)
      • 解释型语言 (Interpreted Languages)
      • 对比
      • 混合使用编译和解释机制的语言
        • 中间代码(字节码) + 虚拟机执行
        • 即时编译(JIT)与解释器的混合模式
        • 提前编译(AOT)与中间代码
    • 总结

Rust 学习笔记:编程语言的相关概念

参考视频:

  1. https://www.bilibili.com/video/BV14J11YoE7
  2. https://www.bilibili.com/video/BV1Y227YtETA

动态类型 vs 静态类型

动态类型 (Dynamically Typed)

定义:变量类型在运行时确定,且类型可以随时改变。

特点:

  • 不需要显式声明变量类型(例如 Python、JavaScript)。

  • 更灵活,适合快速开发。

  • 错误可能在运行时暴露(例如尝试对字符串进行数值运算)。

静态类型 (Statically Typed)

定义:变量类型在编译时确定,且类型不可随意改变。

特点:

  • 需要显式声明变量类型(例如 Java、C++)。

  • 类型错误在编译阶段就能发现,安全性更高。

  • 需要更多代码量,但性能通常更优。

对比

在这里插入图片描述

示例

在这里插入图片描述

强类型 vs 弱类型

强类型 (Strongly Typed)

定义:语言严格限制类型间的隐式转换,要求显式类型转换。

特点:

  • 类型错误会直接导致失败,而非自动转换。

  • 代码更安全,但需要更多显式操作。

弱类型 (Weakly Typed)

定义:语言允许隐式的类型转换,自动尝试兼容操作。

特点:

  • 灵活性高,但可能隐藏潜在错误。

  • 代码更简洁,但可读性可能降低。

对比

在这里插入图片描述

示例

在这里插入图片描述

编译型语言 vs 解释型语言

编译型语言 (Compiled Languages)

源代码需要先通过编译器(Compiler) 转换为机器码(二进制文件),生成独立的可执行文件(如 .exe),然后直接由操作系统运行。编译过程是提前完成的。

优点:

  • 执行速度快:直接运行机器码,无需翻译过程。

  • 安全性高:源代码被编译为二进制文件,隐藏原始代码逻辑。

  • 资源占用低:适合系统级开发(如操作系统、嵌入式)。

缺点:

  • 开发效率低:需编译后才能运行,调试周期长。

  • 跨平台性差:不同操作系统需要重新编译(如 Windows 和 Linux 的二进制文件不兼容)。

解释型语言 (Interpreted Languages)

源代码由解释器(Interpreter) 逐行读取并实时翻译成机器码执行,不生成独立的可执行文件。每次运行都需要解释器参与。

优点:

  • 跨平台性强:只需对应平台的解释器,代码无需修改。

  • 开发效率高:修改代码后可直接运行,无需编译。

  • 适合脚本和快速迭代(如 Web 开发、自动化脚本)。

缺点:

  • 执行速度慢:边翻译边执行,额外开销大。

  • 依赖解释器环境:用户需安装解释器才能运行代码。

对比

在这里插入图片描述

混合使用编译和解释机制的语言

这类语言结合了编译型和解释型的优点,通常分为 3 种实现方式。

中间代码(字节码) + 虚拟机执行

源代码先被编译为一种中间代码(字节码、IR),而不是直接生成机器码。

中间代码由虚拟机(VM)或运行时环境(Runtime)解释执行,或通过即时编译(JIT)转为机器码执行。

典型代表:Java(字节码 + JVM)、C#(CIL + CLR)、Python(.pyc 文件 + Python 虚拟机)。

即时编译(JIT)与解释器的混合模式

语言运行时(如 JavaScript 引擎、Python 解释器)结合解释器和 JIT 编译器。

初始阶段时,解释器逐行执行代码(快速启动),然后对频繁执行的代码(热点代码)进行 JIT 编译,生成机器码加速后续执行。

典型代表:JavaScript(V8 引擎)、Python(PyPy)、Lua(LuaJIT)。

提前编译(AOT)与中间代码

一些语言支持提前编译为与平台无关的中间代码,再根据不同平台生成最终机器码。

例如 .NET/C# 将 C# 代码编译为机器码,避免依赖 CLR 运行时。

步骤一:开发者将源码编译成中间代码,发给用户。

在这里插入图片描述

步骤二:CLR 在运行时执行代码,将中间代码即时编译成机器语言。CLR 还负责内存管理、垃圾回收等运行时资源管理,确保程序高效、安全地运行。

在这里插入图片描述

总结

Rust 是静态强类型的编译型语言,不那么灵活,但足够安全。

在这里插入图片描述

相关文章:

Rust 学习笔记:编程语言的相关概念

Rust 学习笔记:编程语言的相关概念 Rust 学习笔记:编程语言的相关概念动态类型 vs 静态类型动态类型 (Dynamically Typed)静态类型 (Statically Typed)对比示例 强类型 vs 弱类型强类型 (Strongly Typed)弱类型 (Weakly Typed)对比示例 编译型语言 vs 解…...

react nativeWebView跨页面通信

场景 react native项目里,有一些移动端的应用喜欢使用h5来开发,会出现需要跨tab和跨页面通信的场景,可以使用pubsub-js来实现通信。 实现思路 在react native 层实现pubsub的公共API,提供订阅消息、发布消息、取消订阅接口&…...

Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素

目录 一、背景与意义‌二、class与id的基础概念与语法规则‌2.1 什么是class与id?‌2.2 核心区别总结 三、应用场景与实战案例‌3.1 场景1:CSS样式管理‌3.2 场景2:JavaScript交互‌3.3 场景3:SEO优化与语义化‌ 四、常见误区与最…...

BGE(BAAI General Embedding)模型详解

BGE(BAAI General Embedding)模型详解 BGE(BAAI General Embedding)是北京智源人工智能研究院(BAAI)推出的通用文本嵌入模型系列,旨在为各种自然语言处理任务提供高质量的向量表示。 一、BGE模…...

【Linux网络】应用层自定义协议与序列化及Socket模拟封装

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...

Rust项目GPG签名配置指南

Rust项目GPG签名配置指南 一、环境准备 # 安装Gpg4win(Windows) winget install -e --id GnuPG.Gpg4win二、密钥生成与配置 # 生成RSA4096密钥 gpg --full-generate-key # 类型选RSA and RSA,长度4096,邮箱填z3266420686202216…...

6.第六章:数据分类的技术体系

文章目录 6.1 数据分类的技术架构6.1.1 数据分类的整体流程6.1.2 数据分类的技术组件6.1.2.1 数据采集与预处理6.1.2.2 特征工程与选择6.1.2.3 分类模型构建6.1.2.4 模型评估与优化6.1.2.5 分类结果应用与反馈 6.2 数据分类的核心技术与算法6.2.1 传统机器学习算法6.2.2 深度学…...

Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?

Nginx 反向代理的理解与配置 User 我打包了我的前端vue项目,上传到服务器,在宝塔面板安装了nginx服务,配置了文件 nginx.txt .运行了项目。 我想清楚,什么是nginx反向代理?是nginx作为一个中介?中间件来集…...

下篇:深入剖析 BLE GATT / GAP / SMP 与应用层(约5000字)

引言 在 BLE 协议栈的最上层,GAP 定义设备角色与连接管理,GATT 构建服务与特征,SMP 负责安全保障,应用层则承载具体业务逻辑与 Profile。掌握这一层,可实现安全可靠的设备发现、配对、服务交互和定制化业务。本文将详解 GAP、GATT、SMP 三大模块,并通过示例、PlantUML 时…...

Linux Awk 深度解析:10个生产级自动化与云原生场景

看图猜诗,你有任何想法都可以在评论区留言哦~ 摘要 Awk 作为 Linux 文本处理三剑客中的“数据工程师”,凭借字段分割、模式匹配和数学运算三位一体的能力,成为处理结构化文本(日志、CSV、配置文件)的终极工具。本文聚…...

无人设备遥控之调度自动化技术篇

无人设备遥控器的调度自动化技术是现代科技发展的重要成果,它通过集成先进的通信、控制、传感器及人工智能技术,实现了对无人设备的高效、精准调度与自动化管理。 一、核心技术 无线通信技术 调度自动化依赖于高速、稳定的无线通信网络(如5…...

STM32F407 HAL库使用 DMA_Normal 模式实现 UART 循环发送(无需中断)

在 STM32 开发中,很多人喜欢使用 DMA 来加速串口发送数据。然而,默认的 DMA 往往配合中断或使用循环模式(DMA_CIRCULAR)使用。但在某些特定需求下,我们希望: 使用 DMA_NORMAL 模式,确保 DMA 每次…...

汽车自动驾驶介绍

0 Preface/Foreword 1 介绍 1.1 FSD FSD: Full Self-Driving,完全自动驾驶 (Tesla) 1.2 自动驾驶级别 L0 - L2:辅助驾驶L3:有条件自动驾驶L4/5 :高度/完全自动驾驶...

Uniapp-小程序从入门到精通

沉淀UNIAPP项目精华模版 ******************************************************************************************************************************************* 1、数据库的导入SQL **************************************************************************…...

深度剖析操作系统核心(第一节):从X86/ARM/MIPS处理器架构到虚拟内存、分段分页、Linux内存管理,再揭秘进程线程限制与优化秘籍,助你成为OS高手!

文章目录 OS处理器X86ARMMIPSPowerPC 内存管理虚拟内存内存分段内存分页段页式内存管理Linux 内存管理 OS 处理器 常见处理器有X86、ARM、MIPS、PowerPC四种。 X86 X86架构是芯片巨头Intel设计制造的一种微处理器体系结构的统称。如果这样说你不理解,那么当我说…...

基于 EFISH-SBC-RK3588 的无人机通信云端数据处理模块方案‌

一、硬件架构设计‌ ‌核心计算单元(EFISH-SBC-RK3588)‌ ‌异构计算能力‌:搭载 8 核 ARM 架构(4Cortex-A762.4GHz 4Cortex-A551.8GHz),集成 6 TOPS NPU 与 Mali-G610 GPU,支持多任务并行处理…...

Unity 内置Standard Shader UNITY_BRDF_PBS函数分析 (二)

四、BRDF1_Unity_PBS // 主物理基BRDF实现 // 基于Disney工作并以Torrance-Sparrow微面模型为基础 // 公式: // BRDF kD / π kS * (D * V * F) / 4 // I BRDF * (N L) // // * NDF(法线分布函数)可根据 UNITY_BRDF_GGX 选择&#…...

GitHub万星项目维护者分享:开源协作的避坑指南

GitHub万星项目维护者分享:开源协作的避坑指南 ——开发者张三与237个文件改动PR的五年战争 序幕:深夜的炸弹 2019年夏天,张三维护的开源项目TerminalX刚突破8000星,一个标题猩红的PR突然弹出:“彻底重构&#xff0…...

Linux基础篇、第四章_01软件安装rpm_yum_源码安装_二进制安装

Linux基础篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! ————laowang 基础命令:rpm、yum、源码安装、二进制安装 一、rpm本地安装: (无需网络安装,无法解决软件依赖) rpm -ivh …...

焊接机排错

焊接机 一、前定位后焊接 两个机台,①极柱定位,相机定位所有极柱点和mark点;②焊接机,相机定位mark点原理:极柱定位在成功定位到所有极柱点和mark点后,可以建立mark点和极柱点的关系。焊接机定位到mark点…...

4.2 Prompt工程与任务建模:高效提示词设计与任务拆解方法

提示词工程(Prompt Engineering)和任务建模(Task Modeling)已成为构建高效智能代理(Agent)系统的核心技术。提示词工程通过精心设计的自然语言提示词(Prompts),引导大型语…...

oracle 锁的添加方式和死锁的解决

DML锁添加方式 DML 锁可由一个用户进程以显式的方式加锁,也可通过某些 SQL 语句隐含方式实现。 DML 锁有三种加锁方式:共享锁方式、独占锁方式、共享更新。 共享锁,独占锁用于 TM 锁,共享锁用于 TX 锁。 1)共享方式的表级锁 共享方…...

Nginx 二进制部署与 Docker 部署深度对比

一、核心概念解析 1. 二进制部署 通过包管理器(如 apt/yum)或源码编译安装 Nginx,直接运行在宿主机上。其特点包括: 直接性:与操作系统深度绑定,直接使用系统库和内核功能 。定制化:支持通过…...

以太网的mac帧格式

一.以太网的mac帧 帧的要求 1.长度 2.物理层...

每日算法-250424

每日算法打卡 (24/04/25) - LeetCode 2971 & 1647 记录一下今天解决的两道 LeetCode 题目 2971. 找到最大周长的多边形 题目 思路 贪心 一个基本的多边形构成条件是:最长边必须小于其他所有边的长度之和。 为了找到周长最大的多边形,我们应该尽可能…...

在本地部署n8n:完整指南

n8n是一个强大的工作流自动化工具,可以帮助你连接不同的应用程序和服务,无需编写复杂的代码。本指南将带你完成在本地计算机上部署n8n的完整过程。 什么是n8n? n8n(发音为"n-eight-n")是一个开源的工作流自…...

棋盘格角点检测顺序问题

文章目录 前言一、OpenCV函数测试二、原因分析三、libcbdetect修改总结 前言 棋盘格角点检测在相机拼接、机械臂手眼标定中等应用很广泛,通常也要求尽量各种角度摆放从而保证标定精度。然后就自然想到了这个问题:如果棋盘格任意角度摆放怎么能对应上角点…...

C++之类和对象:定义,实例化,this指针,封装

C语言是面向过程的&#xff0c;C是面向对象的&#xff0c;利用对象交互&#xff0c;接口完成事情。 类的定义&#xff1a; 我们在C语言中可以用struct创建自定义结构体&#xff0c;在C中可以在结构体中定义函数了&#xff0c;这种就被称为类。 #include<iostream> usi…...

Ubuntu系统下交叉编译iperf3

一、参考资料 Linux下iperf3移植到arm下测试100M网口-CSDN博客 Iperf3移植到ARM Linux及使用教程-CSDN博客 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编…...

游戏引擎学习第243天:异步纹理下载

仓库 https://gitee.com/mrxiao_com/2d_game_6 https://gitee.com/mrxiao_com/2d_game_5 回顾并为今天设定阶段 目前的开发工作主要回到了图形渲染相关的部分。我们之前写了自己的软件渲染器&#xff0c;这个渲染器性能意外地好&#xff0c;甚至可以以相对不错的帧率运行过场…...

27、Session有什么重⼤BUG?微软提出了什么⽅法加以解决?

Session的重大BUG 1、进程回收导致Session丢失 原理&#xff1a; IIS的进程回收机制会在系统繁忙、达到特定内存阈值等情况下&#xff0c;自动回收工作进程&#xff08;w3wp.exe&#xff09;。由于Session数据默认存储在进程内存中&#xff0c;进程回收时这些数据会被清除。 …...

机器学习在网络安全中的应用:守护数字世界的防线

一、引言 随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为全球关注的焦点。传统的网络安全防护手段&#xff0c;如防火墙、入侵检测系统&#xff08;IDS&#xff09;和防病毒软件&#xff0c;虽然在一定程度上能够抵御攻击&#xff0c;但在面对复杂多…...

从数据到智慧:解密机器学习的自主学习密码

在数字洪流奔涌的时代&#xff0c;每一次点击、每一行代码、每一条传感器数据都在生成海量信息。传统编程如同精心设计的齿轮组&#xff0c;需要工程师逐行编写规则&#xff1b;而机器学习则打破这一范式&#xff0c;赋予机器从数据中自主提炼规律、总结模式的超能力。这种能力…...

Trae或者VsCode无法识别相对路径(不自动切换工作目录)

在VsCode中或者Trae中&#xff0c;只要是在vscode的基础上修改得到的编辑器&#xff0c;都默认没有勾选自动选择当前文件路径为工作路径&#xff0c;因此需要手动修改工作路径或者设置&#xff0c;否则无法识别相对路径&#xff0c;PyCharm中就不会出现这种问题。 解决方法&…...

解决VSCode每次SSH连接服务器时,都需要下载vscode-server

如下图所示&#xff0c;本地下载或者在服务器终端上运行wget指令获得vscode服务器包 注意&#xff0c;解压完成后&#xff0c;需要修改文件名为你本地vscode的commit ID...

架构-系统工程与信息系统基础

一、系统工程核心知识 1. 系统工程定义 本质&#xff1a;一种组织管理技术&#xff0c;从整体出发分析系统要素&#xff08;组成、结构、信息流、控制机制&#xff09;&#xff0c;追求“整体最优”&#xff0c;借助计算机实现规划、设计、管理、控制的优化。目标&#xff1a…...

矩阵运算和线性代数操作开源库

用于矩阵运算和线性代数操作常用的开源库推荐&#xff0c;涵盖不同编程语言和硬件平台&#xff1a; C/C 库 Eigen 特点&#xff1a;高性能的模板库&#xff0c;支持矩阵/向量运算、线性求解、特征值计算等&#xff0c;无需依赖外部BLAS/LAPACK。 官网&#xff1a;https://eig…...

无标注文本的行业划分(行业分类)算法 —— 无监督或自监督学习

对于无标注文本的行业划分&#xff08;行业分类&#xff09;&#xff0c;属于典型的无监督或自监督学习任务。以下是几种常见的算法方法及实现思路&#xff0c;适用于缺乏标注数据的场景&#xff1a; 一、基于关键词匹配的规则方法 核心思想&#xff1a;通过预定义的行业关键…...

电子病历高质量语料库构建方法与架构项目(计划篇)

电子病历(EMR)作为医疗信息化的重要产物,包含了丰富的医疗信息和临床知识,是辅助临床决策、药物挖掘和医学研究的重要资源。然而,电子病历数据具有非结构化、噪声大、专业性强等特点,如何构建高质量电子病历语料库成为医疗自然语言处理领域的核心挑战。本全计划将从项目背景…...

什么混合检索?在基于大模型的应用开发中,混合检索主要解决什么问题?

混合检索的定义 混合检索(Hybrid Retrieval)是一种结合多种检索技术优势的信息检索方法,旨在通过整合不同检索策略提升检索系统的准确性、召回率和适应性。其核心思想是将基于关键词的检索(如BM25、TF-IDF)与基于语义的检索(如向量检索、深度学习模型)相结合,以应对单…...

优化uniappx页面性能,处理页面滑动卡顿问题

问题&#xff1a;在页面遇到滑动特别卡的情况就是在页面使用了动态样式或者动态类&#xff0c;做切换的时候页面重新渲染导致页面滑动卡顿 解决&#xff1a;把动态样式和动态类做的样式切换改为通过获取元素修改样式属性值 循环修改样式示例 bannerList.forEach((_, index)…...

Yocto meta-toradex-security layer 创建独立数据分区

By Toradex 胡珊逢 简介 Toradex 为其产品使用的软件系统如 Linux 提供了诸多的安全功能&#xff0c;例如 Secure Boot、分区加密、OP-TEE 等&#xff0c;帮助用户应对安全合规。这些功能可以通过在 Yocto Project 中添加由 Toradex 开发的 meta-toradex-securitylayer 被轻松…...

uniapp 安卓离线本地打包,Android Studio生成apk包

第一步&#xff1a;HbuilderX生成本地资源包 下载最新的SDK 下载完后压缩下来是这样的 将HbuilderX生成的复制到这里&#xff0c;替换 Android Studio引入下载的最新文件里的HBuilder-Integrate-AS目录 好&#xff0c;接下来开始修改配置 把你的证书签名&#xff…...

C语言教程(十四):C 语言指针详解

一、指针的基本概念 指针是一个变量&#xff0c;其值为另一个变量的内存地址。简单来说&#xff0c;指针指向了内存中的某个位置&#xff0c;通过指针可以间接访问该位置存储的数据。指针的使用可以让程序更加高效地处理数据&#xff0c;特别是在处理数组、动态内存分配等方面。…...

2025年04月24日Github流行趋势

项目名称&#xff1a;markitdown 项目地址url&#xff1a;https://github.com/microsoft/markitdown项目语言&#xff1a;Python历史star数&#xff1a;53,351今日star数&#xff1a;822项目维护者&#xff1a;afourney, gagb, sugatoray, PetrAPConsulting, l-lumin项目简介&a…...

切割PDF使用python,库PyPDF2

使用 Python 将大型 PDF 文件分割成多个小文件 理解任务 将一个 170M 的 PDF 文件分割成多个 10M 左右的小文件。这在处理大型 PDF 文件时非常有用&#xff0c;例如&#xff1a; 减少单个文件的大小&#xff0c;方便传输或存储分别处理不同的文件部分提高 PDF 处理的效率 选…...

网络IP冲突的成因与解决方案

网络IP冲突的成因与解决方案 一、IP冲突的常见现象与危害二、IP冲突的常见原因三、6种实用解决方案四、预防IP冲突的4个最佳实践五、总结 前言 肝文不易&#xff0c;点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子…...

python版本得数独游戏

python版本得数独游戏 游戏说明&#xff1a; 游戏使用9x9数独棋盘&#xff0c;.表示可填写的空格 输入格式为行,列,数值&#xff08;如3,5,7表示第3行第5列填7&#xff09; 系统会自动检查以下内容&#xff1a; 输入格式是否正确 数字是否在1-9范围内 是否修改固定数字 是…...

64位系统上编译32位openh264 x264

在64位系统上要使用i386(32位库)的时候&#xff0c;有些是找不到apt可以安装的版本&#xff0c;所以需要手动编译安装&#xff0c;下面是openh264和x264的编译过程。 默认编译openh264 git clone https://github.com/cisco/openh264make ARCHi386 OSlinux PREFIX/lib/i386-li…...

加深对vector理解OJ题

17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; OJ&#xff08;一&#xff09;电话号码的字母组合 思路&#xff1a;这里以引用leetcode里面的一个大佬里面的图 1.这道题中&#xff0c;我们用递归的方法来写。 为了简洁展示&#xff0c;我们举例子”456“&am…...