POV-Ray : Newsgroups : povray.off-topic : Latest Logicsim build ... : LogicWorks rev #6 Server Time
4 Sep 2024 07:14:55 EDT (-0400)
  LogicWorks rev #6  
From: Invisible
Date: 24 Jun 2010 11:37:00
Message: <4c237b9c@news.povray.org>
Mike Raiford wrote:

> I am interested in seeing what your Haskell implementation will be like.

OK, so I just finished the 6th complete rewrite of the LogicWorks 
simulation core. And it seems to be working, as best as I can tell.

I spent a long time trying to hyper-compartmentalise the thing so that 
every tiny aspect of its operation was a seperate source file, with a 
tightly-controlled interface to it. The trouble is, everything depends 
on everything else, so you end up going mad trying to avoid circular 
module dependencies. Eventually I just put everything related to 
simulation into one utterly giant module. Circular dependencies within 
the same module don't matter. ;-)

Secondly, I spent ages trying to design the circuit as a dozen seperate 
data structures, each representing different facets of its operation, 
and several different modes of operation depending on what you want to 
alter. And then I realised that in the real application, you only want 
one mode: the mode where you can modify the live circuit as you simulate 
it, and everything needed to do the simulation is one data object. So 
instead of having dozens of datatypes, I put everything into one big 
record and wrote all my functions to work on that.

The net result is what I'd consider to be utterly huge, although other 
people's opinions may differ. It's a single source file, 660 lines long 
(including comments) and 20 KB in size. When you compile it, it 
generates a 38 KB interface file plus a 182 KB object file.

(For reference, I usually structure my programs so that each module is 
about 150 lines or so.)

It's about now that an IDE starts to sound attractive. It would be nice 
to be able to glance at a panel and see the sames and types of all the 
functions I've written, and be able to quickly navigate to them. 
Actually, hell, just some syntax hilighting would be nice! Oh well...

Anyway, I could show you the code if you _want_, but... it's kinda 
large. (And most of it is just searching for or storing data, which 
isn't tremendously interesting.)


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.