From: "Stefan Monnier" <email@example.com>
Subject: Re: convincing management to switch to Ocaml
Date: 31 Aug 1999 15:03:31 -0400
>>>>> "John" == John Skaller <firstname.lastname@example.org> writes:
> When I write ocaml, I often do the following to get brackets right:
> I put the brackets in first:
> print_endline ()
> print_endline (x ^ ())
> print_endline (x ^ (string_of_int x))
> because I cannot count :-) This is a pain, because I have to
> keep backspacing. Even worse is: I have a string,
Emacs is your friend. It will count the parens for you and you
can use Meta-( to introduce a pair of parens (putting the cursor
in the middle).
> The second problem I have is with the constructions that
> are like 'prefix/infix' operators, for example
> if .. then .. else ...
> try .. with ...
> match .. with | .. -> .. | .. -> ..
> Sudies were done in the 70's showing this is not as readable as
> constructions bounded lexically at both ends.
I don't know about studies, but as the maintainer of the SML
mode for Emacs I totally agree: it's just a pain the rear.
> A general rule for a good syntax would be that augmentation
> of some term of a construction only required local editing.
> This means:
> terminators, not separators
> mandatory begin/end keywords
Caml (like SML and Pascal and C and ...) has taken the point of view
that begin/end entities should not be made mandatory if they are
unambiguously unneeded. I can only agree with that point of view:
why should I say
if a then (1) else (2)
? Of course, it leads to subtle problems when you change one
of the arms without first adding the delimiters, but then the
indentation of your editor might help you.
> defensively: I put the brackets in to be sure of the semantics.
> This is useful for readers who are also not experts in the
> language as well.
You could also try to rely on your programming environment to
help you. My latest SML mode (sorry, but I happen to use SML
rather than O'Caml. Hopefully the Emacs support modes for the
two languages can be somewhat merged at some point, given the
amount of similarity) for example (maybe caml-mode does the same)
tries to allow the user to jump over expressions in a precedence-aware
way. Once you get used to the way it works, you can use it
to check what goes to verify your understanding of precedence
(I also always get it wrong).
> (fun x -> print_endline ..)
> is ugly compared to:
> begin fun x -> print_endline .. end
Aesthetics is in the eye of the beholder. It's much harder to visually match
`begin' to `end' than ( to ). And similarly, it's harder for your text editor
to match them (Emacs for example has excellent built-in support for matching
parenthesis, but lousy support for matching keywords).
> but the ideal would be
> fun x is print_endline .. efun
Plop! Yet another reserved keyword!
Syntax is one of those things that you just can't get right.
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:25 MET