• 请不要在回答技术问题时复制粘贴 AI 生成的内容
aim467
V2EX  ›  程序员

哪种语言编写的程序转成可执行文件比较方便(exe / binary file) ?

  •  1
     
  •   aim467 · Jul 4, 2023 · 17443 views
    This topic created in 1221 days ago, the information mentioned may be changed or developed.

    想写一些小工具,主要是基于命令行上进行操作的工具,想问问大家哪个语言来写比较方便

    159 replies  •  2023-11-16 08:53:20 +08:00
    1  2  
    ❮ ❯
    westoy
    westoy
    Jul 4, 2023❤️24
    1
    golang 大法好
    alexapollo
    alexapollo
    Jul 4, 2023❤️1
    2
    我觉得写小工具可能还真是 https://github.com/geekan/MetaGPT 这个比较方便……
    H0H
    H0H
    Jul 4, 2023❤️3
    3
    Java 这类最通用的跨操作系统的语言就可以。然后用 Native 语言给写个启动器来找到 JRE 后将相关参数传进去启动即可,Windows 下面我用汇编语言写了启动器,你可以选择用 Visual Studio 下的 C++来写这个启动器; macOS 下我就用那个 Swift 写了启动器。

    其实只要你会用 native 语言来写这个启动器,那么各种编程语言都能制作成一个单独的 exe 文件。只不过一般人不会要求全部合并成一个 exe 文件,都是一个 exe 文件带很多 dll 或 jar 包等。

    比如 Java 写的程序非要合并成一个 exe ,那么就可以将 JRE 、Jar 包作为资源文件放到启动器那个 exe 中,这样就变成了一个单独的 exe 程序。启动器启动后,将 JRE 、jar 包释放到临时目录运行就行了。
    Trim21
    Trim21
    Jul 4, 2023
    4
    golang ,交叉编译很方便。
    LeeReamond
    LeeReamond
    Jul 4, 2023❤️8
    5
    @H0H 你这个方法要是算简单的话那大部分语言都挺简单。。。小工具+好编译成二进制=go 或者 rust
    jackmod
    jackmod
    Jul 4, 2023
    6
    能够比较简单制造 exe 的话估计只有 golang 和 rust 了,不过 linux 下的 rust 需要使用 musl 达到 static
    fbichijing
    fbichijing
    Jul 4, 2023
    7
    你提出的问题和描述似乎不太相同啊。

    如果是 exe 的话不是基本上圈定 C, C++ 了吗?独立的可移植的 exe 文件。

    如果是基于命令行进行操作的工具,那我觉得使用 python 写命令行是十分舒服的。
    写成一个 package ,自定义喜欢的全局命令,只要存在 python 环境自己安装一下就能全局使用了。现在的服务器基本上都预装有 python ,所以就像是写一次可以各个地方运行了。

    因为平时经常有这需求,而这种全局命令的文件格式又十分固定。所以我写成一个十分简单的 package 放在 pypi 上,方便自己使用......用来方便自己构建全局命令。

    ------
    以下只是我自己平时的使用方式,因为自己写的这个 package 很简单,只是作为举例之用。

    pip install package-gen

    然后提供了一个全局命令:pk-gen

    比如:
    pk-gen mytest

    就生成一个 package 的模板,往里面定义自己想要的全局命令,然后将实现代码敲出来就行了。比起去弄 gui ,全局命令这方面写起来就很舒服。
    Trim21
    Trim21
    Jul 4, 2023
    8
    之前写了个一百来行的命令行程序,用 goreleaser 编译然后发布,goreleaser 的默认设置已经完全能满足你的这个需求了

    https://github.com/trim21/try
    licsber
    licsber
    Jul 4, 2023
    9
    我的设备同时有 linux bsd mac win 所以我的小工具包已经成 python 改成 golang 了
    非常方便改下 GOOS 就能换系统 改 ARCH 就能换架构
    目前工具类型涵盖了文件元信息计算、文件夹统计、去重、获取微信 token 、快捷打印、检测电脑是否摸鱼(空闲微信提醒)等
    licsber
    licsber
    Jul 4, 2023
    10
    @Trim21 #8 哈哈哈 当时也有这个需求
    然后学着 shell 写了个 判断 $? -eq 0 自动重试的 function
    看来大家都遇到过这样的问题
    kljsandjb
    kljsandjb
    Jul 4, 2023 via iPhone
    11
    Rust 挺合适的
    u823tg
    u823tg
    Jul 4, 2023
    12
    为啥一定要 exe 之类二进制文件呢, 小工具还是命令行不是脚本语言最好用吗,随时更改的。
    aa51513
    aa51513
    Jul 4, 2023 via Android
    13
    @kljsandjb 用 Rust 进行 GUI 编程,真的一言难尽,装开发环境都能磨死人
    Al0rid4l
    Al0rid4l
    Jul 4, 2023❤️1
    14
    生态上 go rust, 很多 tui 以及其他 cli 相关的库, c/c++ 生态不用说, 但是和方便不搭边

    产物体积小且快, rust zig

    方便且跨平台, go rust c# zig, 后面两个生态差点, 综上 go rust

    java graalvm 应该也可以, 没用过
    lhbc
    lhbc
    Jul 4, 2023 via Android
    15
    golang 最佳
    别用 cgo
    wxf666
    wxf666
    Jul 4, 2023
    16
    你给点工具的应用场景出来呗?

    比如,音视频处理?文本处理?结构数据处理?……
    slowgen
    slowgen
    PRO
    Jul 4, 2023 via Android
    17
    c sharp(aot 编译)
    javascript/typescript(deno 或者 pkg)
    dart 类似 ts 的语法
    MrKrabs
    MrKrabs
    Jul 4, 2023
    18
    zig rust swift
    crab
    crab
    Jul 4, 2023
    19
    bat
    zsj1029
    zsj1029
    Jul 4, 2023 via iPhone
    20
    Dart 发布二进制自带虚拟机,类似 Java
    GPLer
    GPLer
    Jul 4, 2023 via Android❤️2
    21
    只有 C ,其他都不方便。
    https://justine.lol/ape.html
    https://github.com/jart/cosmopolitan
    基于 cosmopolitan 编译的 C 能做到二进制跨平台运行
    fyq
    fyq
    Jul 4, 2023
    22
    那显然是 C
    kljsandjb
    kljsandjb
    Jul 4, 2023 via Android
    23
    @aa51513 是的,这方面生态还是太不成型了
    musi
    musi
    Jul 4, 2023 via iPhone❤️3
    24
    第一次见到写小工具用 Java 的,那不得打一个 jre 放包里,小而美?
    snw
    snw
    Jul 4, 2023 via Android
    25
    VB6 ?
    placeholder
    placeholder
    Jul 4, 2023
    26
    那你还不如用 nodejs 写 cli 呢
    yazinnnn
    yazinnnn
    Jul 4, 2023
    27
    java 写个 hello world, aot 之后都有 11M, 咋做小工具哦...
    cozof
    cozof
    Jul 4, 2023 via iPhone
    28
    golang 啊。你看我不费吹灰之力就把 go 写的小工具打包了各平台的几十个可执行文件。 https://github.com/qcozof/portsman/releases
    LeegoYih
    LeegoYih
    Jul 4, 2023
    29
    考虑到逆向的话,还是别选解释型语言和 Java 了
    xgdgsc
    xgdgsc
    Jul 4, 2023
    30
    体积小 rust go 最方便。不嫌体积大(500M),从简洁的动态脚本写起,Julia 用 https://comonicon.org/stable/ https://julialang.github.io/PackageCompiler.jl/dev/ 也可以, 参考 https://github.com/ninjaaron/administrative-scripting-with-julia
    lsk569937453
    lsk569937453
    Jul 4, 2023
    31
    写命令行还得是 golang/rust,不接受反驳!
    bthulu
    bthulu
    Jul 4, 2023❤️1
    32
    当然是.net 了, 直接支持打包成单文件
    recolic
    recolic
    Jul 4, 2023 via Android
    33
    @u823tg 如果是要给别人用的程序,用脚本语言写的话,小白会追在你屁股后面说环境有问题/出错了/跑不了,烦死人。
    gimp
    gimp
    Jul 4, 2023
    34
    首推 Golang ,其次 Rust
    a33291
    a33291
    Jul 4, 2023
    35
    推荐 rust 或者 go,主要是交叉编译跨平台特性,cli 比较合适

    .net 和 java 就别掺和了,丢脸
    tool2d
    tool2d
    Jul 4, 2023
    36
    看程序的复杂程度了,我是觉得 C 好,因为你倒退个 10 ~ 30 年,github 上的代码大部分核心算法,都是用 C 写的,随时可以抄作业。

    如果程序很简单,那 nodejs 写写也可以,任何语言都可以。
    jiulang
    jiulang
    Jul 4, 2023❤️1
    37
    @a33291 你这么说会把自己的脸打了的。.net 能生成多平台的单文件,也能 aot 编译成多平台的二进制文件
    a33291
    a33291
    Jul 4, 2023
    38
    @jiulang #37 好多语言都能,还能搞 AI 呢,那咋不把 python 都换成 C#?每个语言在特定场景下有其擅长和优势,不要混淆概念和扩大范围.
    你想说 C#和 java 很好没问题,但是前置场景也要考虑.
    java 和.net 的 AOT 就算非常成熟(况且目前还不够成熟)也不过是现在 rust 的 native 水平

    所以,能不能和谁合适,是要看场景的
    liuliuliuliu
    liuliuliuliu
    Jul 4, 2023
    39
    @a33291 纯请教,rust 的 native 水平是啥意思啊?
    我前两天用 C#写了一个跨平台原生编译 aot 的 ui
    https://www.v2ex.com/t/952603

    命令行当然也没问题
    a33291
    a33291
    Jul 4, 2023
    40
    @nikenidage1 #39 抱歉我可能没表达清楚,每个语言都有他的特色和优势

    是这样,就是.net 和 java 都带有 runtime,c/c++/rust 不带,编译就是针对特定平台的产物(win 就是 dll 或 exe),他们 aot 之后的确也不需要安装环境(但是本质上还是内嵌了一个 runtime),通过裁剪等可以减少 aot 的大小达到性能和大小的平衡(也见过使用极限手段优化 aot 大小的,但是并不是开箱即用),但是总是需要付出更多努力的
    zysuper
    zysuper
    Jul 4, 2023
    41
    golang
    c2const
    c2const
    Jul 4, 2023
    42
    小工具,C/C++最舒服、win 平台还可以 C#。
    ----------------------------------------
    go 、java 、python 、js 也可以。
    但是 go 写小工具可能误报毒,java 、python 、js 都有打包或者 AOT 编译到 exe ,但体积大。
    选个熟悉的语言写就行,别想那么多。
    liuliuliuliu
    liuliuliuliu
    Jul 4, 2023
    43
    @c2const
    @a33291 您看看我上面这个
    C#写的, 带 UI ,跨平台,原生编译,不需要运行时,体积 20 几 M ,很简单,没啥操作手段
    mscorlib
    mscorlib
    Jul 4, 2023
    44
    跨平台:
    首选 golang
    次选 rust
    然后是 java 、.net

    如果仅 windows 的话首选 C#,winform
    xiangyuecn
    xiangyuecn
    Jul 4, 2023
    45
    “主要是基于命令行上进行操作的工具”,干脆直接写命令行脚本得了😂

    参考我的一个 Java 开源库,也是命令行里面调用测试的,文件直接在根目录裸奔,给 windows 写了个.bat ,linux macos 写了个.sh ,脚本写法基本上都是通用的

    高性能的省市区坐标数据、边界数据查询工具,Java 开源程序、内置 http 查询接口,内存占用低( 1 秒可查 1 万个以上坐标对应的城市信息): https://github.com/xiangyuecn/AreaCity-Query-Geometry
    zjsxwc
    zjsxwc
    Jul 4, 2023
    46
    虽然但是,既然 java jre 加个起动器都可以,
    那么,javascript node 加个起动器也可以。
    liantian
    liantian
    Jul 4, 2023 via iPhone❤️1
    47
    这种讨论毫无意义啊…

    用最熟悉的语言搞就完事了…

    我们这一堆运维脚本是 js 的,挂 node 跑,原因无他,写脚本的大佬以前是个前端 js 大佬…
    ljsh093
    ljsh093
    Jul 4, 2023
    48
    @aa51513 #13 rust 的 gui 跟闹着玩一样
    c3de3f21
    c3de3f21
    Jul 4, 2023
    49
    @H0H 别 java 了求求了
    c3de3f21
    c3de3f21
    Jul 4, 2023
    50
    就用 C 写最好
    BingoXuan
    BingoXuan
    Jul 4, 2023
    51
    python ,用 py2app 或者 pyinstaller 打包,配合 dearpygui 这类 imgui 可以很快出效果
    billzhuang
    billzhuang
    Jul 4, 2023
    52
    golang 的 exe 容易被 windows defender 报毒
    wu67
    wu67
    Jul 4, 2023❤️1
    53
    上来就整 Java, 我上着班呢, 差点笑死
    GiantHard
    GiantHard
    Jul 4, 2023
    54
    用最熟悉顺手的编程语言就好了,先把工具写出来,再考虑优化。
    thin0
    thin0
    Jul 4, 2023
    55
    @xgdgsc 我还以为 golang 写的东西几兆几兆的已经够大了😂,没想到还有几百兆的? golang 的生成物体积能到 kb 级别就好了
    westoy
    westoy
    Jul 4, 2023
    56
    @thin0

    strip && upx 大法好
    thin0
    thin0
    Jul 4, 2023
    57
    @westoy 加壳了就更容易报毒了,我使用场景对体积和是否报毒这块要求比较高,所以不想用 c/c++折中的方式之前去入门了 rust ,哈哈
    beyondex
    beyondex
    Jul 4, 2023❤️2
    58
    c#写起来很舒服啊。也能发布成单 exe 文件。跨平台等等。
    shijingshijing
    shijingshijing
    Jul 4, 2023
    59
    Java 可拉倒吧,还得装个 JRE ,命令行+小工具+跨平台,再考虑到开发难度和速度,Python 和 Qt 是最合适的,Python 有一键打包成 exe 的工具。
    idealhs
    idealhs
    Jul 4, 2023
    60
    @H0H JAVA 仔特有的 Native 气质
    idealhs
    idealhs
    Jul 4, 2023
    61
    如果只是个 CLI 程序,anything except JAVA ,但是我推荐用 python 来节约你的生命
    如果一定需要打包二进制,C ,C++, C#, GO, RUST
    Tanix2
    Tanix2
    Jul 4, 2023 via iPhone
    62
    rust 写命令行工具方便
    fengjianxinghun
    fengjianxinghun
    Jul 4, 2023
    63
    java c# 脚本仔就别来趟 native 浑水了,写点 web 不挺好的么?
    xqdoo00o
    xqdoo00o
    Jul 4, 2023
    64
    毫无疑问,go ,配个环境变量就能交叉编译的快感,其他还要配置工具链的语言没法比。
    次选 rust 。
    说 java 和 c#的是在扯淡,谁写个小工具还会带个 jre 和.net 跑,用 aot 更是麻烦。
    Tink
    Tink
    Jul 4, 2023
    65
    rust 和 go 吧
    idealhs
    idealhs
    Jul 4, 2023❤️2
    66
    @a33291 #35 有没有可能.net 的原生编译不依靠打包 runtime 呢,丢人前可以先 google 下避免尴尬的
    virusdefender
    virusdefender
    Jul 4, 2023
    67
    首选 go ,还有一个上面没人说过,我也没用过的 kotlin native 也许可以
    2NUT
    2NUT
    Jul 4, 2023
    68
    必然是 c
    veike
    veike
    Jul 4, 2023 via Android
    69
    @H0H 你太幽默了😁
    wonderfulcxm
    wonderfulcxm
    Jul 4, 2023
    70
    人家没有说要移植,要跨平台,只要容易转可执行文件,楼上某些哥们的戏是不是有点多?😂
    yanmu6626
    yanmu6626
    Jul 4, 2023
    71
    Windows 上开发 rust ,跨平台方便吗?
    imicksoft
    imicksoft
    Jul 4, 2023
    72
    windows 推荐 aardio ,真的方便
    cutiechi
    cutiechi
    Jul 4, 2023
    73
    c 、c++、rust 、go
    dobelee
    dobelee
    Jul 4, 2023 via iPhone
    74
    c++ c# go
    qistchan
    qistchan
    Jul 4, 2023
    75
    VB😂
    lujiaxing
    lujiaxing
    Jul 4, 2023
    76
    @musi 那多简单. 直接用 WinRAR 打一个 Self-Extract Package 加几个 post extract command 就可以了 (
    lujiaxing
    lujiaxing
    Jul 4, 2023❤️2
    77
    @fengjianxinghun 怎么就是蹚浑水了?? .NET 做不了 AOT 编译是咋地?
    mohumohu
    mohumohu
    Jul 4, 2023
    78
    go 吧,rust 跨平台静态编译没这么方便
    ql562482472
    ql562482472
    Jul 4, 2023
    79
    我目前也有一个需求要做成原生的 cli 工具
    我用 java 的 org.graalvm.buildtools.native-maven-plugin 这个插件 AOT 的,还行其实,但是包会变得巨大,大小基本在所有依赖包的总和的水准上了。
    同时 JNI 的调用还是会有问题。
    另一个就是打包时间稍长了些。
    lujiaxing
    lujiaxing
    Jul 4, 2023
    80
    @H0H 你还不如直接用 WinRAR / 7-Zip 打一个自解压 EXE 文件算了.
    ggvoking
    ggvoking
    Jul 4, 2023
    81
    首选 golang ,go 写起来真的舒服,交叉编译也方便。再也不想用 c#、python 写了。
    次选 rust 。
    flyqie
    flyqie
    Jul 4, 2023 via Android
    82
    python 或者 go 吧。

    看你自己,个人推荐用 go 。
    raycool
    raycool
    Jul 4, 2023❤️2
    83
    那必须是 C#吧
    LokiSharp
    LokiSharp
    Jul 4, 2023
    84
    @lujiaxing #77 .net 性能还行但是冷启动慢,只适合做服务,不适合做小工具
    howfree
    howfree
    Jul 4, 2023
    85
    java 使用 GraalVM 可以生产不同操作系统的可执行文件
    hatsuyuki
    hatsuyuki
    Jul 4, 2023
    86
    首推 Rust
    FightPig
    FightPig
    Jul 4, 2023
    87
    我用 go 和 rust 都写过,整体 go 的话写起来轻松些,rust 不熟的话写起来太麻烦了
    Slurp
    Slurp
    Jul 4, 2023
    88
    @idealhs 🤪 .NET AOT 吹和 GraalVM 吹能不能消停点,用起来一堆限制还觉得支持完美也是厉害。
    seakingii
    seakingii
    Jul 4, 2023
    89
    windows 下推荐 c#,原因是 c#语法最方便
    linux 或者跨平台推荐 go,库很多,编译方便
    NoOneNoBody
    NoOneNoBody
    Jul 4, 2023
    90
    写了几十个 python 脚本,自用没有分发需求,反而部分有不时改动一下,所以都没编译

    有些传参只是文件路径的,直接在 total commander 工具栏加个按钮就当 GUI 用了
    Slurp
    Slurp
    Jul 4, 2023❤️1
    91
    还是那句话,作为用户巴不得你 Rust 写,Go 的 CLI 几乎都是透露着一种未完善的气息。

    Rust 直接调用 Clap 解参数,log 日志,anyhow 错误处理,serde 解配置文件,toml_edit 还能基于结构增量修改配置,要 REPL 还能用 nushell 同款基础库 rustyline 。

    能给用户带来非常统一完善的体验。而不是有些 Go CLI 上来一个 panic 给我整乐了。

    写小工具 Rust 还具有最快的启动速度,最小的二进制体积,上个 O3 LTO 比 Go 小到不知道多少倍。
    jlkm2010
    jlkm2010
    Jul 4, 2023
    92
    cj
    lerry
    lerry
    Jul 4, 2023
    93
    go ,编译以后单文件,不需要什么特别配置,很简单
    poporange
    poporange
    Jul 4, 2023
    94
    python
    brookegas
    brookegas
    Jul 4, 2023
    95
    golang

    交叉编译,直接用 mac 上瞬间编译出 linux 、mac 、windows 下的二进制文件
    编译速度快到飞起
    cat9life
    cat9life
    Jul 4, 2023
    96
    当然是 go 最方便,没啥可争辩的
    raptor
    raptor
    Jul 4, 2023
    97
    果然第一个就是 GO
    a33291
    a33291
    Jul 4, 2023
    98
    @idealhs #66 您说得对 😊
    storyxc
    storyxc
    Jul 4, 2023❤️2
    99
    上面说用 java 写的也太搞了,虽然我也是干 java 的,但写工具这种活真没 java 啥事。没接触 go 之前我都是用 python ,接触了 go 之后全都是用 go 写,跨平台编译太香了。
    AV1
    AV1
    Jul 4, 2023
    100
    如果是命令行小工具,用 go 就行,dart 也可以。
    退两步,那就 python 或者 node 。
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1345 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 168ms · UTC 19:40 · PVG 03:40 · LAX 11:40 · JFK 14:40
    ♥ Do have faith in what you're doing.