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
Re: convincing management to switch to Ocaml
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Stefan Monnier <monnier+lists/caml/news/@t...>
Subject: Re: convincing management to switch to Ocaml
>>>>> "John" == John Skaller <> 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.