Rust way to explore https:https://cdn.v2ex.com/navatar/2dac/e78f/790_normal.png?m=1632977380 https:https://cdn.v2ex.com/navatar/2dac/e78f/790_large.png?m=1632977380 2025-09-18T10:31:07Z Copyright © 2010-2018, V2EX 之前那个 rust 贡献大佬找到工作了,找他的团队还不少 tag:www.v2ex.com,2025-09-18:/t/1160295 2025-09-18T10:31:07Z 2025-09-18T10:31:07Z plko345 member/plko345 不是这个领域的真不知道有这么多公司在用。后面他选了 gpu 编程的公司。

原文 https://nnethercote.github.io/2025/09/16/my-new-job.html

微信文章 https://mp.weixin.qq.com/s/7EJCnBFamb910vArSvI40A

]]> 太快了! Rust 太快了! tag:www.v2ex.com,2025-09-18:/t/1160285 2025-09-18T09:48:31Z 2025-09-23T05:03:08Z cKnight member/cKnight 1. 背景

LZ 是一名在职的 Java boy ,花了上周一周的时间入门了 Rust 。周末使用 axum 写了个 web 项目,模拟了 SpringMVC 的架构。

2. 对比

均在我 mac 笔记本中进行测试

2.1 占用资源

这里可能不太公平。
Java 项目用了我之前的开源项目,虽然是个完整的项目但是也不是很大。没有打包成 jar ,使用 idea 启动,通过活动检测器根据 pid 查找发现占用内存494.2MB,JVM 配置:-Xms256m -Xmx4g 。
Rust 启动后发现内存占用为 2.0MB!!! 我人都傻了,虽然说是个很简单的项目,但是项目中必要的功能都有。

2.2 压测

为了进一步的看到差距,我开始了压测,代码如下。为了减少变量,没有加入 IO 操作,但也是正常的业务功能。
JAVA

 @Override public AiUserVO loginTest(AiUserReq userReq) { CommonUtils.checkArgs(userReq.getAccountNo(),userReq.getPassword()); AiUser user = AiUser.builder().accountNo("admin").password("admin").name("admin").build(); user.setId(1941040891798581249L); //校验登录 // checkLogin(user,userReq); AiUserVO result = ConvertUtils.beanProcess(user, AiUserVO.class); //处理用户角色 // processUserRole(user,result); //生成 token String token = genToken(user); result.setToken(token); //放入 redis String key = CacheKeyEnum.format(CacheKeyEnum.ADMIN_LOGIN_KEY,user.getId(),token); SysCacheUserDto sysCacheUserDto = ConvertUtils.beanProcess(result, SysCacheUserDto.class); //删除原始 token // removeToken(user.getId()); // redisCacheComponent.set(key,JSONObject.toJSONString(sysCacheUserDto),TimeConstant.ONE_DAY * 12); return result; } 

RUST

pub async fn login(user:UserReq)->Res<UserVO> { // 查询逻辑 let user_do = match query_user(&user.account_no, &user.password).await { Some(user_do) => user_do, NOne=> return Res::build(FAIL), }; let mut user_vo:UserVO = user_do.into(); //加密 let token = match security_utils::aes_encrypt(&user_vo.id.to_string()) { Ok(token) => token, Err(_) => return Res::build(FAIL), }; user_vo.token = token; let key = SYSTEM_USER.key().format(&[&user_vo.id.to_string()]); //删除缓存 GlobalCache::del(&key); //放入缓存 GlobalCache::set(key,serde_json::to_string(&user_vo).unwrap()); Res::success(user_vo) } /** * 查询用户 */ async fn query_user(account_no:&str,pwd:&str)->Option<UserDO> { let user = UserDO{ id:1912753992656158721, name:"admin".to_string(), account_no:"admin".to_string(), status:true, }; Some(user) } 

压测配置如下

Name: 线程组-30 Number of Threads: 200 Ramp-Up Period: 30 Loop Count: 1 Scheduler: Duration: 90 Name: 线程组-90 Number of Threads: 200 Ramp-Up Period: 30 Loop Count: 1 Scheduler: Startup Delay: 90 Duration: 90 

压测流程如下

阶段一:0~30 秒启动 200 线程 → 持续到第 90 秒 阶段二:从第 90 秒开始,30 秒内启动 300 线程 → 持续到第 180 秒 

压测结果对比如下

指标 RUST JAVA 差异
平均响应时间 3~4 ms 6~8 ms ↑ 上升 50%~100%
最大响应时间 17 ms 26 ms ↑ 上升 53%
99% 百分位 11~15 ms 15~20 ms ↑ 上升 30%~45%
吞吐量 6.7 → 10.0 req/sec 6.7 → 10.0 req/sec ✅ 相同
异常率 0% 0% ✅ 相同
数据包大小 294 B 489 B ↑ 增加 66%

]]>
介绍一个 like rails 的 rust 框架。 性能和开发速度都快。 tag:www.v2ex.com,2025-09-16:/t/1159789 2025-09-16T23:48:53Z 2025-09-20T07:15:52Z lairdnote member/lairdnote 最近找 rust 的后端对比了 actix 和 auxm 这些框架都很优秀。

