主要观点:
- 可以利用 tmux 的特性实现图灵完备的指令集,通过移动窗口来编译在 tmux 中运行的代码。
- 介绍了在 tmux 中实现各种功能的方法,如利用缓冲区实现栈、使用字符串扩展、钩子(hooks)等。
- 实现了将 Python 类似语言和 Brainfuck 语言编译到 tmux 的编译器,并展示了在 tmux 中运行的效果。
- 对实现的语言进行了性能测试,与 Python 相比效率较低,但展示了指令集与 tmux 命令的直接映射。
关键信息和重要细节:
- 缓冲区与栈:缓冲区可用于存储值,通过
set-buffer
添加到栈顶,delete-buffer
删除栈顶元素,#{buffer_sample}
可获取栈顶内容,用于实现栈操作。 - 字符串扩展:tmux 命令允许变量扩展,如
#{pane_current_path}
可获取当前工作目录路径,还可使用条件运算符和算术运算符进行更复杂的扩展。 - 钩子(hooks):可在特定事件发生时运行 tmux 命令,如
window-renamed
和pane-focus-in
,通过set-hook
设置钩子,可实现多种功能,如窗口分割等,但要注意避免创建窗口导航循环。 - 全局变量存储:可使用
@
前缀设置自定义选项作为全局变量,如set @some-option "some value"
,display "option is: #{@some-option}"
可显示变量值。 - Python 类似语言实现:通过一系列
new-window
和set-hook pane-focus-in
操作实现基本的算术运算、条件判断和循环等功能,每个操作都对应一个窗口和钩子。 - Brainfuck 实现:利用会话名作为数据指针,窗口作为指令,实现 Brainfuck 语言的基本指令,如移动数据指针、增减数据等,并处理输入输出。
- 性能测试:将 tmux 实现的 Python 类似语言与 Python 3.11.4 进行性能对比,在检查 269 是否为质数的测试中,Python 运行时间为 0.02 秒,tmux 版本约为 1 分钟。
- 运行和调试:可使用
-L some-socket
标志运行单独的服务器,避免干扰实际的 tmux 服务器,通过tmux wait-for main
等命令控制窗口关闭等操作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。