文章摘要
作者在开发Bundler的十年间一直希望有一个更好的依赖管理工具,不仅能管理Ruby版本,还能安装预编译的Ruby,避免每次从源码编译的等待。作者发现Python社区已经开发了类似工具uv,它集成了多个现有工具并具备新功能,使用体验极佳。受此启发,作者决定为Ruby开发类似工具rv,以提升开发效率和体验。
文章总结
标题:rv:一种新型的Ruby管理工具
主要内容:
在过去的十年中,作者一直致力于Bundler的开发,并一直希望有一个更好的依赖管理工具。这个工具不仅能管理Ruby的gem包,还能管理Ruby的版本,并且能够安装预编译的Ruby版本,从而避免每次从源代码编译Ruby的等待时间。更重要的是,它能够轻松运行任何用Ruby编写的脚本或工具,即使这些脚本或工具需要与应用程序不同的Ruby版本。
作者原本希望有人能开发出这样的工具,但最终发现类似的工具已经存在,不过是为Python开发的,名为uv。uv不仅具备作者所期望的所有功能,甚至还有一些额外的特性。受到uv的启发,作者决定为Ruby开发一个类似的工具,名为rv。
rv的主要特点包括:
速度:由于
rv是用Rust编写的,因此速度非常快。它能够在每次执行bundle exec时自动运行rvm install和bundle install的等效操作,且整个过程比以往任何时候都更快。rvx/rv tool run:这一功能类似于npx/npm exec或gem exec,但更加强大。任何CLI命令都可以直接运行,无需担心版本或依赖问题,因为这些会在运行命令时自动安装。此外,CLI工具不会与当前项目的Ruby或gem包发生冲突,因为它们会被安装在一个独立的环境中。rv tool install:允许用户将任何gem包安装为CLI工具,并为其提供独立的Ruby和gem环境。例如,即使当前应用程序需要不同的Ruby版本,用户仍然可以安装并使用gistgem包。脚本支持:单个脚本文件可以包含
.ruby-version、Gemfile和Gemfile.lock的信息,用户只需运行rv run script.rb,即可获得所需的Ruby版本和gem包,并执行脚本。
rv的最终目标是成为一个全新的管理工具,用户无需手动安装rvm、Ruby、更新rubygems、bundler等,只需运行命令,rv会自动处理所有依赖和环境问题。
目前,rv团队已经包括了RubyGems团队的Samuel Giddins和rbenv的创始人Sam Stephenson。rv已经能够在zsh中自动切换已安装的Ruby版本,并且能够在macOS和Ubuntu上在一秒内安装预编译的Ruby 3.4.x版本。
总结:
rv是一个集成了Ruby版本管理和依赖管理的新型工具,旨在简化Ruby开发环境的管理,提高开发效率。通过自动处理依赖和环境问题,rv让开发者能够更专注于编写代码,而无需担心复杂的配置和安装过程。
评论总结
评论主要围绕Ruby生态系统中的工具改进展开,观点多样,既有积极评价,也有提出改进建议的。
积极评价与期待:
- msie表示新工具可能解决Gemfile版本冲突问题,并减少频繁更新Bundler的麻烦:“If you can get rid of such errors I would be so happy!”(如果能解决这些错误,我会非常高兴!)
- bradly认为这是对Ruby生态系统的重大改进,并提到项目间gem隔离带来的不便:“I’ve definitely felt the awkwardness of gems being so compartmentalized by project.”(我确实感受到了gem按项目隔离的尴尬。)
功能需求与改进建议:
- jemmyw指出该工具对多语言开发者可能不够实用,建议借鉴asdf和mise的多语言管理方式:“I’d rather see things go more in that direction with some kind of standard.”(我更希望看到朝着某种标准化的方向发展。)
- rorylawless提到工具名称与R语言的rv工具冲突:“Very unfortunate name collision with rv for R.”(与R语言的rv工具名称冲突非常不幸。)
技术趋势与跨语言影响:
- natt941观察到包管理工具的改进呈现出跨语言相互影响的趋势:“lessons from Ruby package management contributed to Rust, Rust is helping improve package management for Python, and now Python package management is inspiring improvements for Ruby!”(Ruby包管理的经验影响了Rust,Rust帮助改进了Python的包管理,现在Python的包管理又反过来启发Ruby的改进!)
- sleepy_keita注意到Rust在工具开发中的影响力:“I find it interesting how Rust is gaining momentum in tooling like uv and now rv.”(我发现Rust在uv和rv等工具开发中势头强劲,这很有趣。)
命名与分类讨论:
- DavidCanHelp提出“语言管理器”的概念,并征求更好的命名建议:“I’m currently calling this category a ‘language manager’, but if you have a better name idea, let me know!”(我暂时称这类工具为“语言管理器”,但如果你有更好的命名建议,请告诉我!)
总结:评论者对Ruby工具改进持积极态度,但也提出了多语言支持、命名冲突等改进建议,并观察到跨语言技术趋势的影响。