loco-docs

]]>
除了写小工具外再也不想用 Rust 了 tag:www.v2ex.com,2025-08-29:/t/1155862 2025-08-29T11:10:31Z 2025-09-08T03:06:43Z tinybaby365 member/tinybaby365 新版本完全不考虑老系统的兼容。在 Windows 上还能靠 YY-Thunks 苟延残喘。在 Linux 下 cargo zigbuild 能搞定依赖的 glibc 版本,但搞不定 aarch64 环境 glibc 缺 API 。

]]>
rust 我想你了 tag:www.v2ex.com,2025-08-28:/t/1155476 2025-08-28T03:30:51Z 2025-08-27T19:29:51Z coderpwh member/coderpwh 忍不住想起它

想起它骨子里的坚定,克制,却又锋利

我敬畏,但也安心

它有清晰的边界感,每一个指针都有归属,每一次借用都遵循秩序

它不给我侥幸,却给我前所未有的安全

它的世界里没有野蛮的随意,没有未定义的空洞,只有规则下的极致自由

它能在不失控的前提下奔跑到极限,并发如风,却稳若磐石

Rust ,我想你了

]]>
rust 程序员的硬盘是多大的? nodejs 继任者? tag:www.v2ex.com,2025-08-23:/t/1154460 2025-08-23T10:25:43Z 2025-08-25T05:44:38Z cmos member/cmos 我怎么觉得 rust 比 nodejs 还占用硬盘空间,一个简单的网口 IP 上报程序,最后编译的程序大小 7.5M ,而 target 共 928M 。额外编译了 musl 之后,变成了 1.2G 。这要是多几个项目,多几个平台,1T 硬盘起步。

]]>
rust 练手写的,仿 uv 包管理器 av tag:www.v2ex.com,2025-08-20:/t/1153586 2025-08-20T01:00:06Z 2025-08-14T20:13:03Z LastWise member/LastWise 喜欢的可以 star 一下哈,更快更强

https://github.com/auv-sh/avav

av top av list avavavaavavavavavavavavavavavavavavavaavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavavavaavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavavavaavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavavvavavavavavavavav

]]>
Rust 的安全神话?为何在关键系统如数据库、大模型代码中仍选 C++ tag:www.v2ex.com,2025-07-22:/t/1146992 2025-07-22T15:35:35Z 2025-07-25T10:05:38Z mightybruce member/mightybruce
Moritz 首先承认了 Rust 的优点:理论上,Rust 通过其所有权系统和借用检查器,提供了远超 C++ 的默认安全性。这正是大家喜爱 Rust 的原因。

但问题在于,像 CedarDB 这样的高性能数据库,其开发工作远不止是处理业务逻辑。它需要深入到硬件的毛细血管中,榨干每一滴性能。这意味着:

使用大量底层的 CPU 特性。
实现复杂的侵入式数据结构。
进行带有验证的、乐观且激进的内存访问。
在这些场景下,Rust 的安全检查反而成了“束缚”。为了完成任务,你必须使用 Rust 提供的“逃生舱口”——unsafe 关键字。

而 Moritz 抛出的重磅炸弹正在于此:

“一旦你在 Rust 中写下 unsafe 代码,所有的赌注都将失效。在 unsafe 代码中,你遇到未定义行为( UB, Undefined Bahavior )的风险,甚至比在 C++ 中还要高。”
https://x.com/iavins/status/1946598328533430702 ]]>
rust 实现的抓包存盘的程序 nsave tag:www.v2ex.com,2025-07-17:/t/1145816 2025-07-17T05:34:19Z 2025-07-17T05:34:19Z chunhuitrue member/chunhuitrue 目前查询功能是一个独立的命令行程序。去文件目录根据结构查找。是不是应该仿照 redis mysql 这样的,又一个带会话的查询更好?现在正在考虑。

详情见: https://github.com/chunhuitrue/nsave

Nsave 是一个抓取并保存数据包的工具。它持续不断地抓取数据包,并保存到本地。可以根据条件查询链接、数据包并导出成 pcap 文件。可以通过 pcap 或者 af_xdp 来捕获数据包。主要特点是它不基于单个数据包,而是基于流来作索引,可以大幅减少索引所占的磁盘空间。

提醒

  1. 目前是开发阶段,不要应用在关键的生产环境。
  2. 需要配置单独的抓包网卡。管理网卡不能用于抓包,否则你会失去连接,因为加载的 xdp 程序会把网卡上所有的数据包都截获,不再流入内核。
]]>
有人使用 Rust 重构过旧项目吗? tag:www.v2ex.com,2025-07-11:/t/1144592 2025-07-11T07:52:38Z 2025-07-17T18:36:24Z red13 member/red13 原来的一个数据分析引擎,使用 C 开发的,C 开发效率太低了,debug 程序更是让人头大,打算使用 Rust 重构一下,学习了三四天,感觉 Rust 绝不是像 Python 那样看一上午就能开始项目然后边学边做的语言。 有没有用 Rust 重构过旧项目的朋友,来说说呗

]]>
使用 WebAssembly 构建的高性能在线计算工具 tag:www.v2ex.com,2025-07-01:/t/1142200 2025-07-01T03:23:52Z 2025-07-01T03:23:52Z zhuima320 member/zhuima320 WASM 计算器 - 使用 WebAssembly 构建的高性能在线计算工具

