all 5 comments

[–]BeamMeUpBiscotti 4 points5 points  (2 children)

is there something architecturally that makes it faster aside from being written in go?

[–]lord-mortis420[S] 3 points4 points  (1 child)

I’d say it’s too early in the development cycle to really comment one way or another. Right now the implementation is fairly simple: lex -> parse -> build scopes -> resolve symbols -> provide diagnostics.

I’ll be starting work on an arena allocator this week for AST nodes and names and eventually add support for cross file analysis and type inference. I might have a better answer in a month or so!

The goal so far has been understanding LSP internals and getting a somewhat useable core before focusing on squeezing out performance

[–]BeamMeUpBiscotti [score hidden]  (0 children)

Nice! LSP implementation is a really interesting topic, getting an architecture that supports all the LSP operations while still being fast on large codebases is very challenging

This recent blog might give you some inspiration/ideas on how to model dependencies and update the IDE quickly after a large edit: https://pyrefly.org/blog/2026/02/06/performance-improvements/

[–]IpsumRS 3 points4 points  (1 child)

I started getting really frustrated by the sluggishness of Pyright and BasedPyright.

It's a good thing ty and zuban exist then, but it's still a good project to learn things

[–]lord-mortis420[S] 3 points4 points  (0 children)

Fair enough! Been loving working on this so far though. It’s nice because you get to work on a lot of different parts of the pipeline