[m-users.] Question about any difference in efficiency on this code...

Sean Charles (emacstheviking) objitsu at gmail.com
Tue Aug 29 18:13:28 AEST 2023


Hi Richard,

Wise words.

That fact the code was still useful after so long is impressive in and of itself. As to "if my game is any good", did make me chuckle, it will probably join the long list of other games and unfinished sci-fi stories that litter my cloud drives, and have done so for decades. I think I missed my vocation in life, writing games. As a lad, I wanted to work for Atari, I mean who didn't?

I was born in '65 and in the UK, I grew up around computers and computing, I feel somehow intimately connected to the very fabric of home computing, god alone knows why but I do and almost every day I've hacked code, started things, learned things and every now and then, finished things. I once wrote a corking good version of hangman in Squeak Smalltalk, made 30 copies on CD along with printed instructions, mailed them to 30 schools in my home town and... nothing happened. I don't know if the Royal Mail lost them all or the schools junked them for not being a preferred supplier but that was the start and end of any notions I may have harboured about selling software I'd written.

I shall be 58 this year, along the way I have learned almost every language I've ever read about, and in recent years I learned APL then J, FORTRAN, COBOL, ADA. Back in the day I remember being quite impressed by MODULA-2, possibly on an Apricot Zen, but, distant memories!

The irony is the modern software industry seems to have gone backwards in terms of real progress, at least the way I see it. We have more and more tools but less and less discipline, and even more worryingly, the barrier to entry has been wiped out with the likes of JavaScript where every man and his dog has an opinion on how to make next weeks must-have framework-de-jour.

As for maintainability, well, I Love Mercury more and more, I wish I'd encountered it much further back. It absolutely DEMANDS understanding and discipline from the author, I doubt it will ever be mainstream for those reasons: large software projects require bums on seats and as such, the lowest common denominator languages and tool chains win out; mostly PHP and JavaScript. I was involved for almost three years on the UK MOT replacement programme, it was PHP and Zend2, I couldn't believe it when I arrived. So much code, we did digging: on a single page, we had 700,000+ lines of code going through the byte cache and that was BEFORE the page specific code, it was all ZF2 and extensions.

OK, I will stop, I can talk for hours, and frequently do and get told to shut up.

The funny thing is, I think my copy of 'The Craft of Prolog' is some kind magical summoning tool because in my life at least, this is at least the second time you have crossed paths with me within a few days of me reading it, this time it was Chapter 9. Prolog Macros, specifically expand_term/2, as mercury has a sample folder containing something similar i.e. code expansion, the very best of health to you sir!

:)
Sean




> On 29 Aug 2023, at 02:16, Richard O'Keefe <raoknz at gmail.com> wrote:
> 
> It doesn't answer your question, but if your game is any good,
> some day it will need maintaining.  I have recently done some
> maintenance work on code I wrote 20 years ago, and it was as
> if it had been written by someone else.  (I guess I'm just not
> smart to keep the structure and justification of several hundred
> thousand lines of code in my head for decades.)  So readability
> is an issue, even if you never expect anyone else to read it.
> And for me, the first version is just so much more readable than
> the second version that I'd prefer it even if it was slower.
> You can tell at a glance what is the same every time and what
> is not the same.
> 
> There's a rule of thumb I picked up from the Smalltalk
> community: if all the branches of a conditional have a
> common pattern, move it out so that you can see it and
> make sure it *has* to be the same.  It's a rule of thumb.
> There can be reasons to violate it.  But I find that it
> generally makes my code better.  (And boy do I need help
> with that.)
> 
> 
> On Sat, 26 Aug 2023 at 22:13, Sean Charles (emacstheviking) <objitsu at gmail.com <mailto:objitsu at gmail.com>> wrote:
>> I started out with this:
>> 
>>     get_random_value(0, 2, V, !IO),
>>     ( if V = 0 then
>>         Speed = 0.25, Color = color(gray)
>>     else if V = 1 then
>>         Speed = 0.75, Color = color(skyblue)
>>     else
>>         Speed = 1.25, Color = color(beige)
>>     ),
>>     Star = star(X, StarY, Speed, to_rgba(Color)).
>> 
>> end then, for some half0baked reason regarding not creating Speed and Color but instead directly returning Star...
>> 
>>     get_random_value(0, 2, V, !IO),
>>     ( if V = 0 then
>>         Star = star(X, StarY, 0.25, to_rgba(color(gray)))
>>     else if V = 1 then
>>         Star = star(X, StarY, 0.75, to_rgba(color(skyblue)))
>>     else
>>         Star = star(X, StarY, 1.25, to_rgba(color(beige)))
>>     ).
>> 
>> 
>> So, is there any real difference, or did I do something good / bad / indifferent at best?
>> Yes, I know it's a nit picking question but I am curious to know the relative speed / efficiencies , I am writing a game after all so being 1980-s paranoid, every cycle counts. I have '-O4' level optimisation in my build.
>> 
>> :D
>> 
>> Thanks
>> Sean.
>> 
>> _______________________________________________
>> users mailing list
>> users at lists.mercurylang.org <mailto:users at lists.mercurylang.org>
>> https://lists.mercurylang.org/listinfo/users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20230829/76416cdd/attachment.html>


More information about the users mailing list