rust 用来开发一些命令行程序是不是神器

67 天前
 iorilu

最近又把 rust 捡起来学了

上次学了 2 个星期把

这次决定至少学完一本书把

我看的是 programming rust 第二版

主要目的是可能个人需要一些命令行程序, 虽然 python 方便, 但编译出来至少几十 m, 太大 而且编译麻烦

rust 至少随时就编译出来了, 方便用

6900 次点击
所在节点    Rust
57 条回复
standchan
66 天前
go 也不错
vvhy
66 天前
@Yadomin 确实,小项目几个 G 起步,中等项目一百多 GB
kk2syc
66 天前
@w568w 如果功能稳定的话 4 年不更新也不是不能用
zhouyin
66 天前
@Goooler
modern unix 怎么安装
libook
66 天前
上周刚用 Rust 写了一个命令行程序,总体上中规中矩,跟其他大多技术栈区别不大。

rust 、go 这类的编译完可以不依赖运行时,python 、perl 这类绝大多 Linux 都自带运行时,其实都还行。

大小其实无所谓,现在硬盘都那么大了。

编译速度其实也还好,因为用户使用的时候主要使用编译生成的可执行文件,只需要开发者发版或用户安装的时候编译一次就行了。

主要还是看你的个人喜好,以及当前项目有没有对一些技术特性有强依赖。
w568w
66 天前
@kk2syc 稳定是稳定,但是大多还有一堆报告不兼容性或者 bug 的 issue 没修,作者基本也摆烂了……

另外,楼主问的是 Rust 和其他语言相比的优缺点吧?

1. 论跨平台,静态编译方面 Rust 早就超过 Go 了。还认为「 Go 的跨平台是独家优势」的该更新更新观念了;

2. 论易用性,Rust 有 clap 之类的神器,一键生成 help message 、schema 和类型校验,不像 Go 每个参数的解析要写一些像 python argparser 那样的 boilerplate 。而且 Go 的哲学是 verbose is better than implicit ,适合写网络解析之类的通信逻辑,对命令行工具很不友好;

3. 论生态,Rust 的命令行解析器和 CLI 基本都在活跃更新,而且都卷出新高度了( https://github.com/rosetta-rs/argparse-rosetta-rs ,看这里,甚至在卷毫秒级的解析性能和内存占用)。

作为被 Go 折磨的人,我实在不推荐这种需求上 Go 。
w568w
66 天前
@w568w 补充一句:不是说 go 不好。只是这种场景下,rust 确实领先 go 太多了。
Nasei
66 天前
@w568w 请问 rust 有什么可以同时搞定命令行和配置文件的库吗,几年前看似乎比较别扭,不知道现在怎么样了
guanzhangzhang
66 天前
只要不是 cgo ,golang 能自带交叉静态编译,我 windows ,开发 linux 机器上,家里路由器上都有 cli tool 。
sagaxu
66 天前
@w568w

go 标准库现在支持 xxx.map(...).filter(...).reduce(...)这种写法了吗?还像以前那样干啥都要写 for ?

错误处理支持 Exception 或者 Result<T, E>这种风格了吗?还是像以前一样满屏幕的 if err ...?
w568w
66 天前
@Nasei 你是想找一个 https://github.com/spf13/viper 那样的库吧?这种大而全的库我确实没看到比较好的,clap 本身不支持,还在讨论中(虽然已经讨论 6 年了)。

可以用 clap + config + clap_config 来做,总共也就多写一行代码。也有一些相对不流行的包实现了多来源参数合并,例如 hyperparameter 、argone 。

@sagaxu 不支持,干啥都要写 For 。当然也可以自己写一个 Map 之类接受闭包的函数,但 (1) 我没找到过好用的工具包;(2) Go 的闭包函数不是零成本的,会损失性能,高性能场景慎用。
DOLLOR
66 天前
@charlie21

Dart SDK 本身就可以开发命令行程序,比如简单的 HTTP 服务器,不需要 flutter SDK 之类。
然后给你的编辑器(比如 vscode )装个语言扩展。

纯 Dart 语言开发照着官网教程就可以
https://dart.dev/language
https://dart.dev/resources/dart-cheatsheet
Dart SDK 相关
https://dart.dev/get-dart/archive
https://dart.dev/tools/dart-compile
cwcc
66 天前
为什么不试试最好的语言( PHP )呢?现在可以打包成单文件执行了(狗头)
https://static-php.dev
PureWhiteWu
66 天前
看你的具体目标和 ROI 了。
如果是写一个非常简单的,对性能没啥要求的,一次性的(不咋会维护迭代 or 加功能)命令行工具,那么 go 或者 python 就成,实在不行 bash 糊一下都是可以的。
如果是要长期维护迭代的项目/重要的项目/对性能稳定性有要求的项目,那么就 Rust 吧。不说性能安全性这些,光抽象能力和表达能力都甩 Go 不知道几条街了。

利益相关:Go 和 Rust 都写过,目前主要写 Rust 。
a132811
66 天前
@w568w go 也有 urfave/cli 等工具提供一键生成 help message 、config 、type checking 。golang 算是 rust+python 的折中方案。

@sagaxu go 泛型库 lo 可避免写 for 、interface 转换。如果想用函数式的话,可试试 ibm 的 fp-go 库。

错误处理避免 if err 的话,可以像 bufio scan 的方法那样避免 if err 。不过平时开发一般还是 if err 简单顺手。另外错误 chain 是一定要支持,方便定位错误的调用栈
iyear
66 天前
Go 。兼顾了开发者数量/CLI 生态/学习难度。

至于楼上的回复,不知道 kubectl 、gh cli 、hugo 、lxc 能不能在他那算“长期维护迭代的项目/重要的项目/对性能稳定性有要求的项目”?🤔 https://github.com/spf13/cobra/blob/main/site/content/projects_using_cobra.md
timothyye
12 天前
Rust 确实比较适合开发一些 cli 的小工具,今天又挖了个坑:
https://github.com/TimothyYe/tcping

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1057211

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX