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