-
Notifications
You must be signed in to change notification settings - Fork 323
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Language Server 2.0 #5419
Comments
Another thing to consider is that we cannot upgrade to latest Akka nor should we base any further development on it because of its restrictive license change - https://www.lightbend.com/akka/license.
|
Oh wow. I did not dig deep enough to understand the new license, but are you sure that such projects as our would not be able to use it? Looks like a killing license for Akka.
|
@wdanilo Yeah, fairly sure. Here is more on the topic https://www.infoq.com/news/2022/09/akka-no-longer-open-source/. There is a whole discussion on forums about it when it happened but the general sentiment is toward moving away from it. We are OK for now, but in the longer term it won't make sense to base more infrastructure on it.
|
A quote from https://mariadb.com/bsl-faq-adopting/
Right. Nobody will ever write any new open source library against Akka, if it is licensed under BSL. Using Akka in an open source project will also become quite painful. What a path into oblivion!
|
This is crazy! |
Idea: Use y.js AST for communition between the engine and IDEs. |
Language Server 1.0
The current version of the language server (LS) does not have an optimal performance. Back in the days it was built with the different requirements in mind, and can be implemented in a more optimal way.
Language Server 2.0
A new language server can be created with different requirements based on the experience of building the first version.
Use Virtual Threads
JDK21 is the first LTS version to provide support for virtual threads. Virtual threads are light to create and light to block. One can write sequential code and invoke it as effectively as reactive code. We should use one of the frameworks that provides support for virtual threads and simplify the current actor based system. Consider:
Micronaut & Quarkus rely a lot on dependency injection. It may be impossible to use them without all the DI magic. Níma provides imperative API to build and handle the routes.
Distribute Language Server with the IDE
There is an effort to run language server as hosted Java. It'd be great if these two efforts emerged together.
Write Language Server in JavaScript or Enso
An alternative to above mentioned Java frameworks is to write language server in JavaScript and execute it by GraalVM. We cannot easily support all
node.js
modules, but we can support latest, greatest JavaScript specification and emulate essentialnode.js
APIs (for example for handling websockets viaWebSocketServer
). Enso Engine is already running JavaScript (to process JSON), so running JavaScript for language server isn't going to add much overhead.Alternatively the language server could be written in Enso itself. Using the same emulation of websockets we could handle the incoming and outgoing messages in plan Enso code. Using JavaScript or Enso comes with familiarity of the languages and also support the Distribute Language Server with the IDE goal - having it in JS or Enso will require less changes in IDE build system than writing the server in Java.
The text was updated successfully, but these errors were encountered: