NimSkull: A Hard Fork of Nim
github.com
github.com
Forks that seem to exist for no clear reason other than disgruntled person(s) thumbing their nose at an upstream maintainer never do.
If this were meaningful, then there would be clear roadmap (at least high-level aspirations without dates) announced with the repo’s creation. Without that, this is little more than a gripe post on a Nim mailing list.
Conservative improvements like specifying some dark corners better can attract users (more than flamboyant novel features), and correction of bugs can retain them.
For now the aim of this project is first and foremost refactoring and making it easier to contribute and improve the main code base of the compiler, as indicated by the "near-term" timeline that is shown in the readme.
This is mostly a disclaimer for the common reaction that invariably starts to move the discussion in the direction of "why not contribute to mainline instead", "disgruntled people" etc. etc.
At the moment we are focused on making it easier to work with the codebase - more documentation, cutting down on decades-old cruft and legacy features, unraveling mysteries of the commit messages that were written with this attitude https://github.com/nim-lang/Nim/pull/19211#issuecomment-9859... ("I have no intention to follow this guideline so I cannot accept it.")
Applying data-oriented design principles, writing a specification, providing guides for compiler developers https://nim-works.github.io/nimskull/debug.html and focusing on what is important for people who work in the project.
At least that's why I work on nimskull. I don't want to go into another round of "stories" that describe some interpersonal issues (which of course exist) and we explicitly opted to keep this our of readme as well, even though other might be interested in dirty details.
Curious to know what your vision of commit messages is. My commit messages look exactly like the excerpt in your linked issue: they describe what has been done.
Fixes
Fixes
Fixes
Fix the fix
Frstegdghdsgsffff
More work
Fixes
Fixes
Some people just fix software to fix software and for them the whole utility of git is to be able to see how the code looked earlier or even just keeping it in case they ever want to know that. They don't write commit messages because they don't read commit messages because they'd rather read code than prose. Trying to figure out what someone meant when they wrote the comment is sometimes harder than reading the code change itself. And if you need to delve deep into the prose here's the ticket number with all the words that were exchanged that lead to this change.
Not GP, but the postgres project is a pretty good example of what I strive for:
- a title explaining what the commit does (possibly expanding into the body if details would be useful)
- plus the body explains the background for the change (the why), ideally at all levels of resolution e.g. if it’s a 1 line fix to something deep inside the bowels try to trace the path from the original high-level report or issue, then why it was fixed where it was (especially if it took ages to track down and / or decide)
- and if useful or necessary, discussions of the implementation details / options / considerations
If there’s a mailing list thread, or a bug tracker issue, it should be included, but it should not be necessary: IME it’s way more common for the log than the bug tracker to survive the sands of time, because converting history from one VCS to the next is generally relatively easy.
Assuming unreasonable, isn't it unreasonable to expect someone to completely break git history for everyone, and or invent time travel?
Seems to be an absurd amount of condemnation over a mistake that did far less than hurting no-one
ok, why can that method that you choose not be applied to nim?
Why can't it be applied: no idea, writing sensible commit messages seems like a basic necessity if your goal is sustainable project development, but that's just me
Well good luck hard-forking backwards into the past to re-write commit messages.
It sounds like you're taking Araq to task for trying out new things. And indeed, Nim is certainly a fairly expansive language. But a lot of the things he's trying are really cool, and I want to see the person with the _actual vision_ get a chance to try those things out without being encumbered by the need to write laborious commit message, because "democracy" and "best practices". Between Araq spending a marginal x minutes doing more on value types, and writing "clearer" commit messages, I'll choose the former, any day. I also trust him to jettison ideas that don't work.
I really think it's red flag when someone proposes to fork a language without being able to offer single reason that's actually related to language design. Sorry, I do realize this may come across as a bit aggressive, but I'm inclined to view you as a presumptious ingrate.
And really: when you come up with an original language that captures the imagination of scores of developers, I'll pay you the same respect.
The main difference here seems to be that I interpret the need to "write laborious commit message" as a basic human decency that shows I'm respect other people's time. Five minutes on "value types" is not a lot all things considered, but pretty much enough to write the commit message.
This attitude always puzzled me to be honest - you just spent half an hour, maybe more, to write the code and have a good understanding of what you had just done and for which reasons. How hard would it be to sit down and type it out and save time for someone who comes next?
I could spend more time looking, but really these are the sort of things that should be in their own readme in plain English instead of leaving me and everyone else who has no context confused.
The devs might want to consider the lost time, and ultimate impact, of Flickr rewriting its internals for... Similar reasons. Sure, the project may seem unwieldy, but major refractors or rewrites are never worth it.
What's the elevator pitch, is it just social grievance with the Nim developers? Because that's all I get from the readme.
esoteric != novel
Nim is not well known or used a lot in production, but it is neither unpopular nor esoteric.
Bold assumptions
Akin to one day, Einstein being known mostly as meaning 'idiot' rather than a physicist.
Look up the history of the word "nice" in England, sometime. But no, it is not just an English-speaking phenomenon, either.
Example: people think rabbits mostly eat carrots because Bugs Bunny likes to snack on them while leaning on something and saying "What's up, Doc?". Except Bugs doing that was a reference to a movie where Clark Gable... ate carrots while leaning on a fence and calling people Doc.
And somehow a parody of a Clark Gable movie turned into most people believing that carrots are a staple of leporine diets.
If that is the case, why is the misconception also widespread in countries where Bugs Bunny wasn't part of the popular culture? E.g. USSR/Russia.
To me it seems like the people who created the fork may literally not have any known means of judging engineering merit aside from how detailed commit messages are.
If it's a large group then detailed commit messages are critical. If it's likely that between 0-1 people are actually going to read the message in the next month and there are a long list of other plans you have to implement with between 0 and 1 people actually helping you, then the value of more detail in commit messages moves toward the limit of 0.
import strutils{split, trim}
similar to how rust does things.What would be the problem with that?
from strutils import split, trim
Most people don't use it because it's annoying to constantly add and remove imports when changing your code, but it's definitely an option. "foo-bar" |> String.split("-")
IMO method chaining is a lot better this way, much less desire for monkey patching, etc.The functional approach requires currying and data-last parameter order, which are both unidiomatic in Nim.
How is it possible, then, to call a function that lives in a different namespace as part of a dot-chain of methods?
The Elixir approach does not rely on currying; like much of the language's fancy parts, it's a macro.
I didn't even know Elixir had macros…
If you believe, as I do, that code is read more than it is written, then this becomes a big deal.
Clearly readability is important to nim's design so this departure from that seems inconsistent.
Also for new people trying to learn the language, it really helps to be able to see what modules/packages functions come from.
I've had this issue with Python as well, if you use virtualenv for enough projects, you might just run into it, PyCharm is an amazing IDE but sometimes I have to literally reconfigure it a dozen times because it defaults to this or that, or in the more famous case I had: an API written for Python 2 vs a web service written for Python 3 and it was problematic to switch context because you had to change interpreter for entire project, though debugging the two was no issue. I suppose the more obvious fix would of been for me to open the client library directory in a separate PyCharm IDE instance in retrospect, but my point being, even Python can run into this under niche circumstances.
This process is literally the most fair and least offensive thing possible, and yet people still try to make it some kind of wrongdoing.
If they had tried to alter the original project to suit themselves, you would have said "they can just fork if they don't like it"
So what you're really saying is they should just shut up and like whatever already exists and neither change it to suit themselves, NOR go off and make their own thing. I have some bad news, saying that is about 1000x more offensive than forking something.
There is just not one tiny microscopic shred of validity to this line of thinking.
I assume they didn't like something about the maintainer or the community.
There was a falling out between some developers on the Discord that led to personal attacks and an eventual banning a while back. If I recall, nimskull started shortly after, and has attracted a few other compiler developers since.
A hard fork is intended to diverge and evolve into an independent project.