首页> 标签> Rust
"Rust"
共 734 条结果
全部 问答 文章 公开课 课程 电子书 技术圈 体验
【算法】3. 无重复字符的最长子串(多语言实现)
3. 无重复字符的最长子串:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。样例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 样例 2:输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 样例 3:输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 提示:0 <= s.length <= 5 * 104s 由英文字母、数字、符号和空格组成分析:面对这道算法题目,二当家的陷入了沉思。官方题解使用滑动窗口,尝试从每个字符开始找无重复的最长子串。而我们这里换一种方式,是判断到每个字符为止的无重复的最长子串。因为存储了每个字符的最后出现下标,所以不需要内层循环来滑动窗口,可以直接定位出子串的开始位置。题解:rustimpl Solution { pub fn length_of_longest_substring(s: String) -> i32 { // 存每个字符最后的下标 let mut last = [-1; 128]; // 子串下标的前一位 let mut left = -1; // 结果 let mut ans = 0; for (i, c) in s.chars().enumerate() { // 右移left left = left.max(last[c as usize]); // 修改字符最后下标 last[c as usize] = i as i32; // 刷新结果 ans = ans.max((i as i32) - left); } ans } }gofunc lengthOfLongestSubstring(s string) int { // 存每个字符最后的下标 last := make([]int, 128) for i := range last { last[i] = -1 } // 子串下标的前一位 left := -1 // 结果 ans := 0 for i, c := range s { // 右移left if last[c] > left { left = last[c] } // 修改字符最后下标 last[c] = i // 刷新结果 if i-left > ans { ans = i - left } } return ans }c++class Solution { public: int lengthOfLongestSubstring(string s) { // 存每个字符最后的下标 int last[128]; memset(last, -1, sizeof(int) * 128); int left = -1; int ans = 0; for (int i = 0; i < s.length(); ++i) { char c = s[i]; // 右移left left = max(left, last[c]); // 修改字符最后下标 last[c] = i; // 刷新结果 ans = max(ans, i - left); } return ans; } };cint lengthOfLongestSubstring(char * s){ // 存每个字符最后的下标 int last[128]; memset(last, -1, sizeof(int) * 128); int left = -1; int ans = 0; for (int i = 0; s[i] > 0; ++i) { char c = s[i]; // 右移left left = fmax(left, last[c]); // 修改字符最后下标 last[c] = i; // 刷新结果 ans = fmax(ans, i - left); } return ans; }pythonclass Solution: def lengthOfLongestSubstring(self, s: str) -> int: # 存每个字符最后的下标 last = [-1] * 128 # 子串下标的前一位 left = -1 # 结果 ans = 0 for i in range(len(s)): c = ord(s[i]) # 右移left if last[c] > left: left = last[c] # 修改字符最后下标 last[c] = i # 刷新结果 if i - left > ans: ans = i - left return ans javaclass Solution { public int lengthOfLongestSubstring(String s) { // 哈希集合,记录每个字符是否出现过 Set<Character> occ = new HashSet<Character>(); int n = s.length(); // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动 int rk = -1, ans = 0; for (int i = 0; i < n; ++i) { if (i != 0) { // 左指针向右移动一格,移除一个字符 occ.remove(s.charAt(i - 1)); } while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) { // 不断地移动右指针 occ.add(s.charAt(rk + 1)); ++rk; } // 第 i 到 rk 个字符是一个极长的无重复字符子串 ans = Math.max(ans, rk - i + 1); } return ans; } }非常感谢你阅读本文~ 放弃不难,但坚持一定很酷~ 希望我们大家都能每天进步一点点~ 本文由 二当家的白帽子:https://developer.aliyun.com/profile/sqd6avc7qgj7y 博客原创~
文章
存储  ·  Rust  ·  自然语言处理  ·  算法  ·  安全  ·  Java  ·  Go  ·  C++  ·  Python
2023-02-01
使用VScode搭建Rust开发环境
使用VScode搭建Rust开发环境1、安装rust-analyzer        它会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注。参考手册:https://rust-analyzer.github.io/manual.html。2、安装Rust Syntax        Rust Syntax为代码提供语法高亮。3、安装crates        crates可以帮助你分析当前项目的依赖是否是最新的版本。4、安装Better TOML        Rust 使用Better TOML做项目的配置管理。5、安装Rust Test Lens        Rust Test Lens可以快速运行某个Rust测试。6、 安装Tabnine AI Autocomplete        基于 AI 的自动补全,可以帮助你更快地撰写代码。支持Java、C、PHP、Go、C#、Ruby、Objective-C、Rust、Swift、Type、OCaml、Scala、Kotlin、Perl、SQL、HTML、CSS和Bash。主流编程语言几乎都囊括在内。
文章
SQL  ·  人工智能  ·  Rust  ·  前端开发  ·  Go  ·  Scala  ·  C#  ·  iOS开发  ·  Kotlin  ·  Ruby
2023-01-12
Rust开发环境搭建(Linux)
Rust开发环境搭建(Linux)1、使用Rustup安装        执行如下命令curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh执行结果如下:在这里使用默认的安装,执行结果如下:2、配置Rust环境变量        当出现Rust is installed now. Great时执行如下命令配置Rust环境变量source $HOME/.cargo/env在 Rust 开发环境中,所有工具都安装在 ~/.cargo/bin 目录中,您可以在这里找到包括 rustc、cargo 和 rustup 在内的 Rust 工具链。3、验证是否安装成功        执行如下命令来查看Rust版本信息rustc --version打印如下:4、卸载Rust        如果想卸载Rust需执行如下命令行:rustup self uninstall打印如下信息表示卸载完成:
文章
Rust  ·  Linux
2023-01-12
swc与Turbopack
一、前言本文基于开源项目:https://github1s.com/swc-project/swchttps://github1s.com/TurboPack广东靓仔前阵子对swc、turbopack进行了简单的学习、使用,这里跟小伙伴们分享一下,不少小伙伴们应该没有使用过,下面我们一起来学习学习。二、swcswc是什么swc全称“Speedy Web Compiler”,用Rust编写的超快速TypeScript/JavaScript编译器。可以同时用于Rust和JavaScript的库。swc利用了rust的安全无gc以及系统级语言的特性,保证了性能是接近原生开发,并且可以充分利用多核cpu,同时利用rust做jsbinding,减少了bug的出现。根据官方测试,swc 对比 babel,swc有至少10倍以上的性能,这是swc与babel最大的区别。题外话:Rust被应用在前端工具链方面,如压缩(Terser)、编译(Babel)、格式化(Prettier)、打包(webpack)等场景中。swc安装、使用安装:npm i -D @swc/cli @swc/cor使用:npx swc ./index.js -o output.js执行过命令之后会把结果打印在标准输出里,并没有生成文件之类的。如果想要输出的文件中需要携带参数来完成-o ouput.js或者-d dist编译到dist目录下swc为什么快swc是直接将代码根据不同平台来编译成对应的「二进制文件」,省略了js执行过程中(转换为AST以及编译成字节码)最耗时的步骤。三、TurborepoTurbopack 中 JavaScript 和 TypeScript 的打包是基于 SWC,使用 Rust 编写,作者愿景是希望替代 Webpack 95% 的功能和扩展性。不少圈友说,Turbopack跟vite一样,也是ESModule,是另一种形式的vite,这里我们不讨论,只是对打包工具学习为主。安装、使用温馨提示:node版本需要16,只在next 13中提供了支持安装:npx create-next-app --example with-turbopack --typescrip使用:// 启动项目 yarn run dev // 项目打包 yarn run build // 打包后,启动项目 yarn run start一些概念增量计算: Turbo 引擎就像函数调用的调度程序一样工作,允许在所有可用内核上并行调用函数。Turbo 引擎还会缓存它调度的所有函数的结果,这意味着它永远不需要执行两次相同的工作。简而言之,它会以最大速度做最少的工作。惰性打包:Turbopack 在首次启动 Dev server 时速度极快。只需计算渲染页面所需的代码,然后在单个块中将其发送到浏览器。在大规模应用中,这最终比原生 ESM 快得多。缓存入口、缓存输出基于环境变量的缓存变更:turbo允许使用.env文件存储环境变量,在使用,env存储环境变量之前需要安装 dotenv-cli 库Turbopack 的功能开箱即用的功能:JavaScript:支持所有ESNext功能、Browserslist和顶层awaitTypeScript:开箱即用地支持 TypeScript,包括解析路径和baseUrlImports:支持 require、import、动态导入等Dev Server:优化的 Dev Server 支持热更新 (HMR) 和快速刷新CSS:支持全局 CSS、CSS Module、postcss-nested 和 @import静态资源:支持 /public 目录、JSON 导入和通过 ESM 导入资源环境变量:通过 .env、.env.local 等支持环境变量三、最后对swc、Turbopack感兴趣的小伙伴可以持续关注官方动态、以及深入学习。
文章
存储  ·  缓存  ·  JSON  ·  Rust  ·  JavaScript  ·  前端开发  ·  编译器  ·  调度  ·  文件存储  ·  数据格式
2023-01-30
Rust 也许是JavaScript 基建的未来
一、RUST简介本文基于开源项目:https://www.rust-lang.org/learn/get-started    RUST是一种快速、可靠且内存高效的编程语言。Facebook、Apple、Amazon、Microsoft和Google使用RUST于系统基础架构、加密、虚拟化和更多低级编程。     Rust 帮助开发人员编写内存高效的快速软件。它是 C++ 或 C 等语言的现代替代品,专注于代码安全和简洁的语法。    Rust 与 JavaScript 完全不同。JavaScript 尝试查找未使用的变量或对象并自动从内存中清除它们。这称为垃圾收集。该语言使开发人员无需考虑手动内存管理。使用 Rust,开发人员可以更好地控制内存分配,而不会像 C++ 那样痛苦。    下面我们来慢慢进入RUST的学习~二、JS生态系统简介    在过去的十几年里,许多前辈围绕 JavaScript 共同构建了一个庞大的生态系统:Webpack: 最主要是将多个 JavaScript 文件捆绑成一个。Babel: 最主要是支持旧浏览器的同时编写现代 JavaScript。Terser:最主要生成尽可能小的文件大小。Prettier:最主要是一个有效的、赏心悦目的代码格式化程序。ESLint: 最主要是在部署之前发现他们的代码存在的问题。目前业界的前端基建工具基本都是用 JavaScript 或 TypeScript 编写的。可以看出我们用 JS 达到了优化的峰值。这就激发了一类新的工具,旨在提高 Web 构建的性能。SWCSWC创建于 2017 年,是一个基于 Rust 的可扩展平台,用于下一代快速开发者工具。Next.js、Parcel 和 Deno 等工具以及 Vercel、ByteDance、腾讯、Shopify 等公司都在使用它。SWC 可用于编译、缩小、捆绑等 - 并且旨在扩展。我们可以调用它来执行代码转换(内置或自定义)。运行这些转换是通过 Next.js 等更高级别的工具进行的。DenoDeno创建于 2018 年,是一个简单、现代且安全的 JavaScript 和 TypeScript 运行时,它使用V8并使用 Rust 构建。它试图取代 Node.js,由 Node.js 的原始创建者编写。虽然它是在 2018 年创建的,但直到 2020 年 5 月才达到v1.0。Deno 的 linter、代码格式化程序和文档生成器是使用 SWC 构建的。esbuildesbuild创建于 2020 年 1 月,是一个用 Go 编写的 JavaScript 打包器和压缩器,比现有工具快 10-100 倍。RomeRome创建于 2020 年 8 月,是一个用于 JavaScript、TypeScript、HTML、JSON、Markdown 和 CSS 的 linter、编译器、捆绑器、测试运行器等。他们旨在替换和统一整个前端开发工具链。它是由Sebastian创建的,他也创建了 Babel。NAPInapi-rs允许我们使用 Rust 构建预编译的 Node.js 附加组件。它提供了交叉编译和发布本地的二进制文件NPM一个彻头彻尾的现成的解决方案,而无需node-gyp或postinstall脚本。我们可以构建一个可以直接从 Node.js 调用的 Rust 模块,而无需创建像 esbuild 这样的子进程。WASM WebAssembly  ( WASM ) 是一种可移植的低级语言,Rust 可以编译成它。它在浏览器中运行,可与 JavaScript 互操作,并且在所有主要的现代浏览器中都受支持。虽然 WASM 还不是完美的解决方案,但它可以帮助开发人员创建极快的 Web 体验。Rust 团队致力于高质量和前沿的 WASM 实现。对于开发人员来说,这意味着我们可以在仍然为 Web 编译(使用 WASM)的同时拥有 Rust(与 Go 相比)的性能优势。这个领域的一些早期库和框架YewPercySeedSycamoreStork这些编译为 WASM 的基于 Rust 的 Web 框架并没有试图取代 JavaScript,而是与它一起工作。Rust 在追赶 Web:使现有的 JavaScript 工具更快, 以及 编译为 WASM 的未来想法。可以看出Rust很有可能成为JavaScript基建的未来。广东靓仔认为要成为JavaScript的未来,Rust有一些路要走,不过Rust已经具备了可扩展性、性能更好、Rust 对 WASM 的支持、社区很受欢迎。接下里我们一起来敲响Rust的大门三、Rust入门--安装试用传送门:https://play.rust-lang.org/Rustup Rustup是安装 Rust 的主要工具,既是一个 Rust 安装器也是一个版本管理工具。macOS、Linux 或其它类 Unix 系统安装:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shwindow安装参考:https://forge.rust-lang.org/infra/other-installation-methods.html卸载命令:rustup self uninstallCargo 在安装 Rustup 时,我们也会安装 Rust 构建工具和包管理器的最新稳定版,也就是 Cargo。cargo build:用来构建项目cargo run:可以运行项目cargo test:用来测试项目cargo doc:可以为项目构建文档cargo publish:用来将库发布到 crates.io检查我们是否安装了 Rust 和 Cargo,命令如下:cargo --versionRust 支持多种编辑器:四、Rust入门--编写Demo首先用 Cargo 创建一个新项目。我们在终端中执行如下命令:cargo new hello-rust然后我们会看到这样的目录:hello-rust |- Cargo.toml // Rust 的清单文件。其中包含了项目的元数据和依赖库 |- src |- main.rs // 编写应用代码文件运行cargo run结果添加依赖Rust仓库链接:https://crates.io/在 Rust 中,习惯把包称作“crates”,接下来给我们的demo安装依赖:Cargo.toml加入如下内容:[dependencies] ferris-says = "0.2"执行cargo build命令,Cargo会开始安装这个依赖,然后会生成Cargo.lock:记录了本地所用依赖库的精确版本。main.rs使用ferris_says,内容如下:use ferris_says::say;我们已经可以使用 ferris-says crate 中导出的 say 函数了。Demomain.rsuse ferris_says::say; // from the previous step use std::io::{stdout, BufWriter}; fn main() { let stdout = stdout(); let message = String::from("Hello 广东靓仔"); let width = message.chars().count(); let mut writer = BufWriter::new(stdout.lock()); say(message.as_bytes(), width, &mut writer).unwrap(); }运行cargo run可以看到如下结果:---------------------------- < Hello 广东靓仔 > ---------------------------- \ \ _~^~^~_ \) / o o \ (/ '_ - _' / '-----' \到此我们已经算是敲响了Rust的大门,接下来有兴趣可以进一步去学习五、总结    推荐进一步学习:https://www.rust-lang.org/learn
文章
Rust  ·  JavaScript  ·  前端开发  ·  安全  ·  编译器  ·  Go  ·  开发工具  ·  数据安全/隐私保护  ·  虚拟化  ·  C++
2023-01-30
嵌入式Linux C(一)——概述
C语言知识体系C语言概述(历史、特点、标准)数据类型(基本数据类型、输入输出)基本语句及表达式、运算符(条件语句、循环语句、多路分支、goto语句)数组(一维数组、二维数组、多维数组)指针(一维指针、多维指针、数组指针、指针数组、函数指针、函数指针数组)内存管理(内存是稀缺资源,内存泄露)函数(函数声明、定义、调用、库函数的使用(字符串处理函数、时间函数、随机数函数))编码规范(华为编码规范)预处理(宏定义、宏函数、条件编译)关键字(static、extern、register、const、typedf、volatile、inline)位操作(位运算)复合数据类型(struct、union、enum)文件操作(打开、关闭、读写、属性设置)进度安排day1:1,2day2:3,4,5day3:5,6,8day4:6,7,8day5:10,9day6:11,12学习目标:代码量:1w+;书籍阅读:5+;笔记:教材学习要求:代码量:力扣(每天1道,30分钟)书籍:C语言三剑客、C program、C语言接口与实现、高质量编程……一、C语言概述1.1 嵌入式开发中为什么选择C语言嵌入式开发中操作系统是核心、需要一直,并在上层和底层做开发,而操作系统最核心的是:内核,所有的内核都是由C语言开发,1.2 为什么内核开发选择C语言C语言能直接访问和控制硬件(C(硬件复杂操作) VS 汇编(硬件初始化))C语言运行效率快(运行时语言)解释性语言 VS 运行时语言(C VS java \ C VS C++)移植性1.3 C语言的缺点面向结构(代码的复用性差、代码的维护性差、代码的扩展性差)1.4 C语言实现面向对象编程?????????1.5 C语言的开发方向操作系统(上层(库)、底层(BSP、驱动)、实现(内核))、硬件、中间件(sdk)1.6 C语言发展一点问题都没有C语言基础知识机器码(运行效率、访问硬件能力)C语言之父:丹尼斯-里奇C语言语法标准:K&RC 、c89、c99、c11C语言语言版本:GNU C + ASCI Cgcc:100%c89 + 部分c99什么语言可能以后会替代C语言?Go 和 Rust(替代不了)
文章
Rust  ·  Java  ·  中间件  ·  Linux  ·  Go  ·  开发工具  ·  C语言  ·  C++
2023-01-29
Rust 从入门到放弃,再入门到贡献 nacos-sdk-rust
Rust 上手难度大?我想是的。从文章标题便可知一二,小编水平有限经历了多次入门,得来的经验之谈。本文不涉及详细的技术剖析,仅表达入门的心路历程,供客官参考。1、初次入门初听 Rust 性能彪悍,内存安全,对比 C 来的保证不会有内存泄漏;也就是说 Rust 有 C 同等的性能而又保证了内存安全。牛!!!故而尝试开启了初次入门之旅。当时从多方搜索引擎中涉猎 Rust 相关话题和知识,ATA、知乎、Bilibili、科学上网等。也不记得是在哪个渠道,看到说 Rust + WebAssembly 是下一代云计算的未来。于 2022-01-17 写了如下的第一行 Rust 代码涉猎的资料五花八门,断断续续零零碎碎,也没有持续地编码参与项目开发,对所有权、生命周期这些核心概念没有领悟,宣告了初次入门失败2、再次入门历经了很长一段在放弃与相关话题的持续关注之间,还是好奇心作怪,发现最佳入门辅助手册 《Rust语言圣经(Rust Course)》,仅代表小编自我观点(英文水平不足等等)。多次翻阅『圣经』,Rust 基础入门、所有权/借用、特征对象、生命周期、异步编程、Cargo 包管理等。搭配看一些开源社区的项目:sentinel-rust/skywalking-rust/opentelemetry-rust/dubbo-rust/... 于实际项目中的运用。在 skywalking-rust 知道 tonic 的使用及查看其构建 api,发觉作为 grpc 客户端并不需要 build_server 只留 build_client,故而笔者提交了第一行 Rust Chore(tonic-build): set tonic-build.build_server(false), do not build Server code.『圣经』推荐了好几个不错的组件:serde-rs/json 超高性能的通用序列化/反序列化框架,快到上天的 JSON 库,Rust 序列化 json 的事实标准。tonic 完全 Rust 实现的 gRPC 客户端和服务器端。tokio-rs/tokio 最火的异步网络库,除了复杂上手难度高一些外,没有其它大的问题。tokio 团队提供了多个非常优秀的 Rust 库,用户认可度很高。tokio-rs/prost tokio 出品的 Protocol Buffers 工具,简单易用,文档详细。tokio-rs/tracing 强大的日志框架,同时支持 OpenTelemetry 格式,无缝打通未来的监控。感觉时机半熟,由此决定为 Nacos 开发 Rust 版的客户端,亦作为自己上手的目标去牵引持续下去。3、nacos-sdk-rust始于 2022-07-06,提交 README.md 说明 Nacos 客户端与服务端的交互逻辑,客户端需要实现的能力。简要描述 client & server 的交互请关注 proto/nacos_grpc_service.proto 并知晓构建出客户端侧的 stub,实现同步调用 service Request.request(),流式交互 service BiRequestStream.requestBiStream()。tonic 创建与 Nacos-server 的 gRPC 双工长链接,serde/json 适配与 server 的交互序列化;gRPC 交互的 Payload 和 Metadata 由 Protocol Buffers 序列化,具体的 Request/Response 实体 json 格式二进制数据维护于 Payload.body,类型名字符串维护于 Metadata.type 。有了 gRPC 双工长链接,也有了数据序列化方式,那么就是对 Request/Response 的处理逻辑啦; 而 client 会接受 server 的主动调用,故可以实现一个通用的 RequestHandler 接受 server 的请求,根据 Request 类型分发到具体的处理实现并返回对应的 Response。而 client 请求 server 的部分,则 do it ...以上交互务必参考 java nacos-client 和 nacos-server 的实现。3.1、异步/跨线程是极大门槛如上的简要描述中,模型定义及序列化,朴素的编码都能写出来,而难点在于 gRPC 的交互,客户端构建后如何跨线程被使用?既能在需要的时候拿到它发起调用,又能实时捕获到服务端返回的数据然后作出处理并回应?在所有权/生命周期等约束下,异步/跨线程等应该是个极大的门槛!遇到了难题焦头烂额,期间中断了提交,有些消沉而又继续抱着『圣经』看看并在 tracing 订阅了解中看到 tokio-rs/console,好奇它是怎么和应用交互并能实时地返回信息显示在界面上?阅读它的源码找准了关键点,tonic 发起于应用的交互然后并发线程 loop 取得 gRPC 持续地等待服务端推送数据,然后执行逻辑。搭配看起来就很牛,谁先返回则执行其分支的 tokio::select! { xx=>, yy=>, zz=> }分支1:等候 gRPC 服务端来的数据,使用 tx: Sender 将其发往 mpsc::channel;分支2:等候 rx: Receiver 接收分支1中的数据并处理;分支3:以上两个分支均不执行,则处理一些日常逻辑。俗话说参考借鉴(抄袭)tokio-rs/console 中这部分的逻辑(拷贝过来改改)能用!数据交互不堵塞,还会断线自动重连。3.2、gRPC 交互改用逻辑是写好了,发觉运行不起来!总是卡在了什么地方,研究了一段时间,看 tonic 的 api 粗浅理解每次发起请求只能丢进去一个有界的 stream 流,这点在 Nacos 的交互模式里会非常难(客户端发起 stream 请求后,客户端/服务端都不会 close 结束它,而是一直持有它用作后续服务端主动推通知)决定了当前不合适。挣扎了蛮久无界流则没能发出请求,有界流难道客户端要无限重发请求?再从『圣经』知道 tikv/grpc-rs 也是优选的 gRPC 客户端,它 wrap 了 gRPC 官方 C++ 库,看看 api 感觉可以,便尝试了确实好用。所以替换 tonic 改用 tikv/grpc-rs。3.3、加入 nacos-group从第一行 nacos-sdk-rust 开始,两个月处于学习中的断断续续提交,然后提案由 Nacos PMC 认可故而迁入 nacos-group;随即发布了第一版 nacos-sdk=0.1.1,支持配置获取与订阅、客户端自动重连。后来有 @onewe 同学的加入负责服务注册模块功能的开发,和我“先能用”的想法不同,他要求高,直接就从宏入手,交互模型的通用部分由宏(nacos-macro)统一生成,模型和 grpc 交互都重新定义了一番。在框架内自定义 Event 事件抽象中 @onewe 使用了 TypeId + Any,居然有反射的韵味!大哥我大受震惊,可真是个小宝贝。小编思维局限于 loop tokio::select!{} 一直没能优化 gRPC 交互逻辑,后来也是由 @onewe 新构建了这部分,并能自动重连、解决同一地址 gRPC 默认复用同一链接的问题。最后历经近百次提交,完善并发布了 nacos-sdk=0.2.x 配置管理/服务注册功能均可用,包括登陆鉴权、配置解密插件。4、总结推荐入门辅助手册 《Rust语言圣经(Rust Course)》;总的来说 Rust 入门需要花费一些时间,最好有持续的目标去牵引。参与开源社区 Rust 项目是个相对较好的方式,会有小伙伴与你一道前行。或许你还能收获一份友谊,虽友人素未谋面。入门后方能发觉现代不少数据库都使用 Rust 语言开发,不限于分布式存算分离 HTAP 数据库 TiDB 之下 TiKV,云原生数仓 Databend,蚂蚁开源的 CeresDB,创业中的时序数据库 GreptimeDB;亦有很多其他基础设施,微内核虚拟化安全容器 Kata-Containers,隐私计算 Teaclave (Apache incubating) and so on...大名鼎鼎的 Linus(竖中指.jpg)都已接纳 Rust on Linux,你不来试试嘛?
文章
JSON  ·  Rust  ·  安全  ·  搜索推荐  ·  Cloud Native  ·  API  ·  Nacos  ·  数据库  ·  数据格式  ·  C++
2023-01-29
eunomia-bpf:展望 2023,让 eBPF 插上 Wasm 的翅膀
eunomia-bpf:展望 2023,让 eBPF 插上 Wasm 的翅膀回望过去的 2022 年,有两项技术备受瞩目:eBPF 和 WebAssembly。eBPF: 全新的可能性eBPF 是一项革命性的技术,起源于Linux内核,可以在操作系统的内核中运行沙盒程序。它被用来安全和有效地扩展内核的功能,而不需要改变内核的源代码或加载内核模块。过去一年中,可观测技术得到了极大关注,也被 Gartner 列为 2023 年十大战略技术趋势之一。eBPF 本身是对传统观测能力一个非常好的补充,在对内核无侵入的前提下,它通过动态地向内核中插入一段自己的代码,实现定义监控及跟踪等多种多样的能力。同时, eBPF 也促进了网络,安全性,应用程序配置跟踪和性能故障排除等等领域的新一代工具的开发,这些工具不再依赖现有的内核功能,而是在不影响执行效率或安全性的情况下主动重新运行。如今, eBPF 被广泛应用在云原生、可观测、性能调优、安全、硬件加速等领域,并且其应用场景还在快速扩展,各种场景基于 eBPF 技术的创新项目呈现井喷现象,对于操作系统社区而言,eBPF 技术带来了一个全新的可能性以及广阔的天地, eBPF 的时代已然来临。过去的 eBPF summit 2022 中,《The future of eBPF in the Linux Kernel》展望了 eBPF 相关技术的发展方向,具体的演进方向可能包含几个方面:更完备的编程语义支持:当前 eBPF 的编程能力存在一些局限性(比如不支持变量边界的循环,指令数量受限等),未来希望能进一步提供图灵完备的编程能力,增强 eBPF 的循环、内存分配等多种语言特性。更强的安全性:支持类型安全,增强运行时 Verifier,希望 BPF 也能提供媲美 Rust 的安全编程能力,以及尝试有没有可能结合 Rust 和 BPF 的特性,提供更进一步的、同时保证可移植和安全性的内核功能。更广泛的移植能力:增强 CO-RE,加强 Helper 接口可移植能力,实现跨体系、平台的移植能力。更强的内核可编程能力:支持访问/修改内核任意参数、返回值,实现更强的内核编程能力,甚至使用 BPF 来帮助构建和增强内核本身的安全性。Wasm: 引领下一代计算范式相对于 eBPF 主要关注于内核态或者和内核相关的应用,用户态的 WebAssembly 也成为了 2022 年新的焦点。WebAssembly(简称 Wasm)是一个自诞生之日起就充满潜力的技术,一开始为了一个可移植的目标而设计的一种类似汇编字节码的指令格式标准,可用于编译C/C+/RUST等高级语言,使客户端和服务器应用程序能够在浏览器上部署;时至今日,WebAssembly 正在沿着其名字中 Web 和 Assembly 两个领域之外的方向发展,使用与 Wasm 兼容的运行时,Wasm 文件可以在客户端和服务器端执行,从 "JavaScript 杀手" 到 "云计算的下一个前沿方向" 几乎覆盖了全部新兴领域,同时在从云计算、serverless 向边缘计算渗透,Wasm 已经远远超出了起作为第四种 Web 标准语言的角色。甚至重新定义了应用软件的开发模式,正逐渐接近其 “一次编写,随处运行” 的愿景。Wasm 有几个关键的设计目标使其出生开始就自带令人亮眼的关注:可移植:Wasm 被设计为针对低级虚拟机架构,其指令由物理机单独翻译成机器代码。这意味着 Wasm 二进制文件最终可以在各种操作系统和芯片架构上运行 —— 无论是在运行 X86 笔记本电脑的浏览器中,还是在内部或云端的服务器上,在移动设备、物联网设备上等等。多语言:因为 Wasm 是一个编译目标,用于编程模块的具体语言并不重要,重要的是是否有支持将该语言编译到 Wasm。开发人员可以灵活地使用多种语言(如 C、C++、Rust、凹语言等)来构建二进制文件,并享受 Wasm 带来的红利。轻量和高效:作为一个低级别的二进制指令格式,只需要较少的操作来将 Wasm 翻译成优化的机器代码。安全:Wasm 目标之一是安全,它在一个沙盒环境中执行,对主机运行时没有初始可见性。这意味着对系统资源(如文件系统,硬件等)的访问是受限制的,除非明确导入了对应的函数以支持。因此 Wasm 极大限制了攻击面,实现了多租户环境中不受信任的代码安全受限地执行。过去的 2022 年 Wasm 取得了不少激动人心的成就,许多新的 Wasm 初创公司涌现,老牌云服务商和公司宣布支持 Wasm,字节码联盟推出了许多新的 Wasm 标准,CNCF主办了两次 WasmDay 活动,而 Wasm 最大的用户之一 Figma 被 Adobe 以惊人的 200 亿美元收购。对于 WebAssembly 而言,2023 年很有可能也会是爆发的一年:组件模型描述了Wasm二进制文件相互交互的方式,正在迅速成熟,已经出现了参考实现。开发人员可以声明他们的应用程序需要哪些组件,或者更抽象地说,他们的应用需要哪些功能(而不是用他们首选的源语言查找库),然后Wasm运行时可以代表用户组装正确的组件集。2023 年将是组件模型开始重新定义我们如何编写软件的一年。Wasm改变了无服务器环境的潜力。由于几乎即时的启动时间、较小的二进制文件大小以及平台和架构中立性,Wasm二进制文件可以用运行当今无服务器基础设施所需的一小部分资源来执行。2022年底,OCI Registry工作组宣布了一种存储容器镜像以外的其他内容的官方方式。这可能包括Helm图表、照片或Wasm应用程序。这个新功能被称为“工件存储”。所有大型编程语言都将得到Wasm支持:Wasm GC提案很可能在 2023 年初就能可用并得到支持,因此 Kotlin 和 Dart 将很快发布Wasm编译器,Java 也很可能将成为最流行的 Wasm 开发语言。Coolbpf + eunomia-bpf = eunomia-lcc在过去的一年中,阿里云龙蜥社区系统运维SIG(Special Interest Group) 正式开源了 Coolbpf 项目。Coolbpf 以 CO-RE(Compile Once-Run Everywhere)为基础实现,保留了资源占用低、可移植性强等优点,融合了BCC动态编译特性,通过远程服务能力,极大简化开发编译和运行效率,适合在生产环境批量部署应用。Coolbpf 还支持在没有 eBPF 特性的低内核版本上,通过提供的 eBPF 驱动,帮助它安全的在低版本上运行,从内核态和批量部署两个角度充分增强了 eBPF 程序"一次编译,到处运行” 的能力。eunomia-bpf 也是一个结合 Wasm 的通用、轻量级、多语言的下一代 eBPF 开发框架/组件库,2022 年下半年在龙蜥社区 eBPF 技术探索 SIG [3] [5] 发起并孵化。eunomia-bpf 包含一个运行时和编译工具链,主要关注于改进 eBPF 程序用户态的开发和使用体验,主要有三个特性:只需编写内核态代码即可运行 eBPF 程序,内核态前端完全兼容 bcc、原生 libbpf 等多种语法,可以降低 eBPF 开发的学习成本,提高开发效率;编译工具链和运行时完全分离,保证不同版本编译工具链和运行时之间的兼容性,以 CO-RE(一次编译、到处运行)的方式加载,降低部署和使用的资源消耗;还可以让 BCC/bpftrace 类型的代码也支持 AOT 编译,在加载的的时候不依赖 llvm 等库,同时保留 bpftrace 类似脚本一样的简单使用方式;用户态也支持多种语言,例如 C++/C/Rust 等,可以使用多种语言在 Wasm 中开发 eBPF 的用户态程序,并且以 Wasm 模块,或者 JSON/YAML 配置文件的方式分发和动态加载 eBPF 程序,同时以 Wasm OCI 镜像的形式存储和管理任意包含用户态和内核态的 eBPF 应用。eunomia-bpf 希望成为一个以类库或者松散组合的框架的方式提供,让其他公司和个人,想要基于自己的内核态 ebpf 基础设施,搭建一个类似的用户态开发运行环境,或者完整的开发平台、插件运行时,变得更容易很多。希望在编译方面做更多的探索。在 2022 年底,我们尝试将 Coolbpf 和 eunomia-bpf 结合起来,借助 Coolbpf 提供的低内核版本支持的内核态基础设施,以及批量部署应用的能力,以及 eunomia-bpf 提供的结合 Wasm 的用户态开发、分发特性,在 Coolbpf 的大框架下创建了一个新的 eBPF 用户态开发库:eunomia-lcc,希望让 Coolbpf 也能:在编写 eBPF 程序或工具时只编写内核态代码,就能自动获取内核态导出信息,自动生成命令行参数、直方图输出等;使用 WASM 进行用户态交互程序的开发,在 WASM 虚拟机内部控制整个 eBPF 程序的加载和执行,以及处理 eBPF 上报的数据;可以将预编译的 eBPF 程序打包为通用的 JSON 或 WASM 模块,跨架构和内核版本进行分发,无需重新编译即可动态加载运行。同时还能保留 Coolbpf 的低版本兼容、BTF 自动获取、远程编译等特性,让 eBPF 程序的开发更加简便易行。展望未来,eunomia-bpf 的团队在 2023 年也希望尝试探索、改进、完善 eBPF 程序开发、编译、打包、发布、安装、升级等的流程和工具、SDK,并积极向上游社区反馈,进一步增强 eBPF 的编程体验和语言能力;以及更进一步地和 WebAssembly 相结合,在可观测性、serverless、可编程内核等诸多方面做更多的探索和实践,朝着图灵完备和更完善的语言支持迈进。参考资料WASM 将引领下一代计算范式 [译]:https://www.oschina.net/news/214580WebAssembly:2023年的5个预测: https://www.sohu.com/a/626985661_121119003eBPF 技术探索 SIG 主页: https://openanolis.cn/sig/ebpfresearchCoolbpf 项目开源仓库: https://gitee.com/anolis/coolbpfeunomia-bpf 龙蜥社区镜像仓库:https://gitee.com/anolis/eunomiaeunomia-bpf Github 仓库:https://github.com/eunomia-bpf/eunomia-bpf当 WASM 遇见 eBPF:使用 WebAssembly 编写、分发、加载运行 eBPF 程序 | 龙蜥技术: https://developer.aliyun.com/article/10504392023,可观测性需求将迎来“爆发之年”?https://36kr.com/p/dp2063589382737542
文章
存储  ·  JSON  ·  Rust  ·  自然语言处理  ·  安全  ·  Linux  ·  云计算  ·  Anolis  ·  C++  ·  数据格式
2023-01-23
开发serverless,我用官网提供的代码测试了一下,go和rust明显比python和nodej
开发serverless,我用官网提供的代码测试了一下,go和rust明显比python和nodejs 有更低的执行时间 和内存用量,是不是从性能上来说 go 或 rust更好?
问答
Rust  ·  Serverless  ·  Go  ·  Python
2023-01-18
圆满落幕!56人参加,龙蜥社区技术委员会、运营委员会会议顺利完成
1 月 13 日,龙蜥社区分别召开了第 10 次技术委员会会议和第 14 次运营委员会会议,来自 21 家理事单位的委员代表出席。两个会上分别总结和回顾了龙蜥社区 2022 年度整体技术和运营发展情况,就社区产品、重要技术决策、社区治理、2023 年度运营计划、龙蜥社区重要活动等进行了同步和研讨。本次会议,技术委员会会议出席 30 人,由 Intel 金运通主持;运营委员会会议出席 26 人,由浪潮信息张旭芳主持。一、第 10 次技术委员会会议 会议开始,技术委员会主席杨勇就 2022 年社区发展做了发言,他说到:“2022 年社区发展升级,更加注重社区协作,明确了 8 大技术方向,保证社区技术发展方向的领先性。社区产品建设持续进步,包括下一代操作系统 Anolis 23 和云原生套件发布、龙蜥 3 大操作系统产品系列、9 大主要下游衍生版,基于龙蜥的操作系统和云原生端到端解决方案等。社区基础设施 ABS 构建系统、T-One 测试平台、CI/CD 进一步优化改进,为社区更高效顺畅协作提供保障。社区客户服务多样性、应用场景诉求丰富性极大增强。所以我们有信心社区可以保持可持续向前发展。”接着技术委员会副主席孟杰为全体委员同步了 2022 年龙蜥社区整体技术发展情况。可以看到,龙蜥社区每月都有重要的代表性成果和进步,如 Anolis 23、Anolis 8.6 版本、RISC-V 版本发布等等。会上,云原生 SIG(Special Interest Group) 报告了 ACNS 研发路标和计划,目前 ACNS 和 Anolis OS 共同形成全栈的云原生解决方案,通过与理事单位的合作开发,已经服务了爱奇艺、好雨科技等众多社区合作伙伴。在圆桌讨论环节,全体技术委员对 RISC-V 支持情况、Rust 生态的前瞻性考虑规划、国密(商密)算法生态赋能、Anolis 23、Anolis 25 发行版的支持计划等展开深度讨论,其中:RISC-V ARCH SIG 支持情况,目前龙蜥社区已经发布了 RISC-V 支持,来自平头哥、中科院软件所、统信软件等都为 Anolis OS 的 RISC-V 架构支持做出了贡献。后续 RISC-V SIG 继续积极推动社区更广度深度的合作,聆听来自各合作伙伴的诉求建议,近期也会组织 RISC-V SIG 做系统性汇报工作。Rust 生态的前瞻性考虑规划:Linux 6.1 已经引入了 Rust 支持,可以预见在驱动开发、云原生安全领域都有 Rust 的发挥空间,驱动安全是重点关注,云原生重视安全的领域也看到了 Rust 语言的必要性。国产芯片厂商对 Rust 支持,龙蜥社区可以提前关注这块的诉求。会上,全体技术委员针对 2023 年社区工作进行了深入的讨论和规划,技术委员会委员肖微说到,“联通在用国密试点,我们计划将龙蜥社区的国密包用起来,对比结合芯片做优化可以取得的性能优化效果”。接着技术委员会委员王洪虎说到:“龙芯将会积极参与推动 Rust 落地,我们也察觉到内核里 Rust 有其优势。国密相关的特性在社区用起来对客户场景会是很大的亮点,有些地方对国密有全场景的支持要求,像龙芯 4000、5000 都有国密加速硬件可以做芯片协同优化”。二、第 14 次运营委员会会议会议由运营委员会委员张旭芳主持开场。她介绍,浪潮信息是 2022 年 9 月加入龙蜥社区,在这三个月的时间内:联合社区举办了走进浪潮信息 MeetUp 活动、三次龙蜥大讲堂技术直播、提供了龙蜥社区合作案例,并发布了龙蜥衍生版 KOS 操作系统和成立了浪潮信息龙蜥联合实验室。2023 年,浪潮信息将会持续在社区进行投入,欢迎所有的理事单位和合作伙伴共同参与联合实验室的建设工作,一起把龙蜥生态做大做好。运营委员会副主席任紫东做开场发言,他说:“时光飞逝,2022 年我们看到众多理事单位和合作伙伴加入了龙蜥。社区已经开始沉淀出了自己的文化,是大家平等地商议,共同往前走,比如社区的轮值主持,也是社区迈向共同治理协作的一个标志。这一年,龙蜥社区在运营做了很多工作,尤其是从 2022 年下半年开始 Anolis OS 23 的准备和发布,当然还有很多其他的重要事项和获得的奖项也是有目共睹的。运营是一个长期的工作,如果最后通过长期运营能产生效益,并且能帮到各位委员以及各位所在的公司,那才是社区共赢的胜利。”接着,运营委员会副主席金美琴就龙蜥社区各企业单位的年度贡献做了同步和感谢,龙蜥的发展离不开理事单位和合作伙伴的支持,在 2022 年 11 月份,龙蜥社区也为40+ 家优秀合作企业颁发奖项。运营委员兼品牌小组组长孙林林和运营委员蔡佳丽分别同步了 2022 年度龙蜥社区运营进展和运营支出,对龙蜥社区一年的技术和运营成果及运营投入向各单位代表做了汇报。关于龙蜥社区年度成果回顾,详情可见龙蜥社区发布的《2022 年度回顾|龙蜥这一年:协同开放 众行致远》。同时,会上也将 2023 年重点运营计划和活动进行同步和讨论,龙蜥社区将会围绕生态、开发者和品牌三个方向展开系列运营活动。尤其在生态上,我们将邀请广大合作伙伴和用户共同点亮龙蜥即将推出的视频栏目,呈现更多基于「龙蜥+」而产生的共赢成果。其中龙蜥社区在 2023 年的部分重大活动规划,也将在下次理事大会上进行投票表决,委员们对活动规划表示赞同和认可。针对 2022 年度回顾和 2023 年度规划,26 位运营委员代表也逐一发表了看法。以下放上部分发言实录——运营委员高延明说:“龙蜥虽然起步可能比某些其他社区略晚,但发展得很快。可以看到大家群策群力,共同出主意,包括比如轮流主持的一些思路也非常好,大家开放共赢。2023 年,光合组织在活动层面、适配层面和生态层面,我们都可以助力社区。比如活动上,双方可以共同策划举办。适配方面,我们愿意和龙蜥多结合,共享适配资源,贡献一部分远程的整机能力。生态成员方面,我们会与龙蜥共建,做强联盟。”运营委员王鑫辉说:“龙蜥社区去年一年的工作总结,很详实很有成果。移动过去一年在社区也做了不少工作,希望新的一年,有更多的生态合作伙伴能参与到操作系统的工作中。移动在年后计划和社区联合做一些活动。”运营委员蒋绳奋说:“ 2022 年是比较困难的,所有做操作系统、做芯片或基础产品的公司,都艰难地挺了过来。相信在 2023 年大家能有一个明媚的未来。兆芯一直在和龙蜥社区进行合作,虽然我们在服务器处理器起步较晚,但我们已推出了最新的服务器处理器,也把相关的代码逐步地往社区贡献。”最后,运营委员会副主席金美琴做了运营会议总结。她说:“大家可以看到,每次开运营委员会的时候,会议文档的内容都非常详实,我希望能充分利用好每月一次的会议机会,能够尽可能完整又公开透明地把运营工作和计划同步给大家,联合活动、联合宣传、联合助力技术和产品推进商业合作,都是我们希望通过这个会达成的目的。今年的环境大家都很清楚,但是龙蜥依然能够专心投入去做事,也是因为市场的驱动和趋势使然,是因为龙蜥走下去的坚定决心。希望理事单位能够起到牵头作用,不管是技术合作、产品合作还是运营合作,都是对社区的贡献,各单位做好理事表率,每个人的一份力都在推动着社区往前走。互相借力,一起发光。”再次感谢各家理事单位技术委员代表、运营代表参与 2022 年度的社区会议,感谢各位一年来对社区工作的支持与贡献。本次会议内容将会继续同步在「社区品牌推广 SIG」中,欢迎关注。新的一年已经到来,祝愿全体龙蜥社区成员和龙蜥社区的盆友们,新年快乐,兔飞猛进!附:相关活动介绍1、首批招募 50 家!「龙腾社区生态发展计划」正式发布2、I see you!「2022 龙蜥社区优秀贡献者」正式启动—— 完 ——加入龙蜥社群加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。
文章
Rust  ·  Cloud Native  ·  安全  ·  算法  ·  测试技术  ·  Linux  ·  Anolis  ·  芯片  ·  开发者
2023-01-18
1 2 3 4 5 6 7 8 9
...
20
跳转至:
阿里云云原生
8669 人关注 | 6424 讨论 | 1961 内容
+ 订阅
  • OpenYurt v1.2 新版本深度解读(一): 聚焦边云网络优化
  • Sealer 0.9 :帮助集群和分布式应用实现 Build、 Share、Run
  • 全景剖析阿里云容器网络数据链路(二):Terway EN
查看更多 >
开发与运维
5608 人关注 | 131414 讨论 | 301025 内容
+ 订阅
  • 基于Ubuntu操作系统下的Docker 环境部署
  • Jenkins+GitLab自动化部署到Docker容器
  • springboot 整合 apache camel实现企业级数据集成和处理
查看更多 >
人工智能
2788 人关注 | 11324 讨论 | 96601 内容
+ 订阅
  • m基于随机接入代价的异构网络速率分配算法matlab仿真
  • 数据结构——算法的复杂度分析
  • m基于matlab的软件无线电注水功率分配算法性能仿真,对比C-PF,C-CUBP,C-DUBP等
查看更多 >
安全
1185 人关注 | 23953 讨论 | 81000 内容
+ 订阅
  • Jenkins+GitLab自动化部署到Docker容器
  • 手把手教你用Python做web疫苗登记系统
  • C语言基础--操作符详解
查看更多 >
云原生
233762 人关注 | 11314 讨论 | 45074 内容
+ 订阅
  • 基于Ubuntu操作系统下的Docker 环境部署
  • Jenkins+GitLab自动化部署到Docker容器
  • springboot 整合 apache camel实现企业级数据集成和处理
查看更多 >