@tobi:Matz’s Spinel 是一个用于 Ruby -> C 的 AOT 编译器。我为我的 try 项目研究了它,现在我有一个代码库,它 exe…

X AI KOLs Timeline 工具

摘要

'try' 工具是基于 Ruby 的实用工具,用于管理实验目录,并集成了 Matz's Spinel AOT 编译器,将 Ruby 代码编译为原生 C 以大幅提升速度。

Matz’s Spinel 是一个将 Ruby 编译为 C 的 AOT 编译器。我为我的 try 项目研究了它,现在我有一个代码库,它在 Ruby 中执行并编译为原生代码。速度提升巨大。这是一个非常令人兴奋的项目。https://github.com/tobi/try/pull/130…
查看原文
查看缓存全文

缓存时间: 2026/08/15 07:44

Matz的Spinel是一个Ruby -> C的AOT编译器。我在自己的try项目中研究过它,现在我的代码库既能在Ruby中执行,也能编译为本地代码。速度提升巨大,这个项目非常令人兴奋。https://github.com/tobi/try/pull/130…


tobi/try

源码:https://github.com/tobi/try

try - 为每次灵感打造专属目录

网站 (https://pages.tobi.lutke.com/try/) · RubyGems (https://rubygems.org/gems/try-cli) · GitHub (https://github.com/tobi/try)

你的实验项目值得一个安身之处。 🏠

为那些不断为小实验创建新项目的人设计,一个单文件Ruby脚本,帮你快速管理和导航,让一切井井有条。 是否发现自己有50个名为testtest2new-testactually-working-test的目录散落在文件系统中?或者更糟,只是在/tmp里编码,最后一切丢失?try 为的是你那美妙而混乱的思维。

功能介绍

模糊搜索演示
在 asciinema (https://asciinema.org/a/ve8AXBaPhkKz40YbqPTlVjqgs) 查看交互式版本

立即导航你的所有实验目录,通过:

  • 模糊搜索——开箱即用
  • 智能排序——最近使用的内容会浮到顶部
  • 自动日期命名——创建类似2025-08-17-redis-experiment的目录
  • 零配置——仅一个Ruby文件,无依赖

安装

RubyGems(推荐)

gem install try-cli

然后添加到你的shell:

# Bash/Zsh - 添加到 .zshrc 或 .bashrc
eval "$(try init)"

# Fish - 添加到 config.fish
try init | source

快速入门(手动)

curl -sL https://raw.githubusercontent.com/tobi/try/refs/heads/main/try.rb > ~/.local/try.rb
# 使 "try" 可执行,以便直接运行
chmod +x ~/.local/try.rb
# 添加到你的 shell (bash/zsh)
echo 'eval "$(ruby ~/.local/try.rb init ~/src/tries)"' >> ~/.zshrc
# 对于 fish shell 用户
echo '~/.local/try.rb init ~/src/tries | source' >> ~/.config/fish/config.fish

原生二进制文件(可选)

使用 Spinel (https://github.com/matz/spinel) 编译原生 try。 从源码构建 Spinel;需要 PR 3906 (https://github.com/matz/spinel/pull/3906) 以使 IO#tty? / #winsize 在非静态类型IO的句柄上工作。

make native SPINEL=/path/to/spinel
# -O s, 然后 strip
./dist/try --help
eval "$(./dist/try init)" # 将shell函数连接到二进制文件,而非MRI
make native-test SPINEL=/path/to/spinel

MRI ruby try.rb 和 gem 方式仍然有效。 dist/try init 输出二进制文件路径;ruby try.rb init 仍然输出 /usr/bin/env ruby '.../try.rb'

问题所在

你在学习Redis。创建了/tmp/redis-test。然后是~/Desktop/redis-actually。接着是~/projects/testing-redis-again。三周后,你找不到那天凌晨2点写下的绝妙连接池方案了。

解决方案

你所有的实验项目集中一处,支持即时模糊搜索:

$ try pool
→ 2025-08-14-redis-connection-pool  2h, 18.5
  2025-08-03-thread-pool           3d, 12.1
  2025-07-22-db-pooling            2w, 8.3
  + Create new: pool

输入,向下箭头,回车。你就到那儿了。

功能特性

🎯 智能模糊搜索

不止子串匹配——它很智能:

  • rds 能匹配 redis-server
  • connpool 能匹配 connection-pool
  • 最近使用的内容得分更高
  • 匹配分数相同时,较短的名字胜出

⏰ 时间感知

  • 显示你距离上次接触每个项目有多久
  • 最近访问的目录浮到顶部
  • 完美解决“我昨天在做什么?”的问题

🎨 精致的终端界面

  • 简洁、极简的界面
  • 输入时高亮显示匹配项
  • 显示分数,让你明白排序依据
  • 默认深色模式(显然如此)

📁 有序的混乱

  • 一切存放在~/src/tries(可通过TRY_PATH配置)
  • 自动添加日期前缀:2025-08-17-your-idea
  • 如果你已输入名称,则跳过日期提示

Shell 集成

  • Bash/Zsh:
# 默认路径为 ~/src/tries
eval "$(~/.local/try.rb init)"
# 或选择一个路径
eval "$(~/.local/try.rb init ~/src/tries)"
  • Fish:
~/.local/try.rb init | source
# 或选择一个路径
~/.local/try.rb init ~/src/tries | source

注意:

  • try 输出的运行时命令是shell无关的(绝对路径,加引号)。只有小型包装函数因shell不同而有差异。

用法

try                         # 浏览所有实验
try redis                   # 跳转到 redis 实验或创建新实验
try new api                 # 以 "2025-08-17-new-api" 开始
try . [name]                # 为当前仓库创建带日期的工作树目录
try ./path/to/repo [name]   # 使用另一个仓库作为工作树源
try worktree dir [name]     # 同上,显式CLI形式
try clone https://github.com/user/repo.git  # 克隆仓库到带日期前缀的目录
try https://github.com/user/repo.git        # 克隆的简写(同上)
try --help                  # 查看所有选项

关于工作树 (try . / try worktree dir) 的说明:

  • 指定自定义 [name] 则使用该名称;否则使用当前工作目录的基名。两者都会加上今天的日期前缀。
  • 在 Git 仓库内:在创建的目录中添加一个分离头指针的 git 工作树。
  • 在仓库外:仅创建目录并切换进去。

Git 仓库克隆

try 可以自动将git仓库克隆到命名规范的实验目录中:

# 使用自动生成的目录名克隆
try clone https://github.com/tobi/try.git
# 创建: 2025-08-27-tobi-try

# 使用自定义名称克隆
try clone https://github.com/tobi/try.git my-fork
# 创建: my-fork

# 简写语法(无需输入 'clone')
try https://github.com/tobi/try.git
# 创建: 2025-08-27-tobi-try

# 粘贴GitHub pull request URL以克隆并检出该PR
try https://github.com/tobi/try/pull/124
# 创建: 2025-08-27-tobi-try

支持的git URI格式:

  • https://github.com/user/repo.git (HTTPS GitHub)
  • [email protected]:user/repo.git (SSH GitHub)
  • https://gitlab.com/user/repo.git (GitLab)
  • [email protected]:user/repo.git (其他主机的SSH)
  • ssh://[email protected]:port/user/repo.git (其他主机的自定义端口SSH)
  • user@host:path/to/repo.git (嵌套SCP风格的SSH URL)
  • https://github.com/user/repo/pull/123 (GitHub pull requests)

GitHub pull request URL 会克隆主仓库,获取PR引用,并在分离头指针状态检出。目录名基于主仓库URL,而非 /pull/ 后缀。生成目录名时,URL中的 .git 后缀会被自动移除。

快捷键

  • ↑/↓Ctrl-P/N/J/K - 导航
  • Enter - 选择或创建
  • Backspace - 删除字符
  • Ctrl-D - 删除目录(需确认)
  • ESC - 取消
  • 直接输入以过滤

配置

设置 TRY_PATH 以更改实验项目存储位置:

export TRY_PATH=~/code/sketches

默认值:~/src/tries

Nix

快速入门

nix run github:tobi/try
nix run github:tobi/try -- --help
nix run github:tobi/try init ~/my-tries

Home Manager

{
  inputs.try.url = "github:tobi/try";
  imports = [ inputs.try.homeManagerModules.default ];
  programs.try = {
    enable = true;
    path = "~/experiments"; # 可选,默认为 ~/src/tries
  };
}

Homebrew

快速入门

brew tap tobi/try https://github.com/tobi/try
brew install try

安装后,添加到你的shell:

  • Bash/Zsh:
# 默认路径为 ~/src/tries
eval "$(try init)"
# 或选择一个路径
eval "$(try init ~/src/tries)"
  • Fish:
try init | source
# 或选择一个路径
try init ~/src/tries | source

为什么选择 Ruby?

  • 单文件,无依赖
  • 在任何有Ruby的系统上工作(macOS内置)
  • 对数千个目录来说足够快速
  • 便于修改

理念

你的大脑不是以整齐的文件夹工作的。你产生想法,尝试事物,像摄入过量咖啡因的松鼠一样切换上下文。这个工具拥抱这一点。每个实验都有一个家。每个家都能被即时找到。你凌晨2点的编码时光不再丢失于虚空。

常见问题

问:为什么不用 cdls 就行? 答:因为你可能有200个目录,记不清你把它命名为 test-redisredis-test 还是 new-redis-thing

问:为什么不用 fzf 答:fzf 对文件来说很棒。这个工具专门用于项目目录,内置了时间感知和自动创建功能。

问:我可以把它用于正式项目吗? 答:可以,但它主要是为实验设计的。正式项目值得有正式的名字和正式的位置。

问:如果我有成千上万个实验怎么办? 答:首先,欢迎加入俱乐部。其次,它能处理得很好——评分算法确保相关的内容保持在顶部。

贡献

它就一个文件。如果你想改变什么,直接编辑它。如果你认为其他人也会喜欢,请发送PR。

许可证

MIT - 随你怎么用。


由患有ADHD的开发者,为患有ADHD的开发者打造。
你的实验项目值得一个安身之处。 🏠

Yukihiro Matz (@yukihiro_matz):
@tobi 给 Spinel 提了一个PR。谢谢!

相似文章

Lobste.rs 关于 Spinel 的讨论

Lobsters Hottest

一篇博客文章认为,Rails 的约定对于 AI 代理和编译器而言是理想之选,并引用提前编译的 Ruby 编译器 Spinel 作为例子,指出该编译器可能消除应用在扩展后需要重写的需求。