Theme 1 – Criticism of LSP’s overhead and preference for direct, in‑process calls
Many commenters argue that shuttling JSON over a TCP socket (or even stdin/stdout) is needlessly heavy compared to the native plugin models that existed before LSP.
- “Using a JSON TCP connection for what on Windows would be direct function calls (COM) or in Eclipse would be direct function calls between Java modules always felt a bit gross.” — mitxela
- “I agree, the only reason LSP exists as it does is for a world running on electron based applications. Plug‑ins and application extensions are not new technology and they are nearly universally more efficient in the forms designed and used prior to 2005‑ish.” — throwaway17_17
- “IPC is the natural solution to that … TCP is not most optimal, but it is ubiquitous. Same thing with JSON.” — bheadmaster
- “Moreover, it's not just stupid, it also does not actually solve anything. A synchronous function can also have obsolete indexing information if it races with the code updates.” — cyberax
Theme 2 – Defense of LSP: decoupling, stability, and cross‑editor language support
Supporters highlight that LSP’s client/server split prevents editor crashes, lets any editor reuse the same language server, and provides a lingua‑franca for tooling.
- “LSP was (to my knowledge) the first language/platform/usecase agnostic protocol intended for use in code editors.” — throwaway17_17 (acknowledging the upside)
- “In LSP, most of the processing happens in the LSP server anyway – communication overhead between client and server is negligible in comparison to it.” — bheadmaster
- “It only makes sense in the context of host security and stability, as proven by plugin issues in those IDEs.” — pjmlp
- “I’m glad that the code editors out there didn’t wait for your theoretical better designed protocol and decided to adopt LSP. Otherwise we’d still have editor that only support one language properly, and the rest is treated like text.” — tredre3
- “LSP is not that bad. They tried to decouple IDE features from a language features.” — ivanjermakov
Theme 3 – Discussion of possible improvements / alternative designs
Several participants suggest tweaks or wholly different approaches (pipes, AST‑based protocols, better synchronization) that could keep LSP’s benefits while reducing its drawbacks.
- “TCP isn’t really necessary. Usually a language server just uses stdin/stdout, which are just pipes.” — Panzerschrek
- “Wouldn’t a normalized protocol based on AST vocabulary and tree operations make more sense?” — lenkite
- “One of the largest issues of LSP is that each language implementation needs to do everything separately… What you’d actually want to do is parse each language into your AST, … and have all the ‘go to definition’, … done generically by the IDE on top.” — kuschku
- “Well for one I wouldn’t design it so both the LSP and the editor need a synchronized view of the underlying file.” — packetlost
- “The hardest thing was to find a way allowing providing useful autocompletion for a document in edited state, when it’s not syntactically‑correct.” — Panzerschrek (pointing to a concrete pain‑point that any redesign must address)
These three threads—criticism of inefficiency, praise for decoupling and safety, and ideas for refinement—dominate the conversation.