1.RUST 学习日记 第2课 ——Cargo
2.网页打包成桌面应用?这款开源神器一键完成,源码非常强大!工具
3.为什么rust的源码包管理器cargo这么好用?
4.VScode/RustRover插件一款将 Json 转换成 Rust 结构体的插件
5.Rust语言基础(一)rustup工具
6.RUST 学习日记 第3课 ——IDE
RUST 学习日记 第2课 ——Cargo
Rust学习日记第二课——cargo探索
上节我们已经成功编译了Hello World,现在我们进入Rust的工具世界,认识并使用cargo这个强大的源码项目管理和构建工具。cargo是工具国外源码分享网站Rust的内置工具,对项目开发和维护大有裨益。源码
cargo常用命令包括:新建项目(cargo new 项目名称),工具创建hello_rust项目后,源码你会发现项目结构中多了一个Cargo.toml文件,工具这个文件是源码Rust项目的配置文件,用于管理依赖和项目信息。工具
编译构建项目时,源码通过cargo build进入项目目录执行,工具它会自动生成target/debug目录下的源码可执行文件。首次执行可能需要编译时间,但之后的cargo run会跳过编译,直接运行。删除target文件夹再次执行cargo run,你会发现编译过程会明显变慢。
cargo doc用于生成项目文档,方便代码维护。添加注释后,文档会实时更新。test命令则用于测试项目,运行结果为ok,确保代码质量。
Cargo.toml文件则是Rust项目的灵魂,它记录了依赖库和项目配置。虽然这里不深入介绍,但后续章节会提及如何选择合适的集成开发环境(IDE)。
学习Rust的旅程还在继续,让我们期待下节课,深入探讨IDE的选择和使用。在码云-开源中国上,你可以找到本节的源代码供参考。
网页打包成桌面应用?这款开源神器一键完成,非常强大!
探索将网页转化为桌面应用的创新技术,今天为您带来一款功能强大的开源神器——Pake。这款工具巧妙结合了Rust语言的高性能特性与Tauri框架的强大功能,实现了网页内容的跨平台桌面化,让你能够轻松拥有定制版的260的源码网页应用。
Pake以其显著优势在业界脱颖而出,成功在GitHub上吸引了.3k star,受到广大开发者的一致好评。通过命令行工具,Pake让打包过程变得快速简便,即使对于初学者而言,也能轻松上手。
此外,Pake还提供了强大的定制开发功能,让你可以针对打包后的网页进行专属优化和调整。为了使用Pake,您需要确保电脑已安装Rust和Node环境,并参照Tauri文档进行快速配置。若对配置过程感到困惑,使用命令行打包将更为合适。
通过经典案例的展示,Pake将网页系统打包为电脑桌面应用,不仅简化了操作流程,更显著提升了用户体验,超越了传统的网页界面。这款简洁灵活的工具,不仅方便实用,更是值得推荐给所有开发者,相信它能为您的项目带来巨大价值。
若想深入了解Pake,访问其开源地址:github.com/tw/Pake,获取更多详细信息与源代码。
为什么rust的包管理器cargo这么好用?
Rust 的包管理器 Cargo 被认为是优秀的原因在于它能够自动处理库依赖,这与 C/C++ 编译器及构建工具默认的动态链接机制形成鲜明对比。
在 C/C++ 中,依赖库默认以动态链接形式存在,甚至有时强制使用动态链接。尽管教科书通常推崇动态链接,因为它能节省磁盘和内存空间,多个程序共享同一个动态库。然而,这种做法在实际应用中,其缺点更突出。
动态链接的问题在于其存在连锁依赖,即一个库依赖于另一个库,但编译器在链接时并不了解这些依赖关系。如果仅链接主程序而不包含依赖库,hide taskbar源码可能会遇到找不到特定符号的错误。为了解决这个问题,需要手动添加依赖库,操作繁琐。
而 Cargo 则以高效的方式解决了这个问题。它从源码构建所有依赖库,避免了二进制兼容性问题,将这些库静态链接到程序中,从而一次性解决了连锁依赖、符号找不到等一系列问题。尽管程序本体变大,但相较于动态链接后的整体体积,静态链接的体积要小得多。
综上所述,Cargo 的自动化处理库依赖、静态链接机制、以及对连锁依赖问题的完美解决,使其成为 Rust 中令人称赞的包管理器。
VScode/RustRover插件一款将 Json 转换成 Rust 结构体的插件
一款名为RustJson的插件,专为VSCode和RustRover(适用于Jetbrains全家桶)设计,它能智能地将Json数据转化为Rust结构体。该插件已分别在VS Code扩展市场和Jetbrains插件市场上线,尽管仍处于初期阶段,但正常使用无碍。遇到任何问题,可通过公众号反馈、在Github提交issue,或者分享宝贵建议和贡献代码。 想要安装RustRover插件?很简单,只需在Windows和Linux上选择File > Setting,Mac用户则点击Rust Rover > Preferences,然后在Plugins部分搜索RustJson并安装即可。而对于VSCode插件,打开插件页,搜索rustjson并安装即可开始使用。 值得注意的是,RustJson-VSCode的核心转换功能是基于Rust编写的,并编译为wasm集成到VSCode插件中。而RustJson-RustRover则采用Kotlin实现。未来,开发团队计划将整个插件完全用Rust重构,以提升性能。源码片库目前的RustJson-VSCode功能有限,但我们期待逐步完善。这两款插件的源代码可在Github找到:RustJson-VSCode (github.com//RustJson-vscode)
RustJson-RustRover (github.com//RustJson)
欢迎大家参与开发,提出问题和改进意见。
Rust语言基础(一)rustup工具
rustup是什么?
rustup是一个用于管理Rust 版本和相关工具的命令行工具
rustup安装了什么东西?
rustup将安装rustc, cargo, rustup等工具
安装后,包含以下内容(即:component):
也可通过先指定CARGO_HOME 和 RUSTUP_HOME,再运行rustup-init的方式自定义安装位置
如果你不想使用 shell 脚本,你可以直接下载需要的rustup-init平台:
mac 上的安装方式:
也可以为rustup-init指定参数,下面是一些例子:
Channel:rust版本
rust不同的channel(stable, beta, and nightly)的区别是工具链(toolchain)不同,可以使用rustup安装不同的工具链,在不同工具链之间切换:
版本区别:
如果需要将项目和指定的rsut版本绑定,可以在项目下添加rust-toolchain.toml文件,内容如下例:
toolchain:工具链
target:rust支持的平台
component:组件
rust工具链的组件($HOME/.cargo/bin路径下的二进制文件),常见组件的功能如下:
profile:component 的组合
component 的组合,根据需要选择工具链的component (二进制文件),有三个选择:
可以通过rustup set profile minimal指定
交叉编译
添加其他平台:
添加其他平台toolchain(工具链):
获取源代码
可以通过运行:
来获取 Rust 标准库的源代码。
它将被下载到/lib/rustlib/src/rust当前工具链的目录中。
编译器和工具的源代码必须从 Rust 存储库或独立的 源代码压缩包中获取。
RUST 学习日记 第3课 ——IDE
上一节内容中,我们了解了如何使用Cargo来构建Rust项目。在实际生产环境中,Cargo是构建复杂程序的首选工具。在接下来的学习中,所有代码的构建将通过Cargo进行。
Visual Studio Code是一款强大的跨平台编辑器,拥有丰富的插件资源。我们可以通过下载并打开Visual Studio Code,搜索并安装rust插件来开始Rust编程。安装完成后,新建或打开一个文件夹,例如"D:/StudyRust/"。在终端执行创建项目的命令,Cargo将在此目录下生成Rust项目。执行和调试Rust程序可以通过Visual Studio Code自带的功能完成,需要额外安装Native Debug插件。
IDEA社区版提供了免费的开发环境,适用于Rust编程。CLion是基于IDEA的C++开发工具,但收费。CLion或IDEA的操作流程相似,安装Rust插件后,创建项目并选择合适的bt神器源码toolchain,如MSVC或MinGW。选择IDE根据个人喜好和需求即可,无需过多考虑。
在选择IDE时,考虑其功能和便捷性。对于初学者,Visual Studio Code已足够;若想深入学习,专业IDE如CLion可能更适合。调试程序时,可以在代码中设置断点,使用调试工具如LLDB进行单步执行和查看变量值。通过调试,可以更好地理解程序运行逻辑。
本文将通过CLion进行后续代码演示,但Visual Studio Code同样支持Rust编程。选择IDE基于个人习惯和需求,不必过于关注他人的意见。本节代码示例和调试流程可参考项目源码。下节预告将介绍Rust的常用规范,以帮助大家更好地掌握语言特性。
swc初体验
swc是什么?
swc,全称为Speedy Web Compiler,是一款基于Rust语言编写的高性能TypeScript/JavaScript编译器。它在前端工具链中扮演着关键角色,提供压缩(Terser)、编译(Babel)、格式化(Prettier)、打包(webpack)等工具所不具备的极致性能优势。
swc的引入是为了替代Babel,它具备所有Babel的功能,但以更快的速度完成编译任务。通过优化编译流程,swc实现了高效的代码转换,支持tree-shaking、Commonjs模块、提取公共模块等特性。
如何使用swc?
执行命令后,swc会在标准输出中打印结果,无需生成额外文件。若需指定输出文件或目录,可通过参数-o ouput.js或-d dist来实现。
swc在打包时还支持Babel拥有的特性,如优化冗余代码、模块系统支持等,并提供了丰富的配置选项。插件系统允许开发者自定义操作,例如过滤掉console.log(),用void 0代替。
为什么swc这么快?
JavaScript编译过程本身耗时,而swc直接将源代码编译为二进制文件,跳过了繁琐的AST转换和字节码生成步骤。在编译过程中,swc通过二进制文件执行代码转换,提高了效率。
深入swc内部
swc的执行流程相对简单,它通过调用绑定(bindings)功能来解析和处理代码。代码转换流程中,关键步骤是利用二进制文件实现高效编译。通过查看源码和执行流程图,我们可以了解到swc是如何将源代码转换为最终二进制文件的。
总结
swc提供了快速、高效的JavaScript/TypeScript编译体验,简化了前端开发流程。通过深入理解和使用swc,开发者可以显著提高工作效率。对于有兴趣的开发者,可以自行探索swc的Rust源码,进一步了解其内部机制。实践过程中,作者分享了代码仓库,包含了调试配置,欢迎尝试。
Rust——Tokio源神,启动!
在深入理解 Tokio 的源码之前,确保您对 Rust 异步编程有所了解,并且对 Tokio 运行时的异步功能有了一定的使用经验。Tokio 是一个基于 Rust 的异步运行时库,它的设计灵感来自东京都市圈的高效与繁忙,致力于提供一个高效、稳定、易于使用的异步编程框架。
Tokio 的组织结构清晰,分为几个关键部分。在处理网络操作时,它依赖于另一个名为 mio 的库,mio 通过封装 epoll、kqueue 和 IOCP 等跨平台多路复用框架,提供统一的接口,简化了复杂且差异化的系统调用。
在时间管理方面,Tokio 采用了时间轮算法进行排序,并与 mio 整合实现定时器功能。这一设计在一定程度上借鉴了 Golang 的调度策略,使得 Tokio 在实现上显得较为直观易懂,尽管其内部实现细节可能更为复杂。
在 Tokio 中,任务(Task)是一个核心概念,它被抽象为绿色线程,类似于 Golang 的 goroutine,但 Tokio 的实现更为底层,提供了对任务启动、本地启动、资源协作式让出等关键操作的处理。
运行时(Runtime)是 Tokio 的核心部分,负责调度 Future(异步操作的抽象),其功能分为单线程和多线程驱动两种模式。单线程模式适用于嵌入在现有线程内部使用,而多线程模式则允许异步任务在多个线程间高效调度。Tokio 保证在特定时间内至少唤醒一次 I/O 或定时器任务,即使该任务未主动调用唤醒操作。
启动 Tokio 运行时的流程始于 tokio::main 标记宏,它将你的代码转换为初始化 Tokio 运行时的过程。这一过程涉及创建线程池、配置调度器、构建信号驱动等,最终通过调度器启动所有的线程和资源。
运行时内部包括多种组件,如 runtime driver 和 runtime driver handle,用于管理核心功能和资源访问。例如,io driver handle 负责与底层多路复用框架进行交互,实现 I/O 操作的高效调度。
Tokio 运行时的设计遵循一个统一的模式,即“xx + 对应的 xx handle”组成操作对,其中 xx 是具体实现,而 xx handle 则是控制 xx 的操作句柄。这种设计模式确保了操作的并发安全性和一致性。
在多线程模式下,运行时包括 Worker、Context、Core、Shared、Synced 和 Remote 等关键结构,共同实现异步任务的高效调度和并发管理。调度规则涉及本地队列、全局队列、工作窃取、定时唤醒和就绪检查等机制,确保了任务的合理分配和资源的高效利用。
每个 Worker 包含本地队列和全局队列,用于存储待执行任务,调度器根据特定规则在这些队列间进行任务调度。通过共享资源和并发控制,Tokio 实现了高效的异步操作执行和线程间资源的合理分配。
运行时的启动涉及创建 Worker、Context、Core、Shared、Synced 和 Remote 等组件,并将它们整合到运行时实例中。通过运行时 handle,用户可以将异步任务提交给 Tokio 运行时,运行时将自动处理任务的调度和执行。
当任务进入运行时后,通过 runtime/handle/enter() 方法将运行时和当前线程绑定起来。运行时的构造和运行涉及多线程的调度、任务的执行以及与外部资源的交互,确保了异步操作的高效执行。
Tokio 的启动过程实现了从任务创建、执行到外部资源管理的完整异步操作链路,包括 I/O 操作、时间管理、多路复用和并发控制等关键功能。通过 Tokio,开发者能够构建出高效、稳定的异步应用,同时保持对底层资源的精细控制。
总之,Tokio 运行时是 Rust 异步编程领域的一个强大工具,其源码深入分析揭示了异步操作的实现细节,为开发者提供了丰富的资源和功能,以构建高性能的异步应用。通过理解 Tokio 的核心机制和设计原则,开发者能够更好地利用 Rust 的异步能力,实现复杂系统的高效并发处理。
写rust用哪个ide最爽?
Vim是用于编写Rust代码的一个高效工具,本文将详细介绍如何在Linux系统上安装Vim,并使用vim-plug插件管理器进行插件安装与配置。为了在系统中安装Vim,首先应检查系统是否已安装。如未安装,可通过终端运行以下命令进行安装:
如果您的系统中未安装Vim,请在终端输入以下命令进行安装: 在完成Vim安装后,接下来需要安装vim-plug插件管理器,它是轻量级且功能强大的插件管理工具,适合喜欢简洁界面的用户。 安装vim-plug插件管理器的步骤如下:使用curl命令下载vim-plug源码。
规划插件目录结构,确保插件存放在.plugged目录下。
在~/.vimrc配置文件中增加plug-vim部分,以便使用Plug命令安装插件。
本文将介绍使用vim-plug管理插件的四种方式,以实现高效且方便的插件安装。 在~/.vimrc配置文件中,通过以下命令安装插件:对于安装在vim-scripts仓库中的插件,配置格式如下:
示例代码如下: 若插件未下载,则使用git进行下载,并在下载后完成安装。 确保理解插件管理不仅仅是下载插件代码,更包括对插件资源的管理,未配置下载指令的插件无法被安装与使用。对于安装在GitHub仓库中的插件,配置格式如下:
示例代码如下: 若插件未下载,则使用git进行下载,并在下载后完成安装。对于安装在非GitHub仓库,但使用git管理的插件,配置格式如下:
示例代码如下: 若插件未下载,则使用git进行下载,并在下载后完成安装。对于安装在本地文件系统中的插件,配置格式如下:
示例代码如下: 通过vim-plug命令管理插件,可以实现高效快捷的插件安装与配置。 本文推荐使用以下常用配置:Rust.vim插件,适用于Vim 8或更高版本,提供Rust文件检查、语法突出显示、格式化、Syntastic集成等功能。快捷键F5用于编译运行单个.rs文件,F6用于运行当前光标所在测试。
vim-lsp和vim-lsp-settings插件,通过language server protocol协议实现动态代码解析、跳转功能。
molokai主题,提供美观的界面风格。
NERDTree插件,用于文件系统浏览与操作。
minimap.vim插件,实现代码缩略图功能。
NERD Commenter插件,提供高效注释功能。
总结,Vim结合vim-plug插件管理器,为Rust代码编写提供了强大且便捷的开发环境。通过本文介绍的配置与插件安装步骤,您可以快速搭建高效、个性化的开发环境。更多详细配置与插件信息,可参考作者在GitHub上保存的全部.vimrc配置。