caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jon Harrop <jon@jdh30.plus.com>
To: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] The boon of static type checking
Date: Fri, 4 Feb 2005 10:26:55 +0000	[thread overview]
Message-ID: <200502041026.56107.jon@jdh30.plus.com> (raw)
In-Reply-To: <877e9a17050203185674680413@mail.gmail.com>

On Friday 04 February 2005 02:56, Michael Walter wrote:
> On Fri, 4 Feb 2005 02:33:40 +0000, Jon Harrop <jon@jdh30.plus.com> wrote:
> > The last time I made such a change it took a day to get
> > the program working again, rather than a month.
>
> Are you using heavy casting and such without proper abstractions in
> your C++ code?

No. The code is freely available here:

http://www.chem.pwf.cam.ac.uk/~jdh30/programming/opengl/smoke/index.html

> Pr what kind of changes did you want to make?

IIRC, one development was to change the core data structure from a list to a 
tree. The code to implement a simple tree is unwieldy in C++ (e.g. 1975 LOC 
in stl_tree.h and stl_map.h vs 198 LOC in map.ml). My ocaml implementation 
uses trees and graphs throughout now.

> How did  
> you feel that the static type checker of C++ didn't provide you with
> similar help?

As the C++ type system cannot represent (and, therefore, statically check) 
polymorphism properly, altering a generic data structure expressed using 
templates results in reams of errors, mostly pointing to wrong places. In 
contrast, the worst I get with ocaml is an error in the wrong place because a 
previous function has been inferred to have a wrong type. Even this problem 
is much less common and trivial to trace. Also, it would be even easier to 
solve with an IDE which threw up the inferred types.

As the C++ type system cannot represent (and, therefore, statically check) 
modules and variant types, shoehorning solutions into using class hierarchies 
and being forced to use pointers results in verbose code and weaker type 
checking. In contrast, the equivalent ocaml code is succinct and thoroughly 
checked. This brevity can also be attributed to the ability to pattern match.

Obviously such problems would have been virtually impossible to weed out had I 
chosen to use a language with dynamic type checking, which is precisely I why 
I left such languages at the door many years ago...

> > I'm not sure what "multiple-value-bind" is. I'd have guessed "let a, b, c
> > = 1, 2, 3".
>
> It's a macro in Common Lisp (see [1]). In O'caml-ish syntax, it also
> does "let a, b = 1, 2, 3" (3 is discarded) and "let a, b, c = 1, 2" (c
> is bound to nil).

These seem pretty pointless to me, but what about:

# let {a=a; b=b; c=_} = expr;;

or

# let x = expr in
  ... x.a ... x.b ...;;

and then

# let (a, b), c = expr, None;;

(if you must).

On Friday 04 February 2005 09:29, Thomas Fischbacher wrote:
> If I multiply a speed (in m/s) with a mass (in kg)...

Yes, absolutely! I believe you have correctly identified dimensionality as a 
very important and useful system of (phantom) types used in physics. The 
OCaml type system goes some way to allowing such things to be enforced. 
Dynamically typed languages do not. So how can you come to the conclusion 
than going from dynamic typing to OCaml's static typing is a step in the 
wrong direction?

> So it's even more than "just returning more than one value without having
> to cons" (which already is quite nice - but this essentially can always be
> emulated via going to CPS, which establishes full call/return symmetry).
> It's about giviny gou extra choice. Either: "Nice that you can also
> provide me extra information, but I really don't care here", or: "I can
> as well make use of this other piece of information which you
> already obtained anyway." Same function, same call.

Sure, but what's wrong with using fst and snd for pairs, and records instead 
of n-tuples? You get the same functionality and an explicit definition of 
what is happening with only a couple of extra key strokes.

> > Use the top-level.
>
> That entirely misses the point!
>
> I talked about getting debug traces from an involved run.

Which you can do from the top level. If you have to output the information 
from a running, native-code compiled binary then write the print and 
string_of functions yourself:

