[HN Gopher] Erlang LS - The Erlang Language Server ___________________________________________________________________ Erlang LS - The Erlang Language Server Author : lelf Score : 171 points Date : 2020-03-13 14:57 UTC (8 hours ago) (HTM) web link (erlang-ls.github.io) (TXT) w3m dump (erlang-ls.github.io) | frou_dh wrote: | I'm sure this one is good. But something I've noticed from trying | Language Servers for various languages is that a lot of them | still need to get over the hump to be an overall help rather than | a hinderance. i.e. using a Language Server that's flakey and | fouls up often is more annoying than not having one enabled at | all. | the_duke wrote: | Yup. Writing a good language server is a big task. | | It needs to do everything a compiler frontend does, and most | languages don't have compilers that are written with this use | case in mind. | | Even if parts of compilers can be used as a library, they are | very rarely written in a IDE compatible way, where you need | fast, incremental and very resilient parsing and type checking. | | Typescript was written with IDEs in mind from the start, which | is a big reason it excels here. C# has a dedicated IDE | toolchain called Roslyn. | | And for dynamic languages the task is even more complicated, | since you need to implement type inference and static analysis. | dnautics wrote: | It's not erlang-ls, but having used elixir-ls is a pleasure | (for the unaware, elixir runs on the erlang vm). Pretty much | everything just works as you would expect, and it's a huge | timesaver. Erlang and elixir have static typechecking, which | is a slow process from the command-line, but it's integrated | and "just works" with the ls, and rather refreshingly fast. | | I even wrote a Zig package for elixir, which plugs into the | elixir compiler, and I found that the ls correctly highlights | compile-time errors in my Zig code embedded in the Elixir | Code. About a month ago VSCode switched to auto-code-loading | (instead of hitting save) and now my Zig embedded in Elixir | live-highlights mistakes (with about a 500ms delay). | | So if erlang-ls is about as good as Elixir-ls it'll be | fantastic. | sitkack wrote: | Wait, please explain/expound on using Zig contained within | Elixir?! Is this running in or out of proc? What is your | dev/edit cycle like? | | I love Zig, but it doesn't have the security guarantees | (yet) of Rust, so I would recommend either running it out | of proc or within an in-proc Wasm environment, which | actually has other interesting properties. | | __edit | | https://www.reddit.com/r/elixir/comments/e955jw/zigler_zig_ | n... | | https://hexdocs.pm/zigler/Zigler.html | | So this is an Erlang Nif [3] which runs inside the VM, akin | to JNI in Java. This also means that errant code can bring | down the entire VM. | | Would you be open to a fork of Zigler that targeted a Wasm | environment running inside the Erlang env? | | [3] http://erlang.org/doc/man/erl_nif.html | dnautics wrote: | You can do what you want :) in practice it's really hard | to bring down the erlang VM in zig. I'm also going to | experiment with OTP managed OS threads, which I think | should allow you to safely run code that panics (but | maybe not segfaults), and will clean up the memory | resources after you. | | I think in general though you should be using zig not | rust, because zig is aggressively unopinionated about | memory allocators, so when you allocate memory in your | code, you'll use the allocator that zigler provides, | which makes the BEAM alloc conformant to zig's allocator | interface. This means your code will be more performant, | because there are fewer trips to the kernel on allocate | and destroy, and your code will respect the BEAM's memory | fragmentation, cache optimization, etc. | 3fe9a03ccd14ca5 wrote: | > _Yup. Writing a good language server is a big task._ | | Language servers, along with auto formatting and debugging | features should now be first-class design decisions for a new | language. They shouldn't be afterthoughts. | | Something Go for right was the formatted, something that they | for wrong was debugability. | | New languages must make a decision to get these features | right from the start. | edjrage wrote: | Sorry, I agree with you, but I don't understand what your | point is. This post is about Erlang, which is far from a | "new language". | beagle3 wrote: | Language designers: you may want to see how Nim helps these | causes. E.g. it includes a tool called "nimsuggest" which | make it easy for VSCode, vim and Emacs modes to (relatively) | easily implement intellisense-style suggestions. | robertoaloi wrote: | I would say that the API and functionalities provided the | Erlang compiler and other syntax tools is quite extensive, | compared to other languages. There are a few quirks (some of | them addressed in the latest versions of OTP), but generally | speaking these libraries are reasonably simple to work with. | Erlang LS does most of the work by using standard OTP | libraries. The project maintains a fork of the preprocessor | dodger provided by OTP (https://github.com/erlang- | ls/erlang_ls/blob/master/src/els_d...). | Ciantic wrote: | > And for dynamic languages the task is even more | complicated, since you need to implement type inference and | static analysis. | | For dynamic languages the static analysis and type inference | would end up looking a lot like in TypeScript. | | I wish we could retool TypeScript language server for other | dynamic languages, that would make things interesting. | marcrosoft wrote: | The more I learn about lisp the more I see its insights. The | interpreter itself is kind of like the language server. | rapsey wrote: | Does it work better than: | https://github.com/pgourlain/vscode_erlang ? | robertoaloi wrote: | I would say the major difference is that "vscode_erlang" is | tailored for VS Code, while Erlang LS aims at be editor- | agnostic (which is the main point of implementing a Language | Server). There are currently some differences in terms of | features, too. For example, VS Code has support for a debugger, | which Erlang LS does not have (yet). On the other hand, Erlang | LS provides support for Dialyzer or Elvis and I'm not sure if | those are provided by VS Code Erlang. You can compare the list | of available features: | | https://github.com/pgourlain/vscode_erlang#erlang-for-visual... | https://erlang-ls.github.io/features/ | durandal1 wrote: | Configuring Neovim for different languages used to be such a | hassle, now with CoC.nvim, all it takes is pointing to the LS, | combined with the benefits of having functionality standardized | for all languages. I've used Erlang LS briefly, and if nothing | else, it's _way_ easier to set up. | giancarlostoro wrote: | Source here for those interested: | | https://github.com/erlang-ls/erlang_ls | | Specifically here: | | https://github.com/erlang-ls/erlang_ls/tree/master/src | robertoaloi wrote: | If you would like to try it out, you can do it in the browser: | | https://gitpod.io/#https://github.com/erlang-ls/erlang_ls | | Zero setup, just login via your GitHub account. | sigjuice wrote: | Is there a way to try it without logging in? | robertoaloi wrote: | I don't think so, unfortunately. Of course you can follow one | the installation instructions for one of the available | editors. See the "editors" section on the website. | Instructions exist for Emacs, VSCode, Vim, etc. ___________________________________________________________________ (page generated 2020-03-13 23:00 UTC)