最近围绕 ABAP Development Tools for VS Code、LSP、MCP Server 讨论得越来越多,其中有一个很容易产生误解的地方,就是很多人看到Language Server Protocol这个名字之后,会自然地认为,既然 ABAP 代码、DDIC、CDS、RAP 对象都存在 SAP 系统里,那么最合理的做法似乎应该是把Language Server也运行在 ABAP 后端。
从纯粹的软件架构美感来看,这种想法很自然。
但 SAP 最终没有这么做。
题目中的这段话,实际上已经把原因讲得相当直接,只是里面夹杂着 ABAP 工具二十多年形成的兼容性包袱、ADT 的 Client Server 架构、LSP 的部署位置,以及 SAP 客户系统升级节奏等背景。如果不了解这些历史,很容易把它理解成单纯的技术选择。
真正的关键词不是LSP,而是backwards compatibility。
这里的backwards compatibility,可以理解成 ABAP 开发工具长期以来形成的一条非常特殊的产品承诺,我们安装比较新的 ADT 客户端,并不要求连接的 ABAP Backend 也同步升级到最新版本。
SAP 在官方的 ADT for VS Code 架构文章里给出了非常关键的数据。传统 ADT 存在一套与 IDE UI 相对独立的客户端代码,这部分代码大约有 290 万行。它负责连接 ABAP Backend,封装已有的 ADT REST API,同时承载 Debugger、Test Runner、ATC