DMD as a library - recap, next steps
RazvanN
razvan.nitu1305 at gmail.com
Tue Jun 16 09:15:24 UTC 2020
On Tuesday, 16 June 2020 at 09:00:55 UTC, Petar Kirov
[ZombineDev] wrote:
> On Tuesday, 16 June 2020 at 08:16:25 UTC, Stefan Koch wrote:
>> [...]
> It is useful for serialization and source generation purposes
> at least. In other language communities, where they don't have
> the metaprogramming power of D, they do extensive source code
> generation, and most of the time you don't need much semantic
> for that (sometimes you just need a way to string interpolation
> on symbol names).
>
Indeed!
> Also perhaps one of the goal is to completely replace the
> parser with something more fault-tolerant. For example see:
>
> https://unallocated.com/blog/incremental-packrat-parsing-the-secret-to-fast-language-servers/
>
> https://github.com/tree-sitter/tree-sitter
> https://github.com/tree-sitter/tree-sitter/blob/master/docs/index.md
>
> ^^^
> I suggest you watch the talks linked from the last page.
>
That is exactly what I had in mind.
>> [...]
>
> I agree. Though if a refactoring of this sort increases the
> compile-time by 2x we have serious problems elsewhere. I don't
> expect something like this to require more 1.15x in the worst
> case. And even then we should be able to find many ways to
> further decrease the compile-time to e.g. 0.85x.
>
You are correct. I was exaggerating for the sake of the argument.
What I meant was: we are extremely fast, but we are lacking a
compiler interface. Small performance regressions are acceptable
if they offer a guaranteed benefit with regards to defining a
good interface.
>
> I suggest you try using a language with an excellent
> implementation of a LSP (language server) like C# or
> TypeScript. You'd be amazed how well it works. It is able to
> make sense of all kinds of broken code (e.g. giving you
> auto-completion for a function with a missing closing curly
> brace. Most of these things are completely impossible to do
> with the current rigid nature of the dmd frontend.
>
> Of course Razvan, Edi and Cristian are in better position to
> answer, but I think that the main idea is that they don't want
> to change the language, but instead they want to be able to
> plug code in more parts of the compilation pipeline so the LSP
> can be notified when e.g. the compiler is visiting an overload
> set. For example, the compiler may stop looking when it finds
> the best overload match, while for the LSP you want to display
> overloads, as the user may have made a typo and so on. (Please
> don't read too much into this example, I may have made a
> mistake, but the general idea is that they need to be able to
> extract more info from the frontend.)
>
You are entirely right. We have replaced all uses of libdparse and
other tools that mimic semantic analysis in DCD with dmd as a lib
and
it works, but it requires that we override current semantic
analysis that
is done for CallExps to be able to cope with semantic failures on
incomplete code.
>> [...]
>
> The use case implementing all of this API:
>
> https://microsoft.github.io/language-server-protocol/specifications/specification-current/
>
> Specifically, take a look at the "Language Features" section,
> e.g.:
> https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_completion
>
>> [...]
>
> The set of C developers that want to write a D langauge server
> is much smaller than the set of D developers that want to do
> the same :D
>
> But I agree on the general point that a well-defined and
> versioned API is much needed, just like it sucks when changes
> frontend break LDC and GDC.
Thanks for your reply. I feel that we are on the same page on
this.
More information about the Digitalmars-d
mailing list