Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] Unix.kill on Win32
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2003-08-07 (21:53)
From: John Max Skaller <skaller@o...>
Subject: Re: [Caml-list] static class member....
james woodyatt wrote:

> I would strongly second this advice.  When I came to Ocaml from C++, I 
> did not heed this advice-- and I wasted a lot of time learning why that 
> was a mistake.

Actaully, my advice to C++ programmers is the same :-)
Don't use classes. Plain old data structures are generally
better -- precisely because they *don't* provide encapsulation.

This saves a whole lot of time writing methods, when you could
just manipulate the data structure directly. Just kill off
stupid Visitor patterns and things and write the code you need
without encumbering yourself with attempts to abstract things
that usually aren't abstract in the first place.

In most business code, even the kinds which are in principle
abstractable are often best not abstracted simply because
there aren't enough instances of the abstraction to bother,
and the client is sure to change the rules and break your
polymorphism anyhow :-)

An example where abstraction is useful: the back end
of a code generator (such as Ocaml itself, or Ocamldoc),
can sensibly be abstracted. However getting the abstraction
just right is a non-trivial exercise and it's often better
to do case by case encoding until the actual abstraction
emerges in the code itself (and then you can encapsulate it).

To put this another way -- don't use abstractions unless you
have a strong theory that tells you what they actually are,
and even then, be circumspect ...

John Max Skaller,
snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia.

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: