Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Paul Snively <psnively@mac.com>
To: skaller <skaller@users.sourceforge.net>
Cc: Robert Morelli <morelli@cs.utah.edu>,
	Alex Baretta <alex@barettadeit.com>, Ocaml <caml-list@inria.fr>
Subject: Re: [Caml-list] (Mostly) Functional Design?
Date: Mon, 18 Jul 2005 15:16:52 -0700	[thread overview]
Message-ID: <02791497-749C-4944-BC41-B92454C4ABFD@mac.com> (raw)
In-Reply-To: <1121722053.6774.93.camel@localhost.localdomain>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


On Jul 18, 2005, at 2:27 PM, skaller wrote:

> On Mon, 2005-07-18 at 12:15 -0600, Robert Morelli wrote:
>
>
>> With all due respect,  claims of order of magnitude productivity
>> gains,  that OCaml is a far better language than Java,  etc.  are
>> exactly the kind of advocacy that I think is counterproductive.
>> Most programmers would regard such dramatic statements as  
>> implausible,
>> if not preposterous.
>>
>
> Yes they would .. until they tried it.
>
I'm going to allow myself to be guilty of exactly what I deplored  
about the original e-mail, namely offering personal opinions and  
anecdotes without citations or sources of any kind. :-)

Although I had the great good fortune to learn Scheme as my third  
language after BASIC and Z-80 assembly language and to attend Indiana  
University and hobknob with the likes of Dan Friedman and Douglas  
Hofstadter, by far the majority of my for-pay programming work has  
been in 680x0 assembly language, C, C++, and Java. I've been doing  
this for about 25 years now. I supported Macintosh developers in the  
transition from Object Pascal to C++ in the MacApp 3.0 timeframe,  
roughly 1989-1991, provided background research for a presentation  
that Larry Tesler gave about Apple's approach to supporting dynamic  
linking of C++, and unofficially supported Macintosh Common Lisp,  
which at the time was owned by Apple. More recently, I spent  
essentially the entirety of the dot-com years working with Java,  
doing everything from what, as far as I know, was the first applet  
used in a movie promotional site (for one of Peter Jackson's earlier  
films, "The Frighteners") to replacing the back-end infrastructure  
for a large multimedia/social site (iFilm.com). I currently develop C+ 
+ for a combined Linux server/set-top box conditional access system  
for the cable/satellite industry.

I found Objective Caml in a rather roundabout way: I first started  
paying attention to distributed programming and data replication  
issues while at Apple, as part of an effort to reduce the tendency  
that any large organization has to construct numerous "data silos,"  
the left hand not knowing what the right hand is doing. As this was  
about 1990, my investigations led me to Ken Birman's work on the  
Horus project at Cornell. While we never did anything with Horus, I  
continued to pay some attention to it, off and on, over the years.  
Fast forward about a decade, and I was thinking about distributed  
programming again, in the context of the game industry (I've had a  
couple of game programming jobs before). By this time, Birman's group  
had moved on to create the Ensemble system, which was written in  
Objective Caml.

I'd never really cottoned to the ML family before, finding the syntax  
to be too unlike Pascal or C and not being able to really see the  
benefit over, say, Common Lisp or Scheme. O'Caml seemed a bit  
different: it was object-oriented as well as functional, was  
apparently reasonably fast, and the Ensemble team seemed to put great  
stock in being able to prove certain tricky bits of their system  
correct by virtue of having access to a formal semantics for the  
parts of O'Caml that they used. This made for an intriguing  
combination, with Ensemble as a compelling proof-by-demonstration.  
Fast forward again, because I'm still doing this on my own free time,  
but I have enough experience now to suggest that John is correct: the  
ML family in general, but O'Caml in particular, provides extreme  
productivity benefits over the currently popular languages. I find it  
to be on a par with Common Lisp in expressive power, and in fact I  
find the factors in Common Lisp and O'Caml's productivity enhancement  
to be roughly similar:

* Both are functional, in the sense of supporting the use of higher- 
order functions
* Both are imperative. Sometimes the judicious use of state is the  
most efficient, along a number of dimensions, approach to solving  
your problem
* Both are object-oriented. Sometimes the judicious use of inclusion  
polymorphism, etc.
* Both are geared towards programming-in-the-large: package/module  
systems, documentation-construction tools, sophisticated steppers/ 
debuggers/inspectors, etc. make structuring systems easier
* Both recognize that a software development ecosystem needs more  
than just a core language: reasonably comprehensive libraries are  
also important

and here's what I think of as the kicker, the above being necessary,  
but not sufficient, properties of a productive development environment:

* Both are interactive, encouraging a playful, exploratory, discovery- 
oriented programming style.

