From: "Thomas G. Marshall" <tgm2tothe10thpower@replacetextwithnumber.hotmail.com>
Subject: Re: Static vs. Dynamic typing (big advantage or not)---WAS: c.programming: OOP and memory management
Date: Thu, 19 Aug 2004 16:31:06 GMT
Date: 2004-08-19T16:31:06+00:00 [thread overview]
Message-ID: <eB4Vc.5351$de4.1606@trndny07> (raw)
In-Reply-To: Xns954A460271C0Djimmaureenrogers@127.0.0.1
Jim Rogers <jimmaureenrogers@worldnet.att.net> coughed up the following:
> "Thomas G. Marshall"
> <tgm2tothe10thpower@replacetextwithnumber.hotmail.com> wrote in
> news:moWUc.5028$de4.548@trndny07:
>
>>
>> Without having to hand you an inch thick spec......ok. Here:
>>
>> Think java applet running on a pc. That pc connected to a very
>> complicated scientific device, composed of a great many number
>> producing things. I'm going to use the term "gui component" here,
>> but I really mean more than View, but also the Model/Controller
>> folded in as well.
>>
>> One of my java clients needed a very complicated multi-layered gui,
>> where each of the visual components (meters, text fields, flashing
>> lights, text labels grayed out, red, or red/gray, or blinking), had
>> to in real time reflect what was happening to that component's
>> counterpart within another device.
>>
>> A ton of meterable "things" in the device, and a ton of real time gui
>> elements in the java app reflecting the various values, states,
>> warning levels, what have you. Many of the gui items further
>> controlled other "things" in the device, which caused only a cascade
>> of changes in the gui elements that were monitoring the components
>> from the device.
>>
>> For a huge part of the development, the gui components were designed
>> around their own threads. One drawn LED that needed to be updated 5
>> times a second, one thread. A textfield next to it that needed to be
>> updated 25 times a second, another thread. Each of those threads ran
>> in real time collecting (and sometimes sending) to/from the device.
>>
>> When the number of such continually active gui components threatened
>> to exceed several hundred, we shifted the model and from the top
>> converted every single component into an entry into something called
>> the Dispatch. Dispatch maintained a list(1) of lists(2) of
>> components. Each list(2) was a list of components that needed
>> updating a particular interval. All the 50ms updates went into one
>> such list. All slower 150ms updates went into another, etc. 23
>> distinct interval types meant 23 entries in list(1), each of which a
>> list(2) of components.
>>
>> Because it was done in Java, a statically typed language, there was a
>> great deal of energy spent in just turning the crank of making sure
>> that the types shifted from prior strategy to the current one. I
>> hope I've been clear enough here.
>
> I think you may be painting with too broad of a brush. I see several
> problems in your description. One problem was the choice of your
> initial design. Applets typically run on a single processor. Unless
> you apply very careful design, a multi-threaded application on a
> single processor will usually run slower than a single-threaded
> application doing the same conceptual work. Threading introduces
> overheads such as scheduling and locking, which are not encountered
> in a single-threaded application.
>
> Another problem is the choice of Java itself. Java threading is
> non-deterministic. The Java coding model mixes the concept of a type
> and a thread to the point that they are very hard to separate if
> threads are rejected late in the development process. Your task of
> stripping out the threading would have been much easier if types and
> threads were orthoginal to each other.
>
> You still had some performance challenges in the new design, with
> nested timing loops. It is possible that one of your list(2) lists
> would get large enough that the processor/language combination could
> not activate all events in a list(2) within the specified performance
> boundary. You would get timing creep that could affect all the events
> in your list of lists system. It is very important to balance nested
> control loops. Once balanced, those control loops provide a difficult
> challenge during maintenance. Any additions or deletions from any
> list(2) could potentially upset the timing of all loops. Changes must
> be made in delays for each nested loop level to compensate for the
> changes in the size of lists.
>
> Notice that these problems are independent of whether a language type
> system is dynamic or static.
{sigh}. Design 101 was not lost on us. Neither is Common Sense 801. I
don't have the energy to discuss the design in its entirety, nor walk
through all the decisions, the reasoning, the background, the customer
demands, etc., etc.----it'd be unreasonable to assume that such a
conversation would even be /possible/ over usenet.
I was asked for an example of:
<quotezilla>
1) Complicated model
2) Incorrect types ("ever so slightly off the mark
3) Difficult to discover
4) Laborious to fix
</quotezilla>
The reasons /why/ these decisions were made? The discussion of it per se,
is of zero importance. Please, save your time and mine---you'll /never/ get
the full picture---this was a large project with many layers of design.
--
http://www.allexperts.com is a nifty way to get an answer to just about
/anything/.
next prev parent reply other threads:[~2004-08-19 16:31 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1hk5j2d3dlmrp$.153lae83darml$.dlg@40tude.net>
[not found] ` <40f29222@alpha.wvnet.edu>
[not found] ` <104x9d9d53127$.1b8jq22ldf2js.dlg@40tude.net>
[not found] ` <40f2ee18@alpha.wvnet.edu>
[not found] ` <8yhg4xv40agi.ly9pgul3h7jw$.dlg@40tude.net>
[not found] ` <40f3ceee@alpha.wvnet.edu>
[not found] ` <19iip59qsl122$.3g3hicltra17.dlg@40tude.net>
[not found] ` <40f5bbe1@alpha.wvnet.edu>
[not found] ` <lLCdnT5s5oBR0mvdRVn-vw@nildram.net>
[not found] ` <40f67c13@alpha.wvnet.edu>
[not found] ` <b46dnTyZeOwARmrdRVn-sA@nildram.net>
[not found] ` <nisfh0hq8n83kckuss0g2m8dclchbb87c4@4ax.com>
[not found] ` <9qTRc.61502$M95.25853@pd7tw1no>
[not found] ` <ce7ef1c8.0408100846.7cd312e8@posting.google.com>
[not found] ` <BuASc.81568$gE.9811@pd7tw3no>
[not found] ` <411C5D2F.5070408@acm.org>
[not found] ` <BZxTc.103385$M95.61358@pd7tw1no>
[not found] ` <ifGTc.574$SR4.140@newssvr14.news.prodigy.com>
[not found] ` <bkiuh054vd4suvd2fgqmekvt9llaend5n1@4ax.com>
[not found] ` <tNydnW_KyNuXHL3cRVn-oQ@nildram.net>
[not found] ` <nu2dnc4HfY-2Wb_cRVn-sQ@fcc.net>
[not found] ` <sgDUc.26532$9Y6.17585@newsread1.news.pas.earthlink.net>
[not found] ` <3bOUc.46253$US4.14922@trndny01>
2004-08-19 0:37 ` Static vs. Dynamic typing (big advantage or not)---WAS: c.programming: OOP and memory management Richard Riehle
2004-08-19 4:54 ` Thomas G. Marshall
2004-08-19 8:10 ` Dmitry A. Kazakov
2004-08-19 16:24 ` Thomas G. Marshall
2004-08-19 12:52 ` Jim Rogers
2004-08-19 16:31 ` Thomas G. Marshall [this message]
2004-08-20 1:27 ` Stephen Leake
2004-08-20 7:00 ` Richard Riehle
[not found] ` <TgfUc.122489$M95.15934@pd7tw1no>
[not found] ` <XtOUc.4483$QJ3.4254@newssvr21.news.prodigy.com>
2004-08-19 0:39 ` Richard Riehle
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox