Skip to content
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

Make lib a package #9844

Closed
wants to merge 1 commit into from
Closed

Conversation

thewilsonator
Copy link
Contributor

@thewilsonator thewilsonator added the Refactoring No semantic changes to code label May 23, 2019
@dlang-bot
Copy link
Contributor

Thanks for your pull request and interest in making D better, @thewilsonator! We are looking forward to reviewing it, and you should be hearing from a maintainer soon.
Please verify that your PR follows this checklist:

  • My PR is fully covered with tests (you can see the annotated coverage diff directly on GitHub with CodeCov's browser extension
  • My PR is as minimal as possible (smaller, focused PRs are easier to review than big ones)
  • I have provided a detailed rationale explaining my changes
  • New or modified functions have Ddoc comments (with Params: and Returns:)

Please see CONTRIBUTING.md for more information.


If you have addressed all reviews or aren't sure how to proceed, don't hesitate to ping us with a simple comment.

Bugzilla references

Your PR doesn't reference any Bugzilla issue.

If your PR contains non-trivial changes, please reference a Bugzilla issue or create a manual changelog.

Testing this PR locally

If you don't have a local development environment setup, you can use Digger to test this PR:

dub fetch digger
dub run digger -- build "master + dmd#9844"

@thewilsonator thewilsonator force-pushed the package-lib branch 3 times, most recently from f0e6391 to badd75e Compare May 23, 2019 03:38
@WalterBright
Copy link
Member

No, we're not packagizing dmd.

@JinShil
Copy link
Contributor

JinShil commented May 23, 2019

No, we're not packagizing dmd.

Then we're not utilizing D. Packaging the repository will make it easier to understand DMD, and will also allow us to utilize D's encapsulation features. Some parts of DMD do not need to be publicly exposed, but do need to be shared between modules. Packaging will help encapsulate that, expecially when using DMD as a library.


version(Windows) {}
else version(OSX) {}
else:
package(dmd.lib):
Copy link
Contributor

@JinShil JinShil May 23, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@WalterBright There's value in this ^^

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep thats the entire point of the PR.

Sources sources = {
frontend:
dirEntries(env["D"], "*.d", SpanMode.shallow)
packages.map!(p => env["D"].buildPath(p).dirEntries("*.d", SpanMode.shallow))
Copy link
Member

@wilzbach wilzbach May 23, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would just "{,lib}*.d" work?
See also: https://dlang.org/library/std/path/glob_match.html

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure.

Copy link
Member

@wilzbach wilzbach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

For additional awesomeness, a follow-up PR could be to build the lib package separately for faster build times (:
(though definitely not required here)

@thewilsonator
Copy link
Contributor Author

Definitely, I want this PR as simple as possible though.

@andralex
Copy link
Member

andralex commented May 23, 2019

No, we're not packagizing dmd.

I no longer have a say in this (cc @atilaneves), and am neutral on the matter; I consider it minor and not worth fighting over. But allow me to share a thought.

Years ago I joined this project at Facebook: https://github.com/facebook/hhvm. It's daunting. Two million lines of code (now it's closer to three), scantily documented (that has improved quite a bit), sprawled over an arcane directory structure, with an awkward build and test process. To add insult to injury, the coding convention used prescribed a 2-space indent size and a maximum line length of 80 columns.

Several directories in the project contained over one hundred files; see e.g. https://github.com/facebook/hhvm/tree/master/hphp/runtime/base (153 files), https://github.com/facebook/hhvm/tree/master/hphp/util (220 files), or https://github.com/facebook/hhvm/tree/master/hphp/runtime/base (a whopping 367 files, and where the team spent most of its time). That's the case across languages, too, e.g. https://github.com/facebook/hhvm/tree/master/hphp/hack/src/server has 137 ML files.

The first day I joined the project I could have found a dozen ways to reorganize the project to better suit my preferences. Yet I didn't. Why? Because it was the choice of the project leader. This kind of stuff does not matter to a professional, and basic courtesy and collegiality leaves such matters to the project leader. I got on with the project and a good time has been had for one year.

@WalterBright opposed major reshuffling of dmd's directory structure. He is the project leader and by far the most prolific and longstanding contributor to the project. It is professional courtesy to let him have his say in such matters, and repeatedly attempting to undermine his decision is disrespectful.

There has been this implication that if only this one more grand in scope but trivial in substance restructuring would be done, a lot of latent power would be unleashed and proposers of said restructuring would go on and do wonderful things in the codebase. Having lived through several such "grand but trivial" restructurings with @WalterBright, I can say there's plenty of evidence that the best thing about such a restructuring is it creates precedent for the next restructuring, in an endless cycle of busywork.

Encapsulation is not even a win of this PR, as #9852 shows that most symbols can in fact be made private (a stronger stance), leaving only a residue of a handful of functions in scan* public. That PR took a few minutes to write and marks a visible increase in encaspulation. If we figure that those few functions start standing in the way of proper encapsulation, then packaging would be the logical next step. Repackaging should only proceed after an investigation of what symbols can be made private and what symbols must be public or of limited access.

So, I think the right thing to do is go forward and do great work. Please be respectful and do not reopen the matter. A directory structure flatter than what one would prefer does not prevent a professional from getting work done.

@thewilsonator
Copy link
Contributor Author

basic courtesy and collegiality leaves such matters to the project leader. I got on with the project and a good time has been had for one year.

@WalterBright opposed major reshuffling of dmd's directory structure. He is the project leader and by far the most prolific and longstanding contributor to the project. It is professional courtesy to let him have his say in such matters, and repeatedly attempting to undermine his decision is disrespectful.

To accuse me of attempting to undermine him is grossly disrespectful when you asked for the exploration of when we meant by what we were saying in the linked thread. It is literally the top quote of the linked comment!

There has been this implication that if only this one more grand in scope but trivial in substance restructuring would be done, a lot of latent power would be unleashed and proposers of said restructuring would go on and do wonderful things in the codebase.

Of course, I started with this precisely because it is the only part of the codebase that is actually encapsulated properly (to within trivial epsilon). The rest of the codebase is not ready for such transformation, and I accepted that. Thats why I've been trying to sparsify the import matrix.

Having lived through several such "grand but trivial" restructurings with @WalterBright, I can say there's plenty of evidence that the best thing about such a restructuring is it creates precedent for the next restructuring, in an endless cycle of busywork.

Of course, the DMD codebase is a convoluted, maldocumented pile of cluttered import spaghetti. I don't imagine the endless cycles will end until that is no longer the case.

Encapsulation is not even a win of this PR,

That is plainly not true. Yes package is not as strict as private but it is a whole lot better than nothing, and this PR has the advantage of reducing the cluttering in src/dmd which your PR does not.

as #9852 shows that most symbols can in fact be made private (a stronger stance),
leaving only a residue of a handful of functions in scan* public.

Thats nice, but I was aiming for a minimal diff. The last one Walter objected to was much larger and did a bunch of renaming and other unnecessary (from the point of atomicity) code motion and I could accept rejection of that PR on those grounds.

That PR took a few minutes to write and marks a visible increase in encaspulation. If we figure that those few functions start standing in the way of proper encapsulation,
Repackaging should only proceed after an investigation of what symbols can be made private and what symbols must be public or of limited access.

The fact that this PR compiles (modulo merge conflicts) tells you that those few functions are called only from dmd/lib.d and nowhere else. If as much private as possible is the bar you which to set for precedence, then so be it, but I think you're letting the perfect be the enemy on the done.

then packaging would be the logical next step.

So, should I rebase...

So, I think the right thing to do is go forward and do great work. Please be respectful and do not reopen the matter.

... or should I not. And please don't insult me like that, you are above that kind of behaviour.

A directory structure flatter than what one would prefer does not prevent a professional from getting work done.

Maybe, but it does slow them down. But the main impetus for properly structuring the DMD codebase is not for "the professionals", its for those who are less familiar with the codebase. package(dmd.lib) tells them, very clearly, that "assuming my problem is not in this folder, I don't need to worry about the rest of the contents of this file".

Every new contributor to DMD starts out not in that category, including people who are very much professionals. If those people look at the codebase and make a business decision "do I invest the time to figure out where the bug I wish to fix is, or do I work around it?", the current state of the organisation of the codebase is not a motivating factor for fixing the bug. And I've seen this happen to very prominent people within the D community.

@andralex
Copy link
Member

Sorry for assuming. The way I saw this done was make private everything that ca be made so, then assess what impact package would have.

By my count #9852 makes 132 symbols private and leaves a residue of 13 symbols accessible. This PR makes 142 symbols package-level (a weaker form of protection) and leaves 4 public symbols accessible. That includes LOG, which can be trivially made private so let's say 3. So assuming a combination of the pull requests, the remaining question to bring to the project leader is whether hiding 13-3=10 symbols justifies the reorganization.

@thewilsonator
Copy link
Contributor Author

That napkin math also leaves out that it removes 9 files (for the price of a folder) from the main source directory which, while not particularly spectacular when compared to 125 (plus headers), will be significant when it starts to accumulate to make navigation much simpler, particularly for new/potential contributors, Walters oddities with grep notwithstanding.

More to the point, if this is not ready now, what could possibly change in the future that would alter it?

@wilzbach
Copy link
Member

is whether hiding 13-3=10 symbols justifies the reorganization.

That's not the only win (!), we also get better structure and documentation which is again one of the top 3 reasons people don't contribute to DMD (or use it as a library). Just ask anyone on Slack on the NG about their experience with working with DMD. Not being able to find things is a huge problem for everyone.

@andralex
Copy link
Member

More to the point, if this is not ready now, what could possibly change in the future that would alter it?

That's a question for @WalterBright. My understanding is that he wants a flat directory structure, and that he believes a hierarchical package structure in and of itself would not bring any significant improvement. I'm neutral with regard to flatness (would work with any structure the project manager chooses), and I do agree with him that switching to a more hierarchical structure is low-impact. If I were to opine on what the right thing to do is, there'd be a concerted work on better information hiding (high-impact stuff that currently is non-existent), from which repackaging would come as a natural consideration. The whole argument centered on navigation is very weak.

That's not the only win (!), we also get better structure and documentation which is again one of the top 3 reasons people don't contribute to DMD (or use it as a library). Just ask anyone on Slack on the NG about their experience with working with DMD. Not being able to find things is a huge problem for everyone.

I think what's a huge problem for everyone is that a compiler for a real programming language is a complex program. By my experience we're deluding ourselves if we believe that someone would be entirely capable of contributing to a compiler yet they're unable to navigate 125 files in 1 directory, and 10 directories with 12-13 files each would be the enabler.

@thewilsonator
Copy link
Contributor Author

That's a question for @WalterBright.

That was rhetorical.

The whole argument centered on navigation is very weak.

Navigation has more facets than just draining the mental energy of people who know the codebase well, scrolling through a list, it affects:

  • the navigation of documentation (where packaging would help alleviate some of the unfortunate names, some in part due to collisions with keywords, which also break alphabetic sorting (don't even get me started on the backend...)). Documentation is not something that DMD does well by any measure. Speaking of which...
  • navigation for newcomers.

For example, when I started, knowing nothing about compilers and having not done any CS (aside the bastardisation that is taught in industrial engineering), getting dcompute up and producing code was a baptism by fire of the DMD, LDC, LLVM & Khronos' SPIR-V codebases, there is no other way to describe it.

Working with DMD was a right pain in the rear end, so much so, that it was usually faster for me to look up the corresponding concept in clang and figure out what it was doing and what other things were related to it and then deduce where it was in dmd, because it was so much easier to navigate (and the documentation so much better its not even funny). And that was in C++(!!!!).

For a long time it was always much easier to look at the headers DMD keeps around for LDC & GDC to find things because everything was in one place and compact (no function bodies) and the files were appropriately named.

I think you severely underestimate the impact creating packages would have.

we're deluding ourselves if we believe that someone would be entirely capable of contributing to a compiler yet they're unable to navigate 125 files in 1 directory, and 10 directories with 12-13 files each would be the enabler.

You are technically correct, but alas capability is not the factor of interest here, (percieved) cost of effort is. Very capable people that I have spoken to, have decided it is not worth the effort to fix a compiler bug themselves because it (appears to be) too unorganised and they'd rather sub optimally work around the problem because they have more important things to do with their time. On the other extreme is those who lack experience having something that is easy to understand the structure and components and layout makes a HUGE difference. If DMD had been as nicely organised as clang I could have probably saved myself at least two weeks getting up and running.

There are serious opportunity costs with the status quo, don't blithely dismiss them just because you are familiar with the ins and outs of the codebase and its been a while since you had to learn them.

@andralex
Copy link
Member

For another tack - there are many ways to help newcomers with the project:

  • more documentation
  • more unittests, including the best of all worlds - documentation unittests
  • reducing mutable global state and the crosstalk it causes
  • better information hiding (replace public with private)
  • less mutation
  • code deduplication and simplification by switching from "C++ in D" to good D idioms

These are obviously good to have and encouraged by the project leader. If the purpose is to make life better for newcomers, why get stuck in one argument instead of working on the many other very productive opportunities?

@thewilsonator
Copy link
Contributor Author

more documentation

Doesn't help if the organisation of the documentation (which follows the organisation of the code: see LHS margin of https://dlang.org/phobos/dmd_access.html) is still terrible. More is nice but it doesn't help me find the thing I'm looking for if I don't find it the first time around. This is a quality vs quantity thing.

more (documentation) unittests

Once I have found what it is I want, that is somewhat useful, although I could grep to see where and how it is used which would probably tell me more about what I want to know and how to use it. Unlike Phobos which is a library and thus examples are key to documentation, DMD is an application, functions and classes exist to be used and used they are.

reducing mutable global state, private, pure, less code

Those are good, they help lessen the cognitive burden on a file granular scale, but they don't help discoverability or navigability or cognitive burden on a project wide basis (like what files do I look in for the thing that does X?).

why get stuck in one argument instead of working on the many other very productive opportunities?

Because it is front and centre to everyone who has anything to do with the codebase, especially newcomers. You open up src/dmd/ and are greeted with a wall of files and a tiny completely useless readme.

An example / thought exercise: suppose you want to write a tool that given a module declaration warns if any statement in a function/method contain more than X expressions (as a crude measure of the per line complexity of the code). Which classes/functions would you use and for what purpose?

Time how long it takes you using just the source code and https://dlang.org/phobos/index.html and other pages under https://dlang.org/phobos/ , no asking others for help, no looking at #7639 etc.

Then think back on how long it would have taken you to do that if you had packages to guide your search and then extrapolate that experience to someone less informed (with D, compilers, software engineering etc.) than yourself. I'll post a answer after you post one.

@andralex
Copy link
Member

You open up src/dmd/ and are greeted with a wall of files and a tiny completely useless readme.

Would a better readme help?

@thewilsonator
Copy link
Contributor Author

Obviously it can't make it worse, since I don't think you could write a less useful one without being actively deceitful. But it would at best paper over the chasm.

@WalterBright
Copy link
Member

For a long time it was always much easier to look at the headers DMD keeps around for LDC & GDC to find things because everything was in one place and compact (no function bodies) and the files were appropriately named.

Please keep this in mind when evaluating PRs removing the header files from the backend.

I have also recommended public functions in a module be placed "above the fold" with the private leaves below (the opposite of the typical C/C++ source file). Unfortunately, this breaks the file history, so I'm reluctant to do it unless working on a particular piece of code anyway. Having a public/private fold makes for easier discoverability.

@WalterBright
Copy link
Member

Then think back on how long it would have taken you to do that if you had packages to guide your search and then extrapolate that experience to someone less informed (with D, compilers, software engineering etc.) than yourself. I'll post a answer after you post one.

It would be great to write a TableOfContents.md that lists each source file and what's in them. They can even be grouped into hierarchical categories in the list.

In fact, the Ddoc header for each source file should illuminate what the module does, but such is absent from most of the files. A great start would be to add such to each file. Then it could be cut/pasted into the TableOfContents.md.

@thewilsonator
Copy link
Contributor Author

You open up src/dmd/ and are greeted with a wall of files and a tiny completely useless readme.

Would a better readme help?

Also because GitHub displays the readme below the files you have to scroll down to 'r' to even know there is a readme rendered at the bottom. People with a random / casual / passing interest will see the wall of files, they may well move on before they even see / know that the readme is there.

@atilaneves
Copy link
Contributor

@WalterBright has made his preference known so I think we should all accept that and move on. Personally I use DCD to find where definitions are so file structure doesn't matter to me in the slightest.

I agree with @andralex that there's no evidence that changing the structure would attract more developers. Compilers are complicated; most people won't want to or be able to work on one. Better documentation would probably be a better use of one's time if the goal is to attract contributors.

@thewilsonator
Copy link
Contributor Author

Personally I use DCD to find where definitions are so file structure doesn't matter to me in the slightest.

That presumes you know what symbols you are looking for... perhaps you'd like to participate in the challenge I gave Andrei?

Better documentation would probably be a better use of one's time if the goal is to attract contributors.

That is the wrong way around. Contributors come when they come (unless we seriously up out marketing, and I don't know about the rest of you, but I'm not a marketing person), so the trick is not intentionally having a light to wave to attract attention, its to not look like an anglerfish when they do find that light. The goal is to not scare then away when they do show up, and the malorganisation of the DMD codebase does a pretty good anglerfish impression (completely irrespective of the quality and comprehensiveness (or lack thereof) of the documentation).

@atilaneves
Copy link
Contributor

That presumes you know what symbols you are looking for... perhaps you'd like to participate in the challenge I gave Andrei?

Not really, no. It's a moot point anyway.

@jacob-carlborg
Copy link
Contributor

I would like to point out that I have not seen a single good argument of why the existing structure is good. I have only seen two arguments:

A. Walter's tools don't work with subdirectories. He's mentioned grep but that claim is false, grep does work recursively. There are also better alternatives to grep. I don't know if there are other tools as well, he's only mentioned grep. I think it's very disappointing that the rest of the developers have to suffer to due his poor choice of tools that one guy has made.

B. This is the current structure and the changes don't have high impact. I see this argument quite a lot for the core projects. If a change doesn't cure cancer, solves world hunger an peace on earth it's not worth doing. I would like to point out that most of the existing code, especially in DMD, has not gone through the same code reviews that we have now. I can say that most code in DMD would not pass code review on my watch.

@andralex
Copy link
Member

I would like to point out that I have not seen a single good argument of why the existing structure is good.

I humbly submit there may be more of a need to move on, than what you'd consider a good argument. We really need to collectively stop bickering about this stuff.

@Geod24
Copy link
Member

Geod24 commented May 29, 2019

Personally, I gave up 3 years ago after this conversation.
You can't reason against "grep -R is just annoying".

Like the overwhelming majority of contributors (and by overwhelming, I mean everyone but Walter), I see value in packaging, but it is Walter's rightful prerogative to refuse a change no matter the justification.

@thewilsonator
Copy link
Contributor Author

You can't reason against "grep -R is just annoying".

Indeed i can do no better than to defer to #9511 (comment)

And I use other simple tools that don't deal naturally with subdirectories.

@WalterBright what are those tools (and would they be useful to the rest of us for day to day work)? It seems the best forward would be to make the tools work better.

@thewilsonator
Copy link
Contributor Author

Another reason lib specifically, should be a package is so that everyone can ignore it more easily when they go about their DMD business (including with your tools):

The only functional (and thats stretching it) commits post conversion to D(!) (c.a. ~4 years ago) are:

@thewilsonator
Copy link
Contributor Author

I have come to the realisation that far from being a frontend package, lib belongs in the backend. Neither LDC nor GDC use the files, it is used in the frontend only in glue, gluelayer and bits of mars that are versioned out in LDC (and I assume GDC). I will open a PR to that effect soon.

All of the points about packaging still stand, and none of this reflects well on you. When trying to attract new developers you should be careful to not lose the ones you already have...

@wilzbach wilzbach reopened this Jun 3, 2019
@thewilsonator
Copy link
Contributor Author

Eh?

@wilzbach
Copy link
Member

wilzbach commented Jun 3, 2019

No, we're not letting this go. This is a OPEN SOURCE COMMUNITY, not a tyranny.
There hasn't been a SINGLE technical argument given against this except:

Walter's rightful prerogative

Be that as it may be, but it's our right to fork DMD and/or just drop dmd and focus LDC. This is sth. that will happen if this silliness continues. Without a community or contributors, dmd is dead.
For years, everyone has known that the right technical decision would have been to focus all efforts on LDC and make it the official reference compiler (and not duplicate and split the efforts and community).

How am I supposed to motivate students to invest their time here (or my own for that matter) if we waste it with such silly walls?

@thewilsonator
Copy link
Contributor Author

If I could tactfully interject...

From my perspective this code is as stale (for want of a better term) as the backend and as far as LDC is concerned doesn't exist except as a rule in the merge scripts to discard. Wether it ends up as a package in the backend is none of my concern, I mean it probably should but the backend is such a mess anyway that is doesn't make much difference (and I don't care for it).

I closed this, not because I don't think DMD should be packaged (it most definitely should), but because this doesn't belong in the frontend at all. So in its current state, quite aside the fact this can't merge due to a merge conflict, this PR doesn't make sense.

If you wish to do the honours and make the PR to relegate this to the backend, be my guest, but I'm going to sleep and will do it tomorrow if it hasn't been done.

@WalterBright
Copy link
Member

relegate this to the backend

Nothing in the backend calls any of the functions in the lib/scan code, and vice versa. Putting it there would make things awkward, as it does import root.

Does ldc offer a way to read libraries directly generate libraries directly? Doing that is part of what makes dmd fast, it doesn't need to write a blizzard of files to generate a library.

@thewilsonator
Copy link
Contributor Author

Does ldc offer a way to read libraries directly generate libraries directly? Doing that is part of what makes dmd fast, it doesn't need to write a blizzard of files to generate a library.

You can pass it .o and .a files on the command line and use LLD to perform linking in the compiler's process with -link-internally.

@WalterBright
Copy link
Member

You can pass it .o and .a files on the command line and use LLD to perform linking in the compiler's process with -link-internally.

I expect that, all compilers do it since Datalight C innovated that in the 1980's :-)

DMD does do things that AFAIK no other compiler does:

  1. Generate a library as an output file.
  2. Compile all the source files into one object file.
  3. Compile a source file into multiple object files (one per function).

The DMD makefiles used to use this, but at one point the makefiles were redone to use a librarian, I have no idea why that was done.

@thewilsonator
Copy link
Contributor Author

  1. We support -lib.
  2. -oneobj is called -singleobj in ldc (although the ldmd wrapper has -oneobj)
  3. it looks like we version out the multiobj code.

@thewilsonator
Copy link
Contributor Author

Putting it there would make things awkward, as it does import root.

I thought the entire point of root. Also I forgot to mention this is also completely unused by GDC as well. Think of this as manual DCE.

@WalterBright
Copy link
Member

I thought the entire point of root.

root is a historical anachronism. It was meant as a portable library used by many projects, but it wasn't very good and the only project left using it is dmd. root has no relationship with the backend. Its only purpose today is utilities that are not specific to the compiler and have no dependency on it.

@jacob-carlborg
Copy link
Contributor

root is a historical anachronism. It was meant as a portable library used by many projects, but it wasn't very good and the only project left using it is dmd. root has no relationship with the backend. Its only purpose today is utilities that are not specific to the compiler and have no dependency on it.

Wby can’t the backend use root? Or is root not used in DMC? I know there are some duplications in root and the backend.

@jacob-carlborg
Copy link
Contributor

jacob-carlborg commented Jun 4, 2019

~~Perhaps this can live in a glue package or similar. ~~ oh this already proposes a specific package.

@WalterBright
Copy link
Member

Wby can’t the backend use root? Or is root not used in DMC? I know there are some duplications in root and the backend.

The duplication isn't exact, meaning there'd have to be some rework. Frankly I thought it wasn't worth the bother. I've been more concerned with reworking other parts of the backend to make it more tractable, when I have some time.

@12345swordy
Copy link
Contributor

It is quite clear that this PR is dead in the water, however if I were to politely intrude in the conversation and point out a few things. @WalterBright is currently the BDFL for the d language, so technically speaking it is a tyranny here.

Correct me if I am wrong about this, but It seems like Walter here is not against this in principle, but rather it causes him unpleasant developer experience with regards to his work flow when coding for dmd. Which it needs to be address if this PR were to has any chance of accepting.

cc @thewilsonator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Refactoring No semantic changes to code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants