Skip to content

Commit c8cb6a3

Browse files
findleyrgopherbot
authored andcommitted
gopls/doc: add a note updating the original design doc
The design doc for gopls is very out of date, but seems worth preserving. Add a note to make the context clear, and update the status a bit. Change-Id: I71fe88a87f2b72d126839ccb87f611c34c8eb269 Reviewed-on: https://go-review.googlesource.com/c/tools/+/546795 Auto-Submit: Robert Findley <[email protected]> Reviewed-by: Alan Donovan <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 184d2a7 commit c8cb6a3

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

gopls/doc/design/design.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,47 @@
11
# `gopls` design documentation
22

3+
## _A note from the future_
4+
5+
What follows below is the original design document for gopls, aggregated from
6+
various sources spanning 2018 and 2019. Since then, all of the features listed
7+
below have been implemented, along with many others. The first two goals have
8+
been achieved: gopls is a full implementation of the LSP, and the default
9+
backend for VS Code Go and many other editors. The third goal has only been
10+
partially realized: while gopls has gained many features, it is not extensible
11+
in the sense used in this document: the only way to extend gopls is to modify
12+
gopls. The fourth goal is not achieved: while some notable companies are able
13+
to use gopls with Bazel, the experience is subpar, and the Go command is the
14+
only officially supported build system.
15+
16+
On the other hand, two of the explicit non-goals have been reconsidered. One is
17+
minor: syntax highlighting is now supported in the LSP by way of semantic
18+
tokens. The other is major: as gopls gained popularity, it became apparent that
19+
its memory footprint was a problem. The size of developer workspaces was
20+
increasing faster than the RAM available in typically development environments
21+
(particularly with containerized development). Gopls now uses a hybrid of
22+
on-disk indexes and in-memory caches, described in more detail in our
23+
[blog post on scalability](https://go.dev/blog/gopls-scalability).
24+
25+
Notably, in anticipating difficulties this doc turned out to be prescient.
26+
Gopls has indeed struggled against the core standary library packages upon
27+
which it is built, and its user experience is still limited by the LSP.
28+
Nevertheless, sticking with the standard library and LSP was the right
29+
approach, as despite our small team these decisions have helped gopls keep up
30+
with the evolving Go language (i.e. generics), and to integrate with many new
31+
text editors.
32+
33+
Gopls development continues, more than four years later, with a focus on
34+
simplicity, reliability, and extensibility. The new, opt-in
35+
[Go telemetry](https://github.com/golang/tools/releases/tag/gopls%2Fv0.14.0)
36+
will help us attain a higher standard of stability in our releases than we've
37+
been able to achieve through Github issues alone. Furthermore, telemetry will
38+
allow us to focus on high-priority features, and deprecate historical
39+
workarounds that burden the codebase. With greater velocity, we look forward
40+
to working with the community on improved refactoring, static analysis, and
41+
whatever else the future brings.
42+
43+
- _Rob Findley ([email protected]), 2023_
44+
345
## Goals
446

547
* `gopls` should **become the default editor backend** for the major editors used by Go programmers, fully supported by the Go team.

0 commit comments

Comments
 (0)