I can't emphasize enough how crucial O'Caml's provision of a  
toplevel, bytecode compiler, and native compiler are. There is no  
substitute for being able to type in some code and see what happens  
without a whole edit/compile/link/test/crash/debug cycle. Of course,  
it's also important to be able to commit to an implementation and  
have it perform acceptably. Modern Lisps and O'Caml have these bases  
covered. You can get close-ish with a good Standard ML, but there's  
no one system that ties it all together like O'Caml does (you have  
to, e.g. mix and match something like Moscow ML with something like  
MLton to get both the interactivity and the final performance out of  
Standard ML). This is the key. The Lisps and O'Caml let me have a  
thought and be playing with that thought instantly; they don't yank  
me out of the thought while I'm waiting for my compiler/linker,  
either the first time, or whenever I make a mistake. I don't know how  
to put this any better: as a programmer, I get into a rather fluid  
state of analysis/synthesis with respect to my problem domain. Lisp  
and O'Caml sustain that fluid state; virtually all other language  
environments shatter it. And yes, the difference, in my experience,  
is roughly an order of magnitude in productivity. But because this  
productivity comes from sustaining this fluid analytical/synthetic  
process, it can't be described in any meaningful way; it can only be  
experienced, and this is a real burden to impose upon those who are  
quite rightly skeptical about such claims, which is why, apart from  
this e-mail, I don't generally bother trying; I limit my advocacy to  
saying "Why not take O'Caml for a spin some weekend? What have you  
got to lose?"

> -- 
> John Skaller <skaller at users dot sourceforge dot net>
>
>

Best regards,
Paul Snively

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Darwin)

iEYEARECAAYFAkLcKl4ACgkQO3fYpochAqLIywCfcvn6l/UrazIK3d7Wxm9RTt0T
qmwAoNADqJErYWaC3m3oxUx0ZxOlWciX
=rkZl
-----END PGP SIGNATURE-----


  parent reply	other threads:[~2005-07-18 22:17 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-14 18:00 Kyle Consalus
2005-07-18  7:59 ` [Caml-list] " Robert Morelli
2005-07-18  9:22   ` Alex Baretta
     [not found]     ` <42DB78D3.7010401@andrej.com>
2005-07-18 10:01       ` Alex Baretta
2005-07-18 18:15     ` Robert Morelli
2005-07-18 18:45       ` Alex Baretta
2005-07-18 18:56       ` padiolea
2005-07-18 19:19         ` Jon Harrop
2005-07-18 19:38       ` Jon Harrop
2005-07-18 21:27       ` skaller
2005-07-18 21:55         ` Alwyn Goodloe
2005-07-18 22:16         ` Paul Snively [this message]
2005-07-19  0:45           ` Jonathan Bryant
2005-07-18 21:37       ` skaller
2005-07-18 22:00     ` Kenneth Oksanen
2005-07-18  9:29   ` Mark Meyers
2005-07-18  9:56   ` Large scale and FP (was: Re: [Caml-list] (Mostly) Functional Design?) David MENTRE
2005-07-18 18:11     ` Large scale and FP Robert Morelli
2005-07-18 14:08   ` [Caml-list] (Mostly) Functional Design? james woodyatt
2005-07-18 16:37     ` Alwyn Goodloe
2005-07-18 14:21   ` alphablock
2005-07-18 15:26     ` Alex Baretta
2005-07-18 15:38       ` alphablock
2005-07-18 17:17       ` Doug Kirk
2005-07-18 18:14         ` Alex Baretta
2005-07-19  7:42         ` james woodyatt
2005-07-19  9:35           ` Robert Morelli
2005-07-19 16:53             ` james woodyatt
2005-07-19 17:13               ` Paul Snively
2005-07-19 23:58                 ` Jon Harrop
2005-07-20  0:29                   ` Paul Snively
2005-07-18 18:23   ` padiolea
2005-07-18 19:45   ` Gerd Stolpmann
2005-07-18 22:16     ` skaller
2005-07-19  0:48   ` Chris Campbell
2005-07-19 20:14   ` Some Clarifications Robert Morelli
2005-07-20  6:18     ` [Caml-list] " Ville-Pertti Keinonen
2005-07-24  0:04       ` Robert Morelli
2005-07-24  2:30         ` Paul Snively
2005-07-24  7:37           ` Alex Baretta
2005-07-24  8:08           ` Robert Morelli
2005-07-24 12:23             ` David Teller
2005-07-24 18:29             ` skaller
2005-07-24 18:51             ` Paul Snively
2005-07-24 12:42         ` Gerd Stolpmann
2005-07-25  7:23         ` Ville-Pertti Keinonen
2005-07-20  7:34     ` David MENTRE
2005-07-27 15:37       ` Robert Morelli
2005-07-27 20:33         ` skaller
2005-07-27 23:48           ` Paul Snively
2005-07-20 16:28     ` Damien Doligez
2005-07-24 14:51       ` Robert Morelli
2005-07-24 16:11         ` David MENTRE
2005-07-25 12:21         ` Damien Doligez
2005-07-25 15:47           ` Richard Jones
2005-07-22  5:18   ` [Caml-list] (Mostly) Functional Design? Marius Nita

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=02791497-749C-4944-BC41-B92454C4ABFD@mac.com \
    --to=psnively@mac.com \
    --cc=alex@barettadeit.com \
    --cc=caml-list@inria.fr \
    --cc=morelli@cs.utah.edu \
    --cc=skaller@users.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox