@tobi:Matz’s Spinel 是一个用于 Ruby -> C 的 AOT 编译器。我为我的 try 项目研究了它,现在我有一个代码库,它 exe…
摘要
'try' 工具是基于 Ruby 的实用工具,用于管理实验目录,并集成了 Matz's Spinel AOT 编译器,将 Ruby 代码编译为原生 C 以大幅提升速度。
查看缓存全文
缓存时间: 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个名为
test、test2、new-test、actually-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-serverconnpool能匹配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点的编码时光不再丢失于虚空。
常见问题
问:为什么不用 cd 和 ls 就行?
答:因为你可能有200个目录,记不清你把它命名为 test-redis、redis-test 还是 new-redis-thing。
问:为什么不用 fzf?
答:fzf 对文件来说很棒。这个工具专门用于项目目录,内置了时间感知和自动创建功能。
问:我可以把它用于正式项目吗? 答:可以,但它主要是为实验设计的。正式项目值得有正式的名字和正式的位置。
问:如果我有成千上万个实验怎么办? 答:首先,欢迎加入俱乐部。其次,它能处理得很好——评分算法确保相关的内容保持在顶部。
贡献
它就一个文件。如果你想改变什么,直接编辑它。如果你认为其他人也会喜欢,请发送PR。
许可证
MIT - 随你怎么用。
由患有ADHD的开发者,为患有ADHD的开发者打造。
你的实验项目值得一个安身之处。 🏠
Yukihiro Matz (@yukihiro_matz):
@tobi 给 Spinel 提了一个PR。谢谢!
相似文章
@seflless: 我很喜欢 @tobi 的 try 项目。我拿来用了,并让它变得易于部署实验。我只有一个叫 "tri…" 的仓库
一个名为 'try' 的 Ruby CLI 工具,帮助开发者通过模糊搜索、自动日期和智能排序来管理和浏览实验目录。一位用户对其进行了扩展,以便轻松将实验部署到 GitHub Pages。
Lobste.rs 关于 Spinel 的讨论
一篇博客文章认为,Rails 的约定对于 AI 代理和编译器而言是理想之选,并引用提前编译的 Ruby 编译器 Spinel 作为例子,指出该编译器可能消除应用在扩展后需要重写的需求。
Gleam 已将其源代码镜像到 tangled(一个基于 AT 协议的代码托管平台)
Gleam 是一种类型安全的编程语言,已将其源代码镜像到 tangled,这是一个基于 AT 协议构建的代码托管平台。
@tom_doerr: 本地分析超过4000万行代码库 https://github.com/giancarloerra/SocratiCode…
SocratiCode 是一个开源代码库上下文引擎,允许AI在本地分析和理解大型代码库(超过4000万行),无需配置,完全保护隐私。
试试 Benzi — 一个通过 _查询_ 而非读取来理解代码库的编程代理
Benzi 是一个编程代理,通过查询代码库来理解和编写代码,在 SWE-bench Verified 上达到了 77.4% 的准确率,成本低于 30 美元,并且与模型无关。