[clean-list] RE: Clean and scientific programming

Jerzy Karczmarczuk karczma@info.unicaen.fr
Mon, 10 Sep 2001 10:46:11 +0200


Brian Wilfley:

> Let me put in a word for a particular type of "scientific" programming
> which Clean ought to be able to handle...
> 
> 1) Small amounts of code to investigate particular algorithms...
> 
> 2) Easily and reliably  modified code.  This is important because the
>    algorithms are not settled or agreed upon.  One needs to try different
>    approaches ...
> 
> 3) The ability to plot results....  This point is
>    crucial.  There seem to be scores of languages that support 1) and 2)
>    above, but that fall flat on this point.  My theory is that a) good
>    plotting programs are hard to write, b) they are especially hard to
>    write in a form that is portable, c) those that exist make the job of
>    plotting as difficult as the job of designing the algorithm in the first
>    place: too many lines of code to make a graph.

> ...I have to confess that the system I
> use most is Matlab.  And a big reason is that 3) above is satisfied.
> The code one writes for matlab is usually short...

> To me the advantage of a system like Clean is that 1) and 2) are well
> served.  But if 3) is not, I'm stuck.
> 
> But not defeated...

My three euro-cents on that (JUST on that).

1. Small amount of exploring/testing code is something which is not so
   dependent on the programming language itself, but rather on the existing
   IMPLEMENTED generics: procedure libraries, universal data manipulators,
   converters, and reusable open chunks of code. This last point actually IS, 
   or may be a language feature. The Matlab vectorized style provides such 
   reusability. The possibility to use matrix slices, matrix reshaping, etc.
   makes the code sometimes really short. Iterators in OO languages (C++, Ruby
   etc.) are also such features. 
   In Clean we have for the moment generic folds, array comprehensions, etc.,
   so the potential is there, but all is soooo general, that not so immediate
   to exploit by potential scientifically-oriented user. Slicing library of
   Thorsten Zoerner needs some work.

2. Ease and reliability go not always together. I found the module system
   of Clean quite reliable, but the typical lazy way of proceeding: test
   a procedure in a () main module; then retrieve from the compiler the type;
   put into an implementation module AND in the def. module, and check again
   (not forgetting to import the module), is sometimes tiresome, and not easy
   to modify, especially if you generalize or restrict your procedure which
   demands other modules to be imported. Sometimes you must fight with a silly
   bug in the type reporting procedures, and correct manually
     .... (Vector a  -> b) ...     into   ... ((Vector a) -> b)...
   etc. Sometimes you realize that something which worked inside the main
   module refuses to compile in a library, because you get stuck in an
   instance of a *generic* constructor (t m ...) with t variable. Sometimes
   you simply don't understand all those anonymous (.) attributes and you don't
   know whether it is better to leave, or to remove them. Sometimes you get
   a message that not all strictness information is exported, and despite good
   friends around you still don't know what do you pay for that...
   Clean is for patient people, with not so weak nerves.

3. Now, this is a problem, and I need that myself. In principle
   making a plotting package is NOT difficult, the devil is in the details.
   The main devilish detail in Clean is the same as, say, with generic plotting
   procedures in C, Java, or any other compiled language:
   Plotting styles, window sizes, fonts, ticks, colours, etc. should be
   configurable independently of the plotted function (whether it is line plot,
   surfacic object, or other kind of visualisation, as iso-maps:contours,
   volumic cross-sections, etc.)

   This is *much* easier in an  environment specifically designed to be inter-
   active. The PLOT data structure in Maple, or "Handle graphic" objects in
   Matlab make it really easy to change ploting attributes without repeating
   the numeric/geometric work done (and of course without recompiling anything).

   Clean interactivity is difficult, and incomplete. Not only the fact the IO
   works under Windows only (no point in reminding that 4 times a week), but
   even there there are serious weaknesses, such as no deep access to the
   drawing context (simply: I have no idea how to convert a Picture into a
   bitmap (or a metafile with plot descriptors), and save it. I know how to
   make a bitmap manually (and how to save it on a file), but this is wrong
   approach.

=====

Jerzy Karczmarczuk
Caen, France