Hasty Briefsbeta

双语

Cursed Bundler: Using go get to install Ruby Gems

5 months ago
  • #package-management
  • #ruby
  • #go
  • Ruby可以通过将GOPATH设置为Ruby加载路径,使用Go的模块获取器作为传输层。
  • Go的导入路径约定具有自描述性,包含托管域名、组织和仓库信息,这与集中式包管理器不同。
  • Go使用proxy.golang.org和sum.golang.org进行缓存和密码学哈希,确保完整性和可审计性。
  • Ruby gems可以通过添加go.mod文件利用Go的基础设施,绕过RubyGems以获得更好的供应链完整性。
  • 这种设置中的依赖关系解析将镜像Bundler的逻辑,但使用Go的获取和完整性检查。
  • Go的最小版本选择(MVS)确保可预测性,而Bundler则倾向于使用最新版本。
  • Ruby gems中的原生扩展是一个限制,因为Go期望源代码或预编译的二进制文件。
  • Deno尝试URL导入时面临与Go方法类似的权衡,最终退回到传统注册表。
  • 自描述路径消除了注册表查找,但冗长,而短名称符合人体工程学但容易被抢注。
  • 这个思想实验表明,包管理器可以共享一个内容寻址、透明日志记录的分发层。
  • Go的模块系统意外地具有通用性,可以记录任何内容的哈希,包括Ruby文件。
  • 该实验突出了包管理器的基本组件,并质疑哪些组件可以在生态系统之间共享。