当一门诞生于 1957 年的编程语言,试图对接 2020 年代兴起的去中心化社交协议时,会发生什么?FormerLab 团队用 Fortransky 项目给出了答案 —— 一个完全用 Fortran 编写的终端 - only Bluesky/AT Protocol 客户端,在 GitHub 上引发了技术社区的广泛讨论。这个看似「复古」的技术选择,并非简单的怀旧行为,而是经过深思熟虑的工程决策,其背后折射出的语言互操作性与现代协议实现路径,值得深入剖析。
为何选择 Fortran:一场意外的技术回归
Fortran 作为科学计算领域的元老语言,长期活跃于高性能计算、气象模拟、数值分析等场景。其在字符串处理、网络协议、并发编程等方面的能力长期被业界低估。实际上,现代 Fortran(2003 标准及以后)已经支持丰富的字符串操作、指针运算以及一定程度的面向对象特性。FormerLab 团队选择 Fortran 作为主开发语言,核心动机并非「玩票」,而是看中了 Fortran 在处理结构化二进制数据时的高效性 ——AT Protocol 的底层数据编码恰好以 CBOR 格式为主,这与 Fortran 处理紧凑二进制数据的能力形成了天然契合。
从项目架构来看,Fortransky 采用了混合语言实现模式:约 70% 的核心业务逻辑使用 Fortran 编写,剩余部分则由 Rust、C 以及少量 Python 代码共同完成。这种「Fortran 为核心、Rust 做桥梁」的架构设计,巧妙规避了 Fortran 在现代网络编程生态中的短板。Rust 组件主要负责两件事:一是作为本地 firehose 解码器,直接解析 Bluesky relay-raw 流的高吞吐量数据;二是处理与 AT Protocol 身份认证系统(OAuth2)的复杂交互。Fortran 代码则专注于状态机管理、终端渲染以及协议消息的序列化与反序列化。
AT Protocol 的技术门槛与 Fortran 的应对策略
AT Protocol(Authenticated Transfer Protocol)是 Bluesky 提出的去中心化社交协议,其设计理念类似于「联邦式 DNS」—— 每个用户的数据存储在自己的数据仓库(repo)中,通过 PDS(Personal Data Server)进行统一管理。客户端需要实现的功能包括:用户身份认证、数据仓库同步、帖子发布与读取、关注关系维护、以及 firehose 实时流订阅。对于任何客户端开发者而言,这些都是相当复杂的技术挑战。
Fortransky 在实现过程中面临的首要难题是 HTTP/2 协议栈的缺失。AT Protocol 的 API 交互基于 HTTP/2 标准,而 Fortran 的标准库中并不包含现成的 HTTP 客户端实现。项目的解决方案是利用 C 语言编写的 libcurl 绑定,通过 ISO C Binding 接口与 Fortran 代码无缝对接。这一方案虽然在性能上并非最优,但足以满足终端用户的日常使用需求。值得关注的是,项目团队明确表示他们不打算支持 BGS(Big Graph Service)的大规模数据同步 —— 这并非技术能力不足,而是有意为之的产品策略取舍,专注于轻量级的终端使用场景。
终端渲染:复古交互的现代实现
作为一款终端 - only 客户端,Fortransky 的用户界面完全运行在字符界面之上。团队选择了 ncurses 作为底层终端控制库,通过 Fortran 接口直接调用 curses 函数,实现了类似 IRC 客户端的文本界面。这种设计选择不仅致敬了早期的互联网交互模式,也在一定程度上降低了视觉干扰,让用户专注于内容本身。
在终端渲染层面,项目展示了 Fortran 潜力的一面:通过自定义的光标管理与颜色控制代码,Fortransky 能够在不支持真彩色的终端环境中提供层次分明的 UI 布局。帖子、回复、转发等内容类型通过不同的前缀符号与缩进进行区分,时间戳与互动数据则采用紧凑的单行格式呈现。这种「少即是多」的设计哲学,与当前主流社交客户端的复杂界面形成了鲜明对比。
工程启示:老语言的新生
Fortransky 项目的存在,首先证明了现代协议设计具有良好的抽象层次 —— 只要底层通信机制(CURL 绑定)与数据格式解析(CBOR 解码)得到解决,编程语言的「年龄」并非不可逾越的障碍。其次,这个项目也揭示了语言互操作性的终极价值:在多语言项目中,找到每种语言最适合其特性的场景,让 Fortran 处理其擅长的结构化数据,让 Rust 处理其擅长的现代异步生态,两者各取所长而非相互取代。
对于有意构建小众语言客户端的开发者而言,Fortransky 提供了可复用的工程模板:明确语言的能力边界,用其他语言填补生态空白,在产品定位上做出务实取舍。一个终端 - only 的轻量客户端,恰好是这种「混合架构」的最佳试验场 —— 既不需要复杂的图形渲染,也不需要庞大的第三方依赖生态。
资料来源
- GitHub: FormerLab/fortransky 项目仓库
- Hacker News: "Show HN: We built a terminal-only Bluesky / AT Proto client written in Fortran"