想写一些小工具,主要是基于命令行上进行操作的工具,想问问大家哪个语言来写比较方便
1
westoy 2023-07-04 00:26:56 +08:00 24
golang 大法好
|
2
alexapollo 2023-07-04 00:32:46 +08:00 1
我觉得写小工具可能还真是 https://github.com/geekan/MetaGPT 这个比较方便……
|
3
H0H 2023-07-04 00:40:13 +08:00 3
Java 这类最通用的跨操作系统的语言就可以。然后用 Native 语言给写个启动器来找到 JRE 后将相关参数传进去启动即可,Windows 下面我用汇编语言写了启动器,你可以选择用 Visual Studio 下的 C++来写这个启动器; macOS 下我就用那个 Swift 写了启动器。
其实只要你会用 native 语言来写这个启动器,那么各种编程语言都能制作成一个单独的 exe 文件。只不过一般人不会要求全部合并成一个 exe 文件,都是一个 exe 文件带很多 dll 或 jar 包等。 比如 Java 写的程序非要合并成一个 exe ,那么就可以将 JRE 、Jar 包作为资源文件放到启动器那个 exe 中,这样就变成了一个单独的 exe 程序。启动器启动后,将 JRE 、jar 包释放到临时目录运行就行了。 |
4
Trim21 2023-07-04 00:44:37 +08:00
golang ,交叉编译很方便。
|
5
LeeReamond 2023-07-04 00:46:10 +08:00 8
@H0H 你这个方法要是算简单的话那大部分语言都挺简单。。。小工具+好编译成二进制=go 或者 rust
|
6
jackmod 2023-07-04 00:50:49 +08:00
能够比较简单制造 exe 的话估计只有 golang 和 rust 了,不过 linux 下的 rust 需要使用 musl 达到 static
|
7
fbichijing 2023-07-04 01:09:46 +08:00
你提出的问题和描述似乎不太相同啊。
如果是 exe 的话不是基本上圈定 C, C++ 了吗?独立的可移植的 exe 文件。 如果是基于命令行进行操作的工具,那我觉得使用 python 写命令行是十分舒服的。 写成一个 package ,自定义喜欢的全局命令,只要存在 python 环境自己安装一下就能全局使用了。现在的服务器基本上都预装有 python ,所以就像是写一次可以各个地方运行了。 因为平时经常有这需求,而这种全局命令的文件格式又十分固定。所以我写成一个十分简单的 package 放在 pypi 上,方便自己使用......用来方便自己构建全局命令。 ------ 以下只是我自己平时的使用方式,因为自己写的这个 package 很简单,只是作为举例之用。 pip install package-gen 然后提供了一个全局命令:pk-gen 比如: pk-gen mytest 就生成一个 package 的模板,往里面定义自己想要的全局命令,然后将实现代码敲出来就行了。比起去弄 gui ,全局命令这方面写起来就很舒服。 |
8
Trim21 2023-07-04 01:12:30 +08:00
|
9
Licsber 2023-07-04 01:14:16 +08:00
我的设备同时有 linux bsd mac win 所以我的小工具包已经成 python 改成 golang 了
非常方便改下 GOOS 就能换系统 改 ARCH 就能换架构 目前工具类型涵盖了文件元信息计算、文件夹统计、去重、获取微信 token 、快捷打印、检测电脑是否摸鱼(空闲微信提醒)等 |
10
Licsber 2023-07-04 01:16:36 +08:00
|
11
kljsandjb 2023-07-04 01:21:10 +08:00 via iPhone
Rust 挺合适的
|
12
u823tg 2023-07-04 01:25:27 +08:00
为啥一定要 exe 之类二进制文件呢, 小工具还是命令行不是脚本语言最好用吗,随时更改的。
|
14
Al0rid4l 2023-07-04 01:28:11 +08:00 1
生态上 go rust, 很多 tui 以及其他 cli 相关的库, c/c++ 生态不用说, 但是和方便不搭边
产物体积小且快, rust zig 方便且跨平台, go rust c# zig, 后面两个生态差点, 综上 go rust java graalvm 应该也可以, 没用过 |
15
lhbc 2023-07-04 01:34:03 +08:00 via Android
golang 最佳
别用 cgo |
16
wxf666 2023-07-04 02:39:57 +08:00
你给点工具的应用场景出来呗?
比如,音视频处理?文本处理?结构数据处理?…… |
17
shuimugan 2023-07-04 03:09:38 +08:00 via Android
c sharp(aot 编译)
javascript/typescript(deno 或者 pkg) dart 类似 ts 的语法 |
18
MrKrabs 2023-07-04 03:11:06 +08:00
zig rust swift
|
19
crab 2023-07-04 03:52:40 +08:00
bat
|
20
zsj1029 2023-07-04 05:50:03 +08:00 via iPhone
Dart 发布二进制自带虚拟机,类似 Java
|
21
GPLer 2023-07-04 07:42:29 +08:00 via Android 2
只有 C ,其他都不方便。
https://justine.lol/ape.html https://github.com/jart/cosmopolitan 基于 cosmopolitan 编译的 C 能做到二进制跨平台运行 |
22
fyq 2023-07-04 07:43:49 +08:00
那显然是 C
|
24
musi 2023-07-04 08:13:49 +08:00 via iPhone 3
第一次见到写小工具用 Java 的,那不得打一个 jre 放包里,小而美?
|
25
snw 2023-07-04 08:25:00 +08:00 via Android
VB6 ?
|
26
placeholder 2023-07-04 08:25:15 +08:00
那你还不如用 nodejs 写 cli 呢
|
27
yazinnnn 2023-07-04 08:35:39 +08:00
java 写个 hello world, aot 之后都有 11M, 咋做小工具哦...
|
28
cozof 2023-07-04 08:36:14 +08:00 via iPhone
golang 啊。你看我不费吹灰之力就把 go 写的小工具打包了各平台的几十个可执行文件。 https://github.com/qcozof/portsman/releases
|
29
LeegoYih 2023-07-04 08:41:42 +08:00
考虑到逆向的话,还是别选解释型语言和 Java 了
|
30
xgdgsc 2023-07-04 08:42:01 +08:00
体积小 rust go 最方便。不嫌体积大(500M),从简洁的动态脚本写起,Julia 用 https://comonicon.org/stable/ https://julialang.github.io/PackageCompiler.jl/dev/ 也可以, 参考 https://github.com/ninjaaron/administrative-scripting-with-julia
|
31
lsk569937453 2023-07-04 08:45:36 +08:00
写命令行还得是 golang/rust,不接受反驳!
|
33
recolic 2023-07-04 09:08:15 +08:00 via Android
@u823tg 如果是要给别人用的程序,用脚本语言写的话,小白会追在你屁股后面说环境有问题/出错了/跑不了,烦死人。
|
34
gimp 2023-07-04 09:09:57 +08:00
首推 Golang ,其次 Rust
|
35
a33291 2023-07-04 09:11:35 +08:00
推荐 rust 或者 go,主要是交叉编译跨平台特性,cli 比较合适
.net 和 java 就别掺和了,丢脸 |
36
tool2d 2023-07-04 09:17:42 +08:00
看程序的复杂程度了,我是觉得 C 好,因为你倒退个 10 ~ 30 年,github 上的代码大部分核心算法,都是用 C 写的,随时可以抄作业。
如果程序很简单,那 nodejs 写写也可以,任何语言都可以。 |
38
a33291 2023-07-04 09:26:01 +08:00
|
39
nikenidage1 2023-07-04 09:28:58 +08:00
@a33291 纯请教,rust 的 native 水平是啥意思啊?
我前两天用 C#写了一个跨平台原生编译 aot 的 ui https://www.v2ex.com/t/952603 命令行当然也没问题 |
40
a33291 2023-07-04 09:36:40 +08:00
@nikenidage1 #39 抱歉我可能没表达清楚,每个语言都有他的特色和优势
是这样,就是.net 和 java 都带有 runtime,c/c++/rust 不带,编译就是针对特定平台的产物(win 就是 dll 或 exe),他们 aot 之后的确也不需要安装环境(但是本质上还是内嵌了一个 runtime),通过裁剪等可以减少 aot 的大小达到性能和大小的平衡(也见过使用极限手段优化 aot 大小的,但是并不是开箱即用),但是总是需要付出更多努力的 |
41
zysuper 2023-07-04 09:39:17 +08:00
golang
|
42
c2const 2023-07-04 09:44:45 +08:00
小工具,C/C++最舒服、win 平台还可以 C#。
---------------------------------------- go 、java 、python 、js 也可以。 但是 go 写小工具可能误报毒,java 、python 、js 都有打包或者 AOT 编译到 exe ,但体积大。 选个熟悉的语言写就行,别想那么多。 |
43
nikenidage1 2023-07-04 09:47:42 +08:00
|
44
mscorlib 2023-07-04 09:49:42 +08:00
跨平台:
首选 golang 次选 rust 然后是 java 、.net 如果仅 windows 的话首选 C#,winform |
45
xiangyuecn 2023-07-04 09:50:07 +08:00
“主要是基于命令行上进行操作的工具”,干脆直接写命令行脚本得了😂
参考我的一个 Java 开源库,也是命令行里面调用测试的,文件直接在根目录裸奔,给 windows 写了个.bat ,linux macos 写了个.sh ,脚本写法基本上都是通用的 高性能的省市区坐标数据、边界数据查询工具,Java 开源程序、内置 http 查询接口,内存占用低( 1 秒可查 1 万个以上坐标对应的城市信息): https://github.com/xiangyuecn/AreaCity-Query-Geometry |
46
zjsxwc 2023-07-04 09:55:11 +08:00
虽然但是,既然 java jre 加个起动器都可以,
那么,javascript node 加个起动器也可以。 |
47
liantian 2023-07-04 10:02:11 +08:00 via iPhone 1
这种讨论毫无意义啊…
用最熟悉的语言搞就完事了… 我们这一堆运维脚本是 js 的,挂 node 跑,原因无他,写脚本的大佬以前是个前端 js 大佬… |
50
c3de3f21 2023-07-04 10:23:46 +08:00
就用 C 写最好
|
51
BingoXuan 2023-07-04 10:27:08 +08:00
python ,用 py2app 或者 pyinstaller 打包,配合 dearpygui 这类 imgui 可以很快出效果
|
52
billzhuang 2023-07-04 10:27:19 +08:00
golang 的 exe 容易被 windows defender 报毒
|
53
wu67 2023-07-04 10:27:31 +08:00 1
上来就整 Java, 我上着班呢, 差点笑死
|
54
GiantHard 2023-07-04 10:33:49 +08:00
用最熟悉顺手的编程语言就好了,先把工具写出来,再考虑优化。
|
55
thin0 2023-07-04 10:40:32 +08:00
@xgdgsc 我还以为 golang 写的东西几兆几兆的已经够大了😂,没想到还有几百兆的? golang 的生成物体积能到 kb 级别就好了
|
57
thin0 2023-07-04 10:54:37 +08:00
@westoy 加壳了就更容易报毒了,我使用场景对体积和是否报毒这块要求比较高,所以不想用 c/c++折中的方式之前去入门了 rust ,哈哈
|
58
beyondex 2023-07-04 10:54:59 +08:00 2
c#写起来很舒服啊。也能发布成单 exe 文件。跨平台等等。
|
59
shijingshijing 2023-07-04 10:56:11 +08:00
Java 可拉倒吧,还得装个 JRE ,命令行+小工具+跨平台,再考虑到开发难度和速度,Python 和 Qt 是最合适的,Python 有一键打包成 exe 的工具。
|
61
idealhs 2023-07-04 11:08:17 +08:00
如果只是个 CLI 程序,anything except JAVA ,但是我推荐用 python 来节约你的生命
如果一定需要打包二进制,C ,C++, C#, GO, RUST |
62
Tanix2 2023-07-04 11:08:55 +08:00 via iPhone
rust 写命令行工具方便
|
63
fengjianxinghun 2023-07-04 11:09:06 +08:00
java c# 脚本仔就别来趟 native 浑水了,写点 web 不挺好的么?
|
64
xqdoo00o 2023-07-04 11:09:13 +08:00
毫无疑问,go ,配个环境变量就能交叉编译的快感,其他还要配置工具链的语言没法比。
次选 rust 。 说 java 和 c#的是在扯淡,谁写个小工具还会带个 jre 和.net 跑,用 aot 更是麻烦。 |
65
Tink 2023-07-04 11:09:39 +08:00
rust 和 go 吧
|
66
idealhs 2023-07-04 11:10:04 +08:00 2
|
67
virusdefender 2023-07-04 11:12:02 +08:00
首选 go ,还有一个上面没人说过,我也没用过的 kotlin native 也许可以
|
68
2NUT 2023-07-04 11:52:13 +08:00
必然是 c
|
70
wonderfulcxm 2023-07-04 11:55:53 +08:00
人家没有说要移植,要跨平台,只要容易转可执行文件,楼上某些哥们的戏是不是有点多?😂
|
71
yanmu6626 2023-07-04 11:59:47 +08:00
Windows 上开发 rust ,跨平台方便吗?
|
72
imicksoft 2023-07-04 12:18:04 +08:00
windows 推荐 aardio ,真的方便
|
73
superchijinpeng 2023-07-04 12:20:58 +08:00
c 、c++、rust 、go
|
74
dobelee 2023-07-04 12:26:14 +08:00 via iPhone
c++ c# go
|
75
qistchan 2023-07-04 13:07:07 +08:00
VB😂
|
76
lujiaxing 2023-07-04 13:10:38 +08:00
@musi 那多简单. 直接用 WinRAR 打一个 Self-Extract Package 加几个 post extract command 就可以了 (
|
77
lujiaxing 2023-07-04 13:12:36 +08:00 2
@fengjianxinghun 怎么就是蹚浑水了?? .NET 做不了 AOT 编译是咋地?
|
78
mohumohu 2023-07-04 13:13:47 +08:00
go 吧,rust 跨平台静态编译没这么方便
|
79
ql562482472 2023-07-04 13:17:57 +08:00
我目前也有一个需求要做成原生的 cli 工具
我用 java 的 org.graalvm.buildtools.native-maven-plugin 这个插件 AOT 的,还行其实,但是包会变得巨大,大小基本在所有依赖包的总和的水准上了。 同时 JNI 的调用还是会有问题。 另一个就是打包时间稍长了些。 |
81
ggvoking 2023-07-04 13:25:45 +08:00
首选 golang ,go 写起来真的舒服,交叉编译也方便。再也不想用 c#、python 写了。
次选 rust 。 |
82
flyqie 2023-07-04 14:00:17 +08:00 via Android
python 或者 go 吧。
看你自己,个人推荐用 go 。 |
83
raycool 2023-07-04 14:00:27 +08:00 2
那必须是 C#吧
|
85
howfree 2023-07-04 14:16:44 +08:00
java 使用 GraalVM 可以生产不同操作系统的可执行文件
|
86
hatsuyuki 2023-07-04 14:28:19 +08:00
首推 Rust
|
87
FightPig 2023-07-04 14:31:55 +08:00
我用 go 和 rust 都写过,整体 go 的话写起来轻松些,rust 不熟的话写起来太麻烦了
|
89
seakingii 2023-07-04 14:35:39 +08:00
windows 下推荐 c#,原因是 c#语法最方便
linux 或者跨平台推荐 go,库很多,编译方便 |
90
NoOneNoBody 2023-07-04 14:38:02 +08:00
写了几十个 python 脚本,自用没有分发需求,反而部分有不时改动一下,所以都没编译
有些传参只是文件路径的,直接在 total commander 工具栏加个按钮就当 GUI 用了 |
91
Slurp 2023-07-04 14:40:07 +08:00 1
还是那句话,作为用户巴不得你 Rust 写,Go 的 CLI 几乎都是透露着一种未完善的气息。
Rust 直接调用 Clap 解参数,log 日志,anyhow 错误处理,serde 解配置文件,toml_edit 还能基于结构增量修改配置,要 REPL 还能用 nushell 同款基础库 rustyline 。 能给用户带来非常统一完善的体验。而不是有些 Go CLI 上来一个 panic 给我整乐了。 写小工具 Rust 还具有最快的启动速度,最小的二进制体积,上个 O3 LTO 比 Go 小到不知道多少倍。 |
92
jlkm2010 2023-07-04 14:44:29 +08:00
cj
|
93
lerry 2023-07-04 14:52:22 +08:00
go ,编译以后单文件,不需要什么特别配置,很简单
|
94
poporange 2023-07-04 14:57:35 +08:00
python
|
95
brookegas 2023-07-04 15:07:09 +08:00
golang
交叉编译,直接用 mac 上瞬间编译出 linux 、mac 、windows 下的二进制文件 编译速度快到飞起 |
96
cat9life 2023-07-04 15:09:06 +08:00
当然是 go 最方便,没啥可争辩的
|
97
raptor 2023-07-04 15:11:01 +08:00
果然第一个就是 GO
|
99
storyxc 2023-07-04 17:13:01 +08:00 2
上面说用 java 写的也太搞了,虽然我也是干 java 的,但写工具这种活真没 java 啥事。没接触 go 之前我都是用 python ,接触了 go 之后全都是用 go 写,跨平台编译太香了。
|
100
DOLLOR 2023-07-04 17:36:39 +08:00
如果是命令行小工具,用 go 就行,dart 也可以。
退两步,那就 python 或者 node 。 |