制作一个编译器来证明 tmux 是图灵完备的

主要观点:

  • 可以利用 tmux 的特性实现图灵完备的指令集,通过移动窗口来编译在 tmux 中运行的代码。
  • 介绍了在 tmux 中实现各种功能的方法,如利用缓冲区实现栈、使用字符串扩展、钩子(hooks)等。
  • 实现了将 Python 类似语言和 Brainfuck 语言编译到 tmux 的编译器,并展示了在 tmux 中运行的效果。
  • 对实现的语言进行了性能测试,与 Python 相比效率较低,但展示了指令集与 tmux 命令的直接映射。

关键信息和重要细节:

  • 缓冲区与栈:缓冲区可用于存储值,通过set-buffer添加到栈顶,delete-buffer删除栈顶元素,#{buffer_sample}可获取栈顶内容,用于实现栈操作。
  • 字符串扩展:tmux 命令允许变量扩展,如#{pane_current_path}可获取当前工作目录路径,还可使用条件运算符和算术运算符进行更复杂的扩展。
  • 钩子(hooks):可在特定事件发生时运行 tmux 命令,如window-renamedpane-focus-in,通过set-hook设置钩子,可实现多种功能,如窗口分割等,但要注意避免创建窗口导航循环。
  • 全局变量存储:可使用@前缀设置自定义选项作为全局变量,如set @some-option "some value"display "option is: #{@some-option}"可显示变量值。
  • Python 类似语言实现:通过一系列new-windowset-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等命令控制窗口关闭等操作。
阅读 11
0 条评论