let string_of_list f l = "["^String.concat "; " (List.map f l)^"]"
let string_of_pair f (a, b) = "("^f a^", "^f b^")"
print_endline (string_of_list (string_of_pair string_of_int) x)

Considering the first two can be factored out of a wide variety of programs, 
it really isn't a huge amount of typing...

On Friday 04 February 2005 09:41, you wrote:
> On Fri, Feb 04, 2005 at 02:33:40AM +0000, Jon Harrop wrote:
> > 5. More pattern matching: [|1; 2; ...|] and [|...; 2; 1|]. (expressivity)
>
> And this pattern which could be used all the time in web programming:
>  | "prefix" ^ str ->
>
> 8. Regular expressions in the language!

Nooo! Got to stick to O(1) pattern matching, so you are allowed either of:

| "prefix" ^ ... -> expr
| ... ^ "suffix" -> expr

but neither of your suggestions. :-)

9. Complex number notation.

On Friday 04 February 2005 09:36, Thomas Fischbacher wrote:
> On Fri, 4 Feb 2005, Ville-Pertti Keinonen wrote:
> > As an obvious example, neither Common Lisp or Scheme have
> > pattern-matching.  Accessing data via pattern matching is often far more
> > convenient than via c[ad]+r, slot accessors etc.
>
> Sure! But Lisp gives me the freedom to add it via a library. Which also
> kind of says that it's unnecessary to complicate the core language by
> putting in such a conceptually ad-hoc feature.

That's obviously completely wrong and a blatant troll so I'll stop replying 
now.

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.


  reply	other threads:[~2005-02-04 10:25 UTC|newest]

Thread overview: 169+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-02 21:31 Estimating the size of the ocaml community Yaron Minsky
2005-02-02 21:36 ` [Caml-list] " Christopher A. Watford
2005-02-02 21:54   ` Frédéric Gava
2005-02-03  3:58     ` skaller
2005-02-03  6:35       ` Erik de Castro Lopo
2005-02-03 16:29         ` Olivier Pérès
2005-02-03 18:06         ` Thomas Fischbacher
2005-02-03 18:34           ` Frédéric Gava
2005-02-03 21:16             ` Thomas Fischbacher
2005-02-03 21:58               ` Paul Snively
2005-02-03 22:42                 ` Bardur Arantsson
2005-02-03 23:29                   ` Thomas Fischbacher
2005-02-03 22:33               ` josh
2005-02-03 23:22                 ` Thomas Fischbacher
2005-02-03 23:39                   ` Richard Jones
2005-02-04  9:04                     ` Frédéric Gava
2005-02-04  9:37                       ` Richard Jones
2005-02-04 10:11                       ` Olivier Andrieu
2005-02-04 11:14                         ` Frédéric Gava
2005-02-04 12:15                           ` Richard Jones
2005-02-04 12:46                             ` Marcin 'Qrczak' Kowalczyk
2005-02-04 12:51                             ` Gerd Stolpmann
2005-02-04 13:43                               ` Richard W. M. Jones
2005-02-04 16:01                                 ` Gerd Stolpmann
2005-02-04 16:52                                 ` Oliver Bandel
2005-02-04 17:21                                   ` Frédéric Gava
2005-02-04 17:55                                     ` Oliver Bandel
2005-02-04 16:48                               ` Oliver Bandel
2005-02-04 12:15                           ` Olivier Andrieu
2005-02-04 16:42                         ` Oliver Bandel
2005-02-04 10:58                     ` Oliver Bandel
2005-02-04 17:27                       ` Damien Doligez
2005-02-04 17:59                         ` Oliver Bandel
2005-02-04  1:17                   ` Michael Walter
2005-02-04 10:53                   ` Oliver Bandel
2005-02-04 22:01                     ` Thomas Fischbacher
2005-02-05 12:27                       ` Oliver Bandel
2005-02-06  0:08                         ` Thomas Fischbacher
2005-02-03 23:29               ` Richard Jones
2005-02-04  2:33               ` Jon Harrop
     [not found]                 ` <877e9a170502031856175260c8@mail.gmail.com>
