[m-dev.] A not-very-polite rant about "grades" and the build system.

Michael Richter ttmrichter at gmail.com
Fri Mar 13 14:57:32 AEDT 2015

Yes, this is a rant.  No it isn't polite.  And, frankly, I don't give a
shit.  If your feelings get hurt by people using bad words to describe your
work you have two options: curl up in a little ball and pretend the bad man
isn't out there, or man up and FIX THE FUCKING RETARDED SHIT YOU'VE
WRITTEN!  (Sadly, I know which of these two I expect.)

The current system for building Mercury is an utter fucking disaster.  It
is quite possibly the single dumbest thing ever put down in code in the
past fifty years.  Not only does it default to building 14 "grades"
(asm_fast.gc, asm_fast.gc.debug.stseg, asm_fast.gc.decldebug.stseg,
asm_fast.gc.memprof, asm_fast.gc.prof, asm_fast.gc.profdeep,
asm_fast.gc.trseg, asm_fast.gc.trseg.debug.stseg, asm_fast.par.gc.stseg,
csharp, hlc.gc, hlc.gc.pregen, hlc.gc.trseg, hlc.par.gc, java), which means
building the compiler by the conventional ./configure && make && sudo make
install approach takes anywhere from 2 hours to 2 *DAYS* depending on the
hardware, getting around this massive multiplicity of default grades
requires advanced degrees in decoding whatever was pulled out of the
documentation writers' asses the day the grades were "documented".

Look at the documentation you have on the grades.  Look at it closely.
see anywhere any slight HINT of which grades interact well with each
other?  Any slight HINT of which grades are likely to interact with each
other by subtly fucking your end-users over with maddening heisenbugs?
Even a slight hint of which grades don't make any sense whatsoever?

For example, where can I find in the docs something that tells me that
hlc.gc.stseg doesn't make any sense?  (Protip: you can't.)  And for bonus
points, what happens if you tell the configure script that you want
hlc.gc.stseg?  (Hint: it merrily accepts it, as does the build, which then
mysteriously fails with bizarre compiler errors.)

Do you really hate your prospective users so much you won't even DOCUMENT
your fucking "grades"!?  Like with a simple chart that shows at
intersection points whether the combination makes sense or not?  I mean,
I'm not even asking for code that does this fucking shit right: a
configuration script that knows which grade combinations are
legal/sensible/whatever, or a build system that doesn't expect to build the
entire fucking world dozens of times up-front instead of building on
demand.  I'm asking for a few words that explain the grades and their
legal/sensible combinations.  Is that REALLY too much to ask after
SEVENTEEN FUCKING YEARS of this language's existence!?

This rant brought to you by the disgusted giving up after trying to get
Mercury running on a slow, non-x86 system for the past two days.  I'll
leave it so someone less furious and more diplomatic to explain why what
utter shit you have for a build process.

"Perhaps people don't believe this, but throughout all of the discussions
of entering China our focus has really been what's best for the Chinese
people. It's not been about our revenue or profit or whatnot."
--Sergey Brin, demonstrating the emptiness of the "don't be evil" mantra.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/developers/attachments/20150313/26f3df9f/attachment.html>

More information about the developers mailing list