[racket] universe program using 100% cpu on Mac (also poor Raspberry Pi performance)

From: Darren Cruse (darren.cruse at gmail.com)
Date: Mon Dec 29 13:43:52 EST 2014

Thanks Matthias and it will be quite fun to tell the others at my next
meetup who code reviewed this for me! :)

I'll make the changes you suggested though (forgive me) I'll have to think
about what constitutes useful tests for this.  Somehow I've never fully
bought into TDD though I know I'm one of the last holdouts in the civilized
world. :)  Can I get out of it saying I was just doing this for fun? :)

I'm most of all pleased that you didn't see something I'd fundamentally
misunderstood, e.g. that would explain why the game performed poorly on the
raspberry pi.

fwiw Racket is the first lispy language I've ever gotten serious about
learning.  I'm one of those who'd been thrown off by the parens for too
long.  I really like using it now that I'm over the initial learning
curve.  I think my biggest wish would be it had a good story for doing
smartphone/tablet apps, or that Whalesong was more of a going concern (not
that I've tried it I wonder if this pong game would run under it without a
ton of work?)

Thanks again for your time,

Darren


On Mon, Dec 29, 2014 at 10:39 AM, Matthias Felleisen <matthias at ccs.neu.edu>
wrote:

>
> Hi Darren, thanks for the link to the repo. I cloned it, successfully
> played with and without sound on a mac book -- inside of drracket and from
> the command line-- and never observed a load over 60% for drracket and
> ditto for plain racket. That doesn't mean that your 100% problem doesn't
> exist, it's just that I can't reproduce it.
>
> A couple of comments on the code:
>
>  -- I'd place the main function at the top of the function section of the
> file
>       right below the constant definitions and data definitions
> [I modified 2e to bring this across but you might be reading the stable
> version.]
>
>  -- I also run (main initial-state) out of the repl not the main buffer.
>
>  -- Your file is missing tests.
>
>  -- Some functions are also missing proper signatures and purpose
> statements.
>
> But I know "it works" see my homepage :-)
>
> -- Matthias
>
>
>
> On Dec 29, 2014, at 10:46 AM, Darren Cruse wrote:
>
> Re:
>
>> Could you post the code somewhere so we can experiment with it?
>
>
> Here it is it's all in one file:
> pong-world.rkt
> <https://github.com/darrencruse/pong-world-racket/blob/master/pong-world.rkt>
>
> On Mon, Dec 29, 2014 at 8:05 AM, Matthias Felleisen <matthias at ccs.neu.edu>
> wrote:
>
>>
>> On Dec 28, 2014, at 9:51 PM, Darren Cruse wrote:
>>
>> One thing I can see is that on-draw is called for every on-tick on all
>> three platforms btw.
>>
>> And even in cases where the program is idling and on-tick has simply
>> returned the world state it was given unmodified.
>>
>> Is that normal I wonder?  Part of me thought that since to-draw is a
>> function of the world state, and the world state hasn't changed, that it
>> would *not* call to-draw in that case.
>>
>>
>> I experimented with this 'optimization' and, if I recall correctly, it
>> didn't make much of a difference and got in the way of imperative world
>> programs. So I took it out. Mea culpa, I should have commented on this
>> experiment inside the code.
>>
>>
>>
>> (but it calls to-draw for every on-tick even on the Windows machine which
>> is using only 6% cpu - so maybe I'm wrong to look to that as the problem)
>>
>>
>>
>> My Mac-based experiments suggest that this call is not the cause of
>> performance problems.
>>
>> ;; ---
>>
>> Could you post the code somewhere so we can experiment with it?
>>
>> Thanks -- Matthias
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20141229/cfadd131/attachment.html>

Posted on the users mailing list.