WASM 计算器 - 使用 WebAssembly 和 Rust 技术构建的高性能在线计算器应用,支持基础运算、百分比计算,界面美观,运行速度快,是您日常计算的理想选择。

地址👉: 在线地址

后续:

学习 wasm 的练手项目,新手上路,轻拍

]]>
很奇怪,为什么使用 Rust 开发的软件,作者喜欢把 Rust 作为宣传点之一 tag:www.v2ex.com,2025-06-18:/t/1139502 2025-06-18T10:16:15Z 2025-06-28T02:38:09Z Niunai member/Niunai 例如: t/1139495 再例如:shadowsocks-rust

使用软件的人,应该不太关心软件使用什么语言开发的吧?

]]>
tikio 里面的代码怎么调试呢 tag:www.v2ex.com,2025-06-17:/t/1139129 2025-06-17T03:54:24Z 2025-07-03T21:59:36Z ddddad member/ddddad 目前用 rustover gdb 断点进不去啊

]]>
有人在用 rust 写 web api 吗? tag:www.v2ex.com,2025-06-06:/t/1136828 2025-06-06T04:54:48Z 2025-06-20T11:23:26Z BeijingBaby member/BeijingBaby rust 来得快去得也快 tag:www.v2ex.com,2025-06-01:/t/1135711 2025-06-01T06:11:21Z 2025-06-01T14:15:35Z cj323 member/cj323
曾以为 rust 能改变 linux ,取代 C

现在 rust for linux 写个接口能被干


曾以为 rust 能借着 wasm 升天

现在 photoshop web ,figma 用 C++


曾以为 rust 的 deno 能干掉 nodejs

现在 deno repl 看个彩色 log


曾以为 rust 重写的 cli 是未来,alias, lsd, dust, dog...

现在 unalias, ls, du, dig... ]]>
rust 的有没有什么好的论坛? tag:www.v2ex.com,2025-05-29:/t/1135141 2025-05-29T05:23:13Z 2025-06-12T05:33:44Z webnewobject1 member/webnewobject1 我看 v2 的 rust 分区都不怎么活跃。官方中文社区给我感觉还不够,想看看大家有没有什么好的推荐。

]]>
这里搞 Rust 的多吗? tag:www.v2ex.com,2025-05-29:/t/1135037 2025-05-29T00:09:35Z 2025-06-05T17:09:43Z red13 member/red13 目前 Rust 最好的开发工具是哪个? tag:www.v2ex.com,2025-05-15:/t/1131954 2025-05-15T06:04:25Z 2025-05-16T12:12:19Z chambered member/chambered 1 、有些地方没打断点也莫名其妙的暂停在那
2 、枚举类型的变量看不到内部具体的值 ]]>
rust 编译报错函数重复定义 tag:www.v2ex.com,2025-05-14:/t/1131772 2025-05-14T09:38:50Z 2025-05-14T09:38:50Z shitcode member/shitcode 同时依赖了 v8 和 skia-safe ,当把 v8 版本从 129.0.0 升级到 137.1.0 时编译报错

667.3 = note: "cc" "-m64" "/tmp/rustcXFCL9g/symbols.o" "<1 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "/tmp/rustcXFCL9g/{libv8-dbef52e4bc4b6f8f.rlib,libskia_bindings-279c509e56943a3f.rlib,libzstd_sys-356ea57c902a259b.rlib}.rlib" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libcompiler_builtins-*}.rlib" "-Wl,-Bdynamic" "-ldl" "-ldl" "-lssl" "-lcrypto" "-ldav1d" "-lstdc++" "-lfontconfig" "-lfreetype" "-lEGL" "-lGL" "-lwayland-egl" "-lGLESv2" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/usr/lib" "-L" "/usr/local/lib/x86_64-linux-gnu" "-L" "/home/app/target/release/build/skia-bindings-60ededebb9dd8e7e/out/skia" "-L" "/home/app/target/release/build/zstd-sys-e9bd7677eed9b254/out" "-L" "/home/app/target/release/gn_out/obj" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/app/target/release/deps/render_http-e7adb05509d015b0" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-Wl,--strip-debug" "-nodefaultlibs" 667.3 = note: some arguments are omitted. use `--verbose` to show all linker arguments 667.3 = note: /usr/bin/ld: /tmp/rustcXFCL9g/libskia_bindings-279c509e56943a3f.rlib(libicu.uloc.o): in function `ulocimp_getParent': 667.3 uloc.cpp:(.text.ulocimp_getParent+0x0): multiple definition of `ulocimp_getParent'; /tmp/rustcXFCL9g/libv8-dbef52e4bc4b6f8f.rlib(uloc.o):./../../../../third_party/icu/source/common/uloc.cpp:1685: first defined here 667.3 collect2: error: ld returned 1 exit status 

