瞎扯淡 为什么 Node 可以有下载即用的版本,Ruby 就要用构建工具帮忙,否则就很麻烦

willx · 2023年03月06日 · 最后由 haohaodehao 回复于 2023年03月13日 · 747 次阅读

rt

666 你做一个啊

hellonunam 回复

我只是单纯的问一下而已

问题没有看懂,我理解为:

  1. 类 UNIX 系统上,rbenv 通过编译 Ruby 源代码来工作,所以需要一整套 C 工具链来构建
  2. Windows 上,RubyInstaller 默认带的有 MSYS2,是为了编译带有 C 扩展的 Gem

如果不需要用带有 C 扩展的 Ruby,在 Windows 上可以下载 without-devkit 版本的 RubyInstaller,大小仅有 14MB,不包含你题中所说的构建工具。

另外:rbenv for Windows 也是是用这个 without-devkit 的版本来下载最新的 Ruby,所有 Ruby 共用一套工具链。可能满足你所说的“下载即用” (一个命令即用)。

ccmywish 回复

我的意思其实是,Node 可以直接下载一个压缩文件,wget 下载、解压之后就能用了,非常方便。为什么 Ruby 不选择这种方式来分发代码。

ccmywish 回复

因为 Node 也是 C/C++ 写的嘛

willx 回复

Windows 上的 RubyInstaller 也提供了 7z 压缩的“绿色版”,不用安装,直接打开就可以用。和你说的 wget一下,解压,直接用 的流程是一样的。

https://rubyinstaller.org/downloads/ Other Useful Downloads 这里。

其实 rbenv for Windows 每次使用 rbenv install x.x 下载的也正是这种 7zip 文件。

类 Unix 系统上不知道,似乎没有。

我猜想原因可能是反过来的:因为 Node 构建起来比 Ruby 麻烦(也更慢)

按道理来说,自己从源码构建是更好的,可以避免安装后的很多问题。但 Node 依赖的 v8 那一整套很庞大,还是 C++ 写的,编译很慢。而 Ruby 编译起来比较快,所以习惯从源码编译。pyenv 也是从源码编译的

ecnelises 回复

pyenv 就是从 rbenv 复刻(fork)过来的,所以同样也采取了编译的方法来安装。

实际上,如果需要这种多版本控制,一般都会采用自己编译的方式。因为,较新版本的 Ruby/Python 构建往往不会存在于任何 Linux 发行版包管理器之中,即使 Arch Linux 的打包者也没那么快能跟上(而且还经常打包的有问题)。有的时候,我们还会有回到某个旧的版本的需求,以查看是否在特定的语言版本中,代码存在问题。而这些旧版本,上游也并不会提供。

所以最好的方式,还是通过用户自己的环境直接编译源代码,这样便能够以最快速度获得最新的 Ruby/Python. 通过 rbenv/pyenv 用户可以从过去的任何版本一致跟踪到最新版本,灵活度很高。

注:现在 Windows 上使用的 pyenv-win 是从 rbenv-win 复刻(fork)出来的。后者 rbenv-win 是用 vb 写的。Ruby 界的很多东西都被重复利用给其他生态了。

what about upgrade

ruby 当然也有预先构建好的: https://rvm.io/binaries/

11 楼 已删除

sudo apt install ruby 不就是你说的吗,binary version

需要 登录 后方可回复, 如果你还没有账号请 注册新账号