2005-02-04  2:56                   ` Michael Walter
2005-02-04 10:26                     ` Jon Harrop [this message]
2005-02-04 17:02                       ` [Caml-list] The boon of static type checking Damien Doligez
2005-02-04 18:00                         ` Jon Harrop
2005-02-04 20:38                           ` Christophe TROESTLER
2005-02-04 21:42                             ` Jon Harrop
2005-02-04 22:11                               ` Christophe TROESTLER
2005-02-05  0:58                                 ` Jon Harrop
2005-02-05  1:52                                   ` Shivkumar Chandrasekaran
2005-02-07 18:47                                   ` Damien Doligez
2005-02-05  5:24                         ` Jacques Garrigue
2005-02-04 21:52                       ` Thomas Fischbacher
2005-02-04 22:27                         ` Christophe TROESTLER
2005-02-05 10:00                           ` Remi Vanicat
2005-02-06 11:18                             ` Christophe TROESTLER
2005-02-04 22:55                         ` Thomas Fischbacher
2005-02-06  0:02                           ` Thomas Fischbacher
2005-02-06  0:56                             ` Erik de Castro Lopo
2005-02-06 10:03                               ` Thomas Fischbacher
2005-02-06  1:34                             ` Richard Jones
2005-02-06  2:30                               ` Erik de Castro Lopo
2005-02-06  9:54                               ` Marcin 'Qrczak' Kowalczyk
2005-02-06 10:05                               ` Thomas Fischbacher
2005-02-05 21:48                       ` Michael Walter
2005-02-06 10:22                       ` Radu Grigore
2005-02-06 12:16                         ` Gerd Stolpmann
2005-02-06 14:59                           ` skaller
2005-02-06 22:30                             ` Radu Grigore
2005-02-07  3:15                               ` Erik de Castro Lopo
2005-02-06 17:28                         ` Jon
2005-02-06 22:26                           ` Radu Grigore
2005-02-07  2:51                             ` skaller
2005-02-07  1:54                           ` skaller
2005-02-07  5:34                             ` Brian Hurt
2005-02-07  6:16                               ` Michael Walter
2005-02-07 14:58                                 ` Igor Pechtchanski
2005-02-12 15:22                                 ` Brian Hurt
2005-02-12 16:11                                   ` Thomas Fischbacher
2005-02-12 18:47                                     ` Brian Hurt
2005-02-12 21:58                                       ` Thomas Fischbacher
2005-02-12 17:06                                   ` skaller
2005-02-12 22:57                                   ` Michael Walter
2005-02-13  1:12                                     ` Thomas Fischbacher
2005-02-13  1:51                                       ` Tony Edgin
2005-02-13  2:12                                         ` Thomas Fischbacher
2005-02-13 10:26                                           ` Daniel Heck
2005-02-13 18:28                                             ` Thomas Fischbacher
2005-02-13 20:52                                               ` Michael Walter
2005-02-13 21:42                                                 ` Thomas Fischbacher
2005-02-13 22:51                                                   ` Michael Walter
2005-02-13 23:59                                                     ` Thomas Fischbacher
2005-02-14  0:11                                                       ` Michael Walter
2005-02-14  0:42                                                         ` Thomas Fischbacher
2005-02-14  1:11                                                           ` Michael Walter
2005-02-14  1:46                                                             ` Michael Vanier
2005-02-14  1:57                                                               ` Michael Walter
2005-02-14 14:19                                                               ` Stefan Monnier
2005-02-14 14:36                                                                 ` [Caml-list] " Thomas Fischbacher
2005-02-14  1:19                                                           ` [Caml-list] " Michael Walter
2005-02-14 17:29                                                           ` Martin Berger
2005-02-14 18:44                                                             ` skaller
2005-02-14 19:17                                                             ` Thomas Fischbacher
2005-02-14  2:22                                                       ` skaller
2005-02-14  8:04                                                         ` Paul Snively
2005-02-14  9:33                                                         ` Thomas Fischbacher
2005-02-14  9:39                                                         ` Thomas Fischbacher
2005-02-14  2:10                                                   ` skaller
2005-02-13  2:27                                     ` Brian Hurt
2005-02-13  2:34                                       ` Michael Walter
2005-02-07 10:57                               ` Ville-Pertti Keinonen
2005-02-07 16:58                                 ` skaller
2005-02-07 17:24                                   ` Ville-Pertti Keinonen
2005-02-07 17:56                                   ` Paul Snively
2005-02-07 17:59                                   ` skaller
2005-02-07 17:30                                 ` skaller
2005-02-07 13:07                               ` Marcin 'Qrczak' Kowalczyk
2005-02-12 15:42                                 ` Brian Hurt
2005-02-07 17:42                               ` Ken Rose
2005-02-07  2:23                           ` skaller
2005-02-04  9:29                 ` [Caml-list] Estimating the size of the ocaml community Thomas Fischbacher
2005-02-04 10:26                   ` Andreas Rossberg
2005-02-04 17:54                     ` Thomas Fischbacher
2005-02-04 15:43                   ` Oliver Bandel
2005-02-04 19:54                   ` Christophe TROESTLER
2005-02-04 20:20                     ` Karl Zilles
2005-02-04 22:07                     ` Thomas Fischbacher
2005-02-04  9:41                 ` Richard Jones
2005-02-04 10:03                   ` Thomas Fischbacher
2005-02-04 16:00                   ` Oliver Bandel
2005-02-04 17:32                     ` sejourne_kevin
2005-02-04 18:46                       ` Oliver Bandel
2005-02-05  1:49                     ` skaller
2005-02-04  8:55               ` Ville-Pertti Keinonen
2005-02-04  9:36                 ` Thomas Fischbacher
2005-02-04 10:30               ` Oliver Bandel
2005-02-04 22:02                 ` Thomas Fischbacher
2005-02-05 13:14                   ` Oliver Bandel
2005-02-05 16:37                     ` Why can't types and exceptions be nested (was: Re: [Caml-list] Estimating the size of the ocaml community) Richard Jones
2005-02-05 17:04                       ` Basile STARYNKEVITCH
2005-02-05 19:26                       ` Oliver Bandel
2005-02-06  2:56                       ` skaller
2005-02-04 21:55             ` [Caml-list] Estimating the size of the ocaml community Basile STARYNKEVITCH
2005-02-03 19:04           ` ronniec95
2005-02-03 20:06           ` skaller
2005-02-03 20:50             ` chris.danx
2005-02-03 21:14               ` Jon Harrop
2005-02-03 21:34                 ` chris.danx
2005-02-03 22:07                   ` Bardur Arantsson
2005-02-03 21:47                 ` Nicolas Cannasse
2005-02-04  3:52               ` skaller
2005-02-04 16:12             ` Oliver Bandel
2005-02-05  2:04               ` skaller
2005-02-03 20:35           ` chris.danx
2005-02-03  8:36     ` sejourne_kevin
2005-02-03  8:39       ` Matthieu Brucher
2005-02-03 16:23       ` Olivier Pérès
2005-02-03 10:10     ` Stefano Zacchiroli
2005-02-03 16:44       ` Vincenzo Ciancia
2005-02-02 22:10 ` [Caml-list] " Kenneth Knowles
2005-02-02 22:40 ` Michael Jeffrey Tucker
2005-02-02 22:52 ` Richard Jones
2005-02-02 23:42 ` Nicolas Cannasse
2005-02-03  6:53 ` Evan Martin
2005-02-03  6:57 ` Eric Stokes
2005-02-03 20:53 ` chris.danx
2005-02-03 23:29 ` Sylvain LE GALL
2005-02-03 23:38 ` sejourne_kevin
2005-02-07  8:49 ` Sven Luther
2005-02-07  9:23 ` Johann Spies

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=200502041026.56107.jon@jdh30.plus.com \
    --to=jon@jdh30.plus.com \
    --cc=caml-list@yquem.inria.fr \
    /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;
as well as URLs for NNTP newsgroup(s).