有没有大佬提供帮助

]]>
Rust 学习几个月之后,真正要自己写的时候就懵逼 tag:www.v2ex.com,2025-04-24:/t/1127817 2025-04-24T08:23:04Z 2025-05-05T02:16:40Z 5261 member/5261 Rust 入门这几个月之后,主要学了 axum 、tokio 、tonic 这些后,然后准备自己写个 tg bot api 玩玩,发现已经有现成的 teloxide ,然后再这个基础上写自己的 bot api

写到一半的时候发现还是有很多内容不熟悉,看文档的时候都知道是咋回事,真正自己上手写的时候就懵逼

这种感觉真的太受挫了!

]]>
关于 rust axum 中使用 gprc 的一个疑惑 tag:www.v2ex.com,2025-04-17:/t/1126092 2025-04-17T02:42:53Z 2025-04-17T04:39:59Z 5261 member/5261

如果 web 项目用到 gRpc 的话,通过 protoc 创建的这些服务,只能通过 layer 贯穿到整个服务中吗??

那正常的一个项目假如有几十上百个服务的话,那不是这个.layer(Extension(Arc::new(model::AppState::new(cate, topic, tera)))); 会很臃肿,因为要把这几十上百个服务都累加进去?

]]>
std::net::UdpSocket 的 shutdown 机制是我理解出了问题么? tag:www.v2ex.com,2025-04-17:/t/1126084 2025-04-17T02:33:27Z 2025-04-22T00:03:03Z zhwguest member/zhwguest std::net::UdpSocket 不提供 shutdown()接口,只能通过 drop 了所有的对象后自动关闭。

但是我正阻塞在该对象上进行读取,又怎么可能通过 drop 该对象来触发关闭呢?

请别告诉我要非阻塞调用,或者轮询调用,或者其他解决方案,我只是觉得接口这么设计我有点无法理解。

]]>
写了一个从 modelscope 下载模型的 crate tag:www.v2ex.com,2025-04-15:/t/1125641 2025-04-15T08:55:47Z 2025-04-15T08:55:47Z yunyi93 member/yunyi93 models-cat

models-catModelScope Hub 的非官方 Rust 客户端,设计灵感来自 hf-hub。models-cat 源自一个简单的需求:“编写一个 Rust 桌面端 AI APP ,需要下载模型和数据集,但是没有合适的 Rust 客户端。”

什么时候需要 models-cat 下载模型?主要有三个原因:

  1. 网络原因,无法使用 hf-hub 访问 huggingface
  2. 虽然使用 hf-hub 也可以从 hf-mirror 下载模型,但稳定性和下载速度无法保证。
  3. 将模型托管在 ModelScope Hub 上,可以保证稳定性和下载速度。但 hf-hub 不兼容 ModelScope, 需要使用 models-cat 。

顺便说下,ModelScope 托管模型真香,国内下载速度贼快、稳定、免费。

功能特性

使用示例

同步下载:

use models_cat::{download_model_with_progress, ProgressBarWrapper}; download_model_with_progress( "BAAI/bge-small-zh-v1.5", "model.safetensors", ProgressBarWrapper::default(), ).unwrap(); 

异步下载:

use models_cat::asynchronous::{download_model_with_progress, ProgressBarWrapper}; download_model_with_progress( "BAAI/bge-small-zh-v1.5", "model.safetensors", ProgressBarWrapper::default(), ).await.unwrap(); 

异步下载需开启特性tokio特性:

models-cat = { version = "*", features = ["tokio"] } 

从 ModelScope 的托管仓库 BAAI/bge-small-zh-v1.5 下载模型到本地,默认保存在[HOME_DIR].cache/modelscope/hub/models--BAAI--bge-small-zh-v1.5/目录下。

使用快捷函数时,可通过环境变量MODELS_CAT_CACHE_DIR设置本地缓存路径。或者使用ModelsCat,在初始化时传入本地缓存路径。

]]>
看到这样的 rust 代码要懵逼了,不知道咋入手,求指导 tag:www.v2ex.com,2025-04-11:/t/1124699 2025-04-11T03:28:14Z 2025-04-24T13:53:15Z 5261 member/5261 pub async fn list( State(state): State<ArcAppState>, Query(frm): Query<form::subject::ListForAdmin>, ) -> Result<resp::JsonResp<model::subject::SubjectPaginate>> { let handler_name = "admin/subject/list"; let p = get_pool(&state); let subjects = model::subject::Subject::list( &*p, &model::subject::SubjectListFilter { pq: model::subject::SubjectPaginateReq { page: frm.pq.page(), page_size: frm.pq.page_size(), }, order: None, is_del: frm.is_del(), status: frm.status, name: frm.name, slug: frm.slug, }, ) .await .map_err(Error::from) .map_err(log_error(handler_name))?; Ok(resp::ok(subjects)) } #[derive(Debug, Default, Deserialize, Serialize, sqlx::FromRow, Db)] #[db(table = subjects, pk = id, del_field = is_del)] pub struct Subject { #[db(find)] #[db(skip_update)] pub id: String, #[db(list_opt)] #[db(list_opt_like)] pub name: String, #[db(find)] #[db(exists)] #[db(list_opt)] #[db(list_opt_like)] pub slug: String, pub summary: String, #[db(find_opt)] #[db(list_opt)] pub is_del: bool, pub cover: String, #[db(list_opt)] pub status: Status, pub price: Decimal, pub pin: i32, }

