In my mind, the main value of LSP is social: it pushes language designers and compiler writers to think about editing and refactoring incomplete code, which is a very different problem from compiling mostly correct code. Dart support in IntelliJ is powered primarily by this server. The details of protocol are different (as it predates LSP) and it doesn't try to be language agnostic. The Dart Analyzer project is particularly interesting - it's the same "separate server process speaking JSON" kind of architecture. Notable non-JetBrains tools from before LSP era are Roslyn and Dart Analyzer. Before LSP, only JetBrains delivered these kinds of compilers consistently. "Rewrite your entire compiler from scratch" kind of hard. The problem is that writing a language server that works is hard. A single person can do that and if, say, at least 1000 people use editor X with language Y, it doesn't seem like a waste of effort to me. If you have an editor, which has bespoke APIs for providing completion, and a language server, which speaks bespoke protocol, binding the two together is not hard. I personally don't believe that NxM is a real problem. However, I can share my (very hand-wavy) thoughts on the general LSP ecosystem, and it looks like that might actually answer your question. I must say I don't fully understand your original question, so I can't answer it directly.
How to use tes5edit papyrus log analyzer update#
Please recompile the absolute minimum necessary to tell me whether my change works." To answer a question like that efficiently, you have to rearchitect the whole compiler from being pass-based to being query-based, so you can give it instructions like "please update the type of just this expression". There, you want to say "I just changed this function.
Maybe you only have to rerun them for a given "compilation unit", but that's bad enough.) This is the opposite of what you want for an IDE. But anyway, the key point here is that, if you change any of the code, you have to run all of these steps all over again. And optimization itself usually involves multiple passes of different kinds. This is oversimplifying things, as in practice there are intermediate representations between the parse tree and the machine code. In my head it looks like:Ĥ) Translate the parse tree into unoptimized machine code. My understanding is that the "traditional way" is based on a number of "passes". There's much more to the dev experience than the compilation experience. The compiler messages may be known for being great, but many people, especially newer devs figuring out a language, don't sit there with a compiler open while they explore what is and isn't allowed. It may have permanently turned off lots of people to Rust because they tried it and assumed the language was just too hard, when in reality they were flying blind. But I think it was a mistake to de-prioritize the editor experience for so long. I know the Rust team is hard at work, and I know they have a lot on their plate, and I'm very grateful for the work that they do. But now I see how much better it could've been!
I didn't question how terrible the editor experience was. And the thing is, because Rust is such a complex-to-compile language, and because there's all this discussion around its slow compilation times that they're working to improve, I just assumed the whole time that "well I guess this is the cost of having such a powerful type system". and better tooling is going to make it soar even higher. It is very performant and consumes about 2 megabytes of ram while running and providing a continuous streaming websocket info feed to the to-be-developed dashboard that we are doing. So if you just like me got little winded at the sheer complexity of the whole Rust thingy and decided to wait a little more to dive in, let me tell you: rust-analyzer makes the whole thing way more palatable.įast forward a WEEK later and I have a multithreaded message passing, postgresql consuming backend prototype to show the guys. " type inlay changing dynamically as I instantiated the object on the right hand side. "What, I now have practically instant inlay typings as I type a line of code?"Į.g: "let x =. Again, I redid my dev setup with VSCode but this time I used rust-analyzer, and oh boy. Last month a project with requires the development of a high performance event collector came in, and I decided it was time for us to go to the Rust side.
I tried Rust a few months ago and I was a little dumbfounded on how little 'modernity' I felt (regarding the IDE experience) compared to what several articles told me I should expect when using Rust with, for example, Visual Studio Code.