Replies: 10 comments 25 replies
-
My original concept was always to have a very lightweight main file which is autogenerated from some local configuration. So in the current source, This does introduce the problem of not having a "standard" one to download. |
Beta Was this translation helpful? Give feedback.
-
HLS <-> Plugins <-> all Plugin dependencies tree - have two-way coupling. Two-way coupling is a notorious characteristic in architectural design, because it is most frequent example of strict rigidity in the systems which is additionally known to propagate the strain not only through itself, but also around itself. I showed that HLS build depends on the builds of pluging dependencies. HLS build strictly depends on Change in We can observe the root of Where the superficial project dependency, To be clear - it is not because of particular package, it is just real world example of superficial to the agenda introduced complexity, because of the It complicates the process, instead of HLS having the ability to simply think & address GHC 9.0.1 API <-> HLS support of it & HLS own direct dependencies & then making the release. The release of HLS in itself would motivate the community, plugin authors/maintainers to start working on their parts of the infrastructure.
There is also the question. Currently support of API changes in plugins lays on the who does the HLS code changes. Would plugin authors be able to address plugin API HLS updates - is to their experience. |
Beta Was this translation helpful? Give feedback.
-
I'm going to address the points summarised by @michaelpj in individual posts, starting with this one. Compatibility work (GHC)Indeed, this is the main source of maintenance overhead, and the initial motivation for this discussion. The 9.2 GHC upgrade has been a huge effort and is far from finished, with only 9 out of 19? plugins migrated. I stirred a discussion with the hope of getting the attention of plugin maintainers and coming up with a plan to make future upgrades easier! Now, plugin contributors cannot really upgrade their plugins until the core HLS packages, namely Proposal: invest our OpenCollective funds in summer projects or GHC consultancy to help with this work, as done last summer by @fendor. |
Beta Was this translation helpful? Give feedback.
-
Plugin ownership and individual reposWhat benefits does HLS get from the current monorepo structure?
The hope is that individual repos would lead to an increased sense of ownership, presumably because issues, upgrade requests, and volunteer patches would be reported directly to the plugin repo, which would nominally belong to the plugin author. But that’s assuming that users are able to identify the plugin and find the plugin repository easily. No proposal for now, since for me, the benefits of the monorepo are just too good, and the assumption that users will be able to find the plugin repo is dubious. Is there any solution that preserves the monorepo but increases the plugin ownership? Perhaps an informal contract like that of Stackage? |
Beta Was this translation helpful? Give feedback.
-
Runtime code loadingIf we split the plugins out, binary releases become much more of a headache. Runtime plugin loading offers a solution by allowing binary releases to essentially ignore plugins, and hand over their management to end users or other tooling like ghcup. But this benefit comes with a set of problems/costs, well identified by @michaelpj. No proposal since it doesn’t look too promising, although that could change if someone develops a working POC. |
Beta Was this translation helpful? Give feedback.
-
Agree with pepe's thoughts. Only note that we have to deal with problems affecting the haskell development in general. Aggravated by the fact we are deep downstream in the dependency graph and our dependency set covers "half of useful hackage". So generic solutions already discussed in other community forums will benefit us more too. And we are totally tied to the ghc api and we have to deal with the continuous stream of breaking changes coming from ghc development. Not sure if move the code to other repos could make the situation qualitatively different. |
Beta Was this translation helpful? Give feedback.
-
So maybe we should agree that the monorepo is a good idea, and consider how we can decouple things so we have a core that has to work, encompassing some minimal set of plugins, and then HLS proper which has the full or carefully curated plugin set. So some sort of arrangement similar to what we initially had where ghcide was a standalone project, that we used in HLS. Given the ability to configure projects in cabal (and stack), we should be able to come up with a usable partition, and then arrange for the CI to run differently for the core, and give the appropriate signal for it. |
Beta Was this translation helpful? Give feedback.
-
Well i think the actual internal dependency set already is the proposed by @Anton-Latukha and @alanz in his last comment:
|
Beta Was this translation helpful? Give feedback.
-
One thing is notifying the relevant authors of some plugin, or having some kind of issue/table/system saying X plugin needs work. I just kind of assumed that the plugin I wrote worked in 9.2, and then I saw a pull request of @mrgutkun fixing it and was like oh oops you guys were talking about me. |
Beta Was this translation helpful? Give feedback.
-
Okay, concrete suggestion: I propose to:
|
Beta Was this translation helpful? Give feedback.
-
This is a summary of some discussion that happened on IRC, prompted by @pepeiborra saying:
Apologies if I misrepresented anyone, please correct me. Also plenty more to discuss.
Compatibility work
@michaelpj claimed that a lot of the painful maintenance version is due to compatibility work, e.g. upgrading to support new GHC versions, or versions of downstream libraries. The contributors of plugin code aren't leaping to contribute to this work, since it's unpleasant and difficult and they're not forced to.
It would be good to spread this out. A few ideas that came up:
Plugin ownership
As @pepeiborra observed, we often see people contribute (good!) plugin implementations, and then largely lose interest in HLS and not contribute after that. Ultimately this means that the maintenance burden falls on the "core contributors" (here just: anyone who keeps contributing!).
It would be helpful if we could encourage people to stay engaged, perhaps by making them feel that they had more "ownership" over their plugins. Some ideas for how to do this:
CODEOWNERS
in the HLS repository.Splitting out plugins
Putting plugins in their own repositories would potentially help, since the repository owner would feel more obvious "ownership" of the codebase, even if some other HLS maintainers also had write permissions.
This would come with all the usual tradeoffs of monorepo vs polyrepo development: doing large cross-cutting changes (e.g.
aeson-2
support) would be more difficult and require multiple PRs to multiple repos; Hackage releases would be more spread out; code quality might be more variable etc.Runtime code loading
@jneira argued that we really should move towards runtime code loading of plugins, truly removing the build-time dependency of HLS on its plugins. This is philosophically neater and would avoid issues with circular dependencies between repositories (
haskell-language-server
->my-plugin
->hls-plugin-api
).@michaelpj argued that
Beta Was this translation helpful? Give feedback.
All reactions