作为 Java 开发,看到这个 list 方法本能的想跳转过去看下这个 model::subject::Subject::list 方法的实现咋写的,但是跳转过去是宏? 那我咋知道最后是咋写的呢?

实在是懵逼~

]]>
Rust 两次入门后,尝试写一个 web 项目,懵逼中~ tag:www.v2ex.com,2025-04-08:/t/1123904 2025-04-08T03:39:20Z 2025-04-19T22:26:34Z 5261 member/5261 尝试多次入门后,用了以下一些框架

axum:web framwork sqlx:sqlboy

写着写着感觉用 rust 写 web 项目总感觉哪里味不对,一直在反思这 rust 写 web 应用真是适合吗?

就目前 orm 框架 sqlx 、seaorm 、diesel 都还在讨论哪个牛逼~

不像 Java ,mybatis 用起来那么爽~ 我既想要 orm 的字段映射到对象,也想要自定义查询的灵活~

]]>
求帮打包个 exe tag:www.v2ex.com,2025-03-18:/t/1119445 2025-03-18T14:18:01Z 2025-03-18T16:19:16Z make115 member/make115 https://github.com/tchebb/bose-dfu

]]>
Rust HTTP Client, Golang tls-client/utls 的完美替代品 tag:www.v2ex.com,2025-02-08:/t/1109942 2025-02-08T08:17:33Z 2025-02-08T14:24:51Z 0x676e67 member/0x676e67 golang tls-client/utls 的完美替代品

Client 是基于 reqwest 的分支,修复了 HTTP 版本协商问题,并增强了对 WebSocket ( HTTP1/HTTP2 )的支持,同时优化了常用 API 和连接池的性能。

  1. Features
  1. Repository
]]>
Rust 编写的高性能 HTTP/HTTPS/SOCKS5 代理服务器 tag:www.v2ex.com,2025-01-24:/t/1107721 2025-01-24T14:57:34Z 2025-03-19T12:42:55Z 0x676e67 member/0x676e67
  • 可配置并发限制
  • 服务绑定 CIDR 地址
  • 指定 CIDR 子网范围
  • 基本身份验证
  • 代理扩展
  • repo: https://github.com/0x676e67/vproxy

    ]]>
    Rust API 开发脚手架 tag:www.v2ex.com,2025-01-24:/t/1107675 2025-01-24T09:32:32Z 2025-02-13T01:10:56Z IIInsomnia member/IIInsomnia Rust API 开发脚手架,一键自动生成项目,支持 salvoaxum 框架,并同时支持创建「单应用」和「多应用」

    安装

    Cargo install yiirs 

    地址

    https://crates.io/crates/yiirs

    ]]>
    FnOne 特征是至少调用一次还是只能调用一次? tag:www.v2ex.com,2025-01-24:/t/1107663 2025-01-24T09:01:19Z 2025-01-23T21:01:19Z tedzhou1221 member/tedzhou1221 在看 B 站上的教程,看到关于 move 和 闭包的东西。 地址是 https://b23.tv/dXol75P

    其实中说 FnOne 是至少调用一次。

    还有 Rust 圣经中也同样这么说。 内容如下:

    所有的闭包都自动实现了 FnOnce 特征,因此任何一个闭包都至少可以被调用一次

    但 Kimi 的解释是:

    FnOnce 的设计目标是确保闭包在调用时可以安全地消耗变量的所有权,而不是强制要求闭包必须被调用。换句话说:

    “只能调用一次”:闭包被设计为只能调用一次,以避免多次调用导致的错误。 “至少调用一次”:这不是 FnOnce 的要求。闭包可以选择不被调用,但一旦调用,就不能再次调用。 

    大致意思就是“只能调用一次”

    我的理解也是只能调用一次。

    ps: 前几天看到有个推荐 Rust 教程的页面,说《 Rust 语言圣经》错误太多。我现在找不到出处了。请问有哪些是错误的?

    ]]>
    大佬们,一人来一道 Rust 面试题,准备年后跳槽 tag:www.v2ex.com,2025-01-24:/t/1107525 2025-01-24T02:58:44Z 2025-01-27T12:08:27Z automationIan member/automationIan
    最好有 DEX 方向的 ]]>
    请教 rust 如何做到交叉编译 tag:www.v2ex.com,2025-01-22:/t/1107051 2025-01-22T05:23:02Z 2025-02-25T15:52:48Z dxatgp02 member/dxatgp02 有一些写好的 rust 想放到 raspi 上面跑试试 网上查了"rust cross compile arm64" 用过

    cargo build --target aarch64-unknown-linux-gnu -r 

    也试过 cargo 配置文件里加

    [target.aarch64-unknown-linux-gnu] linker = "aarch64-linux-gnu-gcc" rustflags = ["-L", "/usr/lib/gcc/aarch64-linux-gnu/13.1.0/tmp/usr/lib/"] 

    都解决不了,放到 raspi 编译一次要很久。

    ]]>
    理了一下手上惯用的一些命令行小工具,发现蛮多是 rust 写的。是不是 rust 也适合做这种小工具 tag:www.v2ex.com,2025-01-21:/t/1106704 2025-01-21T02:35:37Z 2025-01-21T22:27:00Z DigitalG member/DigitalG 最近有次重装系统,安装一些用惯了的命令行小工具。之前没注意,发现都是 rust 写的。

    比如:

    1. mise: 管理一些环境版本;
    2. justfile: makefile 的替代;
    3. uv: python 包/虚拟环境管理
    4. blink.cmp: neovim 的一个补全插件
    5. fd: 文件查找,find 的替代
    6. rg: ripgrep, grep 的替代

    比较突出的特点是比同类的其他工具都更快,用起来也确实很明显。我自己主要用 C++/Python ,想拿 rust 业余玩下(主要也是做些自己用的命令行小工具吧)。有啥上手的小项目推荐吗?(上面几个粗略瞄了眼有点大)

    ]]>
    rust 怎么不通过管理员权限的情况下拿到 windows 用户所有的 uwp 应用名称,图标和路径 tag:www.v2ex.com,2025-01-20:/t/1106556 2025-01-20T09:09:38Z 2025-01-20T09:09:38Z horou member/horou 目前网上搜索到的方式都是需要管理员权限,但是我看有其他应用不需要管理员权限也能拿到,怎么实现的

    ]]>
    统计下放弃 RUST 的人的数量=== tag:www.v2ex.com,2025-01-16:/t/1105502 2025-01-16T03:33:36Z 2025-03-29T14:14:39Z FreeWong member/FreeWong 如果你花费了一个月以上的时间学习,最终放弃了 RUST ,跟贴 +1 如果你愿意的话

    ]]>
    关于 Rust 所有权,如果对 mut 变量进行嵌套 mut 引用该怎么理解? tag:www.v2ex.com,2025-01-15:/t/1105376 2025-01-15T13:35:05Z 2025-01-16T05:56:09Z KlesaOff member/KlesaOff 最近在自学 Rust ,因为之前粗略看过一些博客教程,所以这次直接看Programming Rust这本书的翻译版,在第 5 章“引用”中遇到一个例子,感觉不能理解。

    首先看书中图 5-9 的所有权树,讲了对于可变和不可变引用时的访问关系,我以为自己理解了,可是后面看到这个例子,结果又看不明白,代码是这样的:

    ... 也可以再次借用一个可变引用: let mut v = (136, 139); let m = &mut v; let m0 = &mut m.0; // ok:从可变引用重新借用可变引用 *m0 = 137; let r1 = &m.1; // ok:从可变引用重新借用共享引用,并且和 m0 没有重叠部分 v.1; // error:通过其他路经访问仍然是禁止的 println!("{}", r1); // r1 在这里使用 

    其实从第一个 ok 注释那里我就没搞明白,不是说变量只能同时存在一个可变引用吗,为什么有可变引用(“引用”为名词)m 的情况下还能从 m 那再可变引用(“引用”为动词)一个 m0 ?

    然后我问 gpt ,它是这么回答的:

    ...

    嵌套 mut 引用的场景

    假设你有一个可变变量,并希望对其创建嵌套的可变引用。以下 是一些常见的情况及其分析。

    情况 1:对整个变量的可变引用,然后尝试对部分值的可变引用

    fn main() { let mut x = (1, 2); let r1 = &mut x; // 对整个变量 `x` 的可变引用 let r2 = &mut r1.0; // 尝试对 `x` 的一部分创建可变引用 *r2 = 42; // 修改部分值 r1.1 = 99; // 修改另一部分 } 

    错误原因: Rust 编译器会报错,提示 不能同时借用 x 的多个可变引用。这是因为:

    r1 是对整个 x 的可变引用,它控制了 x 的独占访问权。 当你尝试对 r1.0 ( x 的某个字段)创建可变引用时,r1 的作用域依然活跃,Rust 无法区分你是否会同时操作 x 的其他部分。

    错误示例的编译器消息(可能类似于):

    error[E0499]: cannot borrow `r1.0` as mutable more than once at a time 

    ...

    但事实上,我尝试了类似代码,并不会报错:

    fn main() { let mut v = (136, 139); let m = &mut v; let m0 = &mut m.0; *m0 = 137; m.1 = 42; println!("{:?}", v) } 

    其运行结果是:

    (137, 42) 

    很多资料都没有讲解关于这种嵌套的引用会发生什么结果,也不知道什么情况是可以什么是不行,我没看过这例子时还以为压根不能创建 m0 呢,所以想着找 GPT 问问,结果告诉的内容是错的。

    请问该如何解释上面书中的代码,如何更好地理解 Rust 在这种嵌套情况下创建引用的做法是否成功?请各位赐教

    ]]>
    RUST 应用打压力 sys_cpu 高到 user_cpu 这种是正常吗 tag:www.v2ex.com,2025-01-15:/t/1105351 2025-01-15T10:46:56Z 2025-01-15T12:16:56Z dxatgp02 member/dxatgp02 刚开始学 actix-web 目前用到的包是 redis-rs tokio actix-web serde

    ]]>
    Rust 在线环境摸索(四): cfg、not tag:www.v2ex.com,2025-01-15:/t/1105177 2025-01-15T02:06:14Z 2025-01-14T22:06:14Z xuanwu member/xuanwu https://zhuanlan.zhihu.com/p/18341231954

    // This function only gets compiled if the target OS is linux #[cfg(target_os = "linux")] fn 在跑 linux() { println!("你在跑 linux!"); } // And this function only gets compiled if the target OS is *not* linux #[cfg(not(target_os = "linux"))] fn 在跑 linux() { println!("你昧在跑 linux!"); } fn main() { 在跑 linux(); println!("确定?"); if cfg!(target_os = "linux") { println!("是。的确!"); } else { println!("是。不是!"); } } 
    ]]>
    rust 有啥简单的安装包加固工具吗 tag:www.v2ex.com,2025-01-07:/t/1103288 2025-01-07T11:55:01Z 2025-01-07T11:55:01Z iliaoliao member/iliaoliao Fish Shell 發佈使用 Rust 重寫的 4.0 beta tag:www.v2ex.com,2024-12-30:/t/1101241 2024-12-30T05:31:54Z 2024-12-30T05:59:46Z mizuhashi member/mizuhashi https://fishshell.com/blog/rustport/ ]]> vscode 中, 声明宏内部不能代码跳转 tag:www.v2ex.com,2024-12-27:/t/1100768 2024-12-27T09:08:22Z 2024-12-27T09:06:22Z cuihua member/cuihua 大家好,代码如下,我不能从宏内部进行跳转, 是当前 vscode 还未支持该功能吗?

    fn func_print(name: &str) { println!("Hello, {}!", name); } macro_rules! func_macro { ($name:expr) => { func_print($name); }; } fn main() { func_macro!("laozhu"); } 
    ]]>
    rust 大抵是病了,它担心大家太容易掌握了 tag:www.v2ex.com,2024-12-27:/t/1100616 2024-12-27T02:08:43Z 2025-01-15T16:51:35Z 5261 member/5261 举个例子

    闭包

    fn add_one_v1 (x: u32) -> u32 { x + 1 } let add_one_v2 = |x: u32| -> u32 { x + 1 }; let add_one_v3 = |x| { x + 1 }; let add_one_v4 = |x| x + 1 ; 

    初看确实好理解,也能掌握,就算再加上

    immutable 、mutable 、move 也能理解

    但是再 加上边界 、FnOnce 、Fnmut 这些就给我整不会了,干懵逼了

    impl<T> Option<T> { pub fn unwrap_or_else<F>(self, f: F) -> T where F: FnOnce() -> T { match self { Some(x) => x, NOne=> f(), } } } 

    我只想说 rust 是所有语言中把符号运用到极致的语言!

    继续苟着看下去!

    ]]>
    咨询 rust 如何方便修改, 集成第三方 crate. tag:www.v2ex.com,2024-12-18:/t/1098384 2024-12-18T02:08:30Z 2024-12-18T02:14:20Z kyonn member/kyonn 在写 rust 小工具, 碰到个问题, 依赖的第三方 library 有几个小 bug, 我能想到的常规做法可能是 fork 下这个第三方库, 改完后也上传到 crate.io, 然后引用这个修改后的 package, 最后提个 PR 给原始仓库的作者.

    这一套下来感觉比较麻烦, 有没有办法直接将这个第三方 package 嵌入我的 rust 工程? 能想到比较笨的办法是直接把这个库的源码拷贝进我的工程, 然后将它的 Cargo.toml 内容集成进我的配置文件, 它的源文件嵌入我的工程.但是这么修改破坏了原本的工程结构.

    有没有这样一种办法, 以类似离线的方式引用这个库, 其它库还是在线引用, 但是这个离线库跟我自己的 rust 工程存在同一个 git 仓库, 这样我能方便修改库的代码. 相当于我的一个 git 仓库中存在 2 个独立的 rust 工程, 1 个是我的工具工程, 另一个是拷贝过来的 库 工程, 但是工具工程可以用 package 的方式引用这个库工程.

    这么做可以快速把工具开发出来, 另一方面, 等库的原作者接受 PR 后, 也能方便把引用的库切换回去, 而不用调整工程结构, 只要把引用的 package 修改下, 然后从工程仓库删除修改后的 library 即可.

    ]]>
    Rust 写 Javascript Binding 的最佳实践? tag:www.v2ex.com,2024-12-08:/t/1095868 2024-12-08T04:18:21Z 2024-12-08T05:49:01Z huangyezhufeng member/huangyezhufeng 原始需求是为一套算法代码同时写 Python 和 JS Binding ,Python 的 Binding 用 PyO3 就很不错,想请教下 JS 的 Binding 用什么框架比较好呢?

    目前了解到一个neon框架,但是社区看起来并不活跃,不知道有没有其他框架可以用?另外还有个问题就是依赖这些框架带来的维护成本会不会特别高?希望有相关实践的朋友指点一下,谢谢!

    ]]>
    之前是写前端的,最近看完《The Rust Programming Language》想自己做个项目练练手,不知道做哪个方向的项目比较适合 tag:www.v2ex.com,2024-12-06:/t/1095565 2024-12-06T08:37:32Z 2024-12-13T05:23:43Z EL743 member/EL743 RustRover 使用 LLDB 调试器会把无符号解释成有符号 tag:www.v2ex.com,2024-12-03:/t/1094664 2024-12-03T06:10:05Z 2024-12-08T11:21:40Z EeveeRibbon member/EeveeRibbon https://youtrack.jetbrains.com/issue/RUST-12726/Unsigned-values-display-as-signed-in-debug-tool-window
    太离谱了 ]]>
    Telegram 上 Rust 众群组怎么不见了 tag:www.v2ex.com,2024-11-27:/t/1093000 2024-11-27T02:26:51Z 2024-11-27T02:30:40Z araaaa member/araaaa 一个 rust 溢出的问题 tag:www.v2ex.com,2024-11-26:/t/1092643 2024-11-26T01:32:17Z 2024-11-26T01:56:47Z wjx0912 member/wjx0912 #[warn(unused_parens)] fn main() { let mut a: u8 = 199; if (a > 2) // 改成 a <2 就正常了 { a += 199; } println!("{}", a); }

    程序直接退出了。应该是运行时检测的,好奇是怎么实现的(如果加法都有判断的话,运行时怎么保持高性能),有木有大佬解释下?

    ]]>
    基于 rust,自带内网穿透,支持海量节点推送,附带企业级 webssh 控制台的作业调度平台 jiascheduler 下周内测了 tag:www.v2ex.com,2024-11-08:/t/1087726 2024-11-08T05:52:14Z 2024-11-08T05:52:14Z iwannay member/iwannay jiascheduler 调度无限制,连通无界限,基于 rust 的自动化作业调度平台

    前言

    好多年前 iwannay 写了一款名为 jiacrontab 的任务调度软件,帮助到了一些同学; 开源有种魔力,总是激励着人走的更远,感谢每一位赞助过该项目的同学。

    jiascheduler 是什么,服务于哪些人

    如果你是一位程序开发者,你希望能够把手头杂乱的定时任务管理起来,能够随时启动和停止,最好还能看到执行日志;

    如果你是网站管理员,你希望有一个统一的 web 控制台可以管理各大云厂商的服务器,而不需要频繁切换不同的云厂商控制台去操作;

    如果你是一位运维管理者,你希望有一个平台能够统一管理海量的运维脚本,实时的把各类型功能脚本推送到数以万计的实例上,并收到执行反馈;

    如果你是一个自由职业者,你刚好在腾讯云买了台服务器,你想通过某个工具给家里的电脑安排一个任务,比如....;

    嗯...,除了这些...

    我还有一些特殊场景,我想把几个无关的任务串联起来,最好还能做些逻辑判断,比如我想先检查下我的服务器实例是否安装了 nginx ,如果没安装我就安装,安装了我就部署一个网站。最好这个流程可以开放为一个接口,我调用接口就完成了!

    如果你有以上需求,jiascheduler 将是一个不错的选择。何况 jiascheduler 还提供了一个企业级的,及其好用 webssh 终端。这个要划重点。

    jiascheduler 架构

    图片来自网络

    jiascheduler 特性

    请注意,部分功能会在后续版本实装

    jiascheduler 功能集锦

    作业

    一个可以自动化执行的任务。

    根据表现形式,可以是一个接口,一段 shell 脚本,一个可以执行的二进制命令

    作业

    定时器

    可以给作业添加执行计划,让作业按照预期的定时策略自动执行

    定时器

    作业编排

    根据业务场景的不同,往往需要将多个 job 组合编排为一个新的 job 。作业编排即根据不同条件,串行,并行的组合不同 job 为一个可以新 job 过程。

    定时器

    批任务

    一个作业可以同时关联多个子任务,子任务作为批任务的形式存在,可以对批任务的输出进行自定义表达式校验,这个功能可用于巡检

    定时器 定时器

    调度

    在启动作业时,会选定关联的作业,和需要执行的节点,生成一份快照,这个操作被称为作业调度。我们可以根据调度记录,重新执行执行过的作业

    定时器

    运行状态管理

    可以实时的管理正在运行的作业,比如停止定时器,kill 进程,重新启动作业

    定时器

    webssh 终端

    操作便捷,功能强大,支持多页签,自定义主题,分屏,全屏,多会话批量命令,上传,下载

    定时器

    结语

    以上为 jiascheduler 的简单介绍,请关注 https://github.com/jiawesoft/jiascheduler 获取最新发布动态

    ]]>
    用 Rust 写了个简单的类似 OpenAI Swarm 多 Agent 调度框架(实验性质) tag:www.v2ex.com,2024-11-03:/t/1086226 2024-11-03T11:08:21Z 2024-11-03T11:06:21Z rustiiiiii member/rustiiiiii 目前就支持简单的 Agent 定义和 Tool 定义,不到 500 百代码,有兴趣的可以点击看看

    https://github.com/keith666666/swarm-rs

    ]]>
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86