caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Alessandro Baretta <alex@baretta.com>
To: Jeffrey Palmer <jeffrey.palmer@acm.org>
Cc: Ocaml <caml-list@inria.fr>
Subject: Re: [Caml-list] Re: Camlp4 optimizations (was: productivity   improvement)
Date: Fri, 18 Oct 2002 06:21:44 +0200	[thread overview]
Message-ID: <3DAF8C58.5040002@baretta.com> (raw)
In-Reply-To: <200210171957.28279.jeffrey.palmer@acm.org>



Jeffrey Palmer wrote:
> On Thursday 17 October 2002 6:55 pm, Alessandro Baretta wrote:
> 
> 
> Hmm. I have two observations:
> 
> 1) You can't "use" templates without instantiating them, so although 
> you're right - template type checking is deferred to instantiation, 
> this is by design (a pain, I agree).

It's more than a pain. John Max Skaller acutely pointed out 
that templates have "no semantics". The semantics of a 
template depends on the parameter(s) with which it is 
instantiated, and in a very bizzarre way. Code which 
compiles and is correct with well-behaved parameters--the 
STL, for example--becomes incorrect, won't compile, or will 
miserably die at runtime with a segfault, if it is 
instantiated with a parameter class redefining the basic 
operations--equality, assignment, copy constructor, etc--in 
a such a way as to violate the assumptions explicitly or 
implicitly made by the template designer. Such errors are 
not revealed when the template is written and "compiled". 
They are revealed at best at template instantiation time, 
and possibly at runtime.

Caml functors, on the other hand, are statically type 
checked at compile time. Once and for all. If they compile, 
they're correct. And that's it.

> 2) Template code, during instantiation, has access to the type system. 
> You can write conditional template code that will be instantiated only 
> if A is a subclass of B, etc. Although the mechanisms used to do this 
> are obtuse, it is possible.

I did not know such constructs exist. I knew about RTTI. Now 
I discover C++ has a TITI--Template Instantiation Type Id. I 
take it to mean that the compiler allows you to write 
manually the checks that it ought to perform by himself: 
namely, that the type parameter has the methods that you 
need to invoke on it. Can you point me to any reference I 
could look into on his point?

>>The golden rule of C++: Use classes, not templates.
> 
> 
> Interesting. I'd say the opinion has shifted from not using templates to 
> using them for almost everything. It seems that, since the introduction 
> of the C++ standard library, everyone is building template libraries. 
> It's almost as though people have decided that "virtual" is a dirty 
> word. ;)

It's just a matter of taste, like any golden rule. The 
predominant trend seems to be embodied by Java: subtyping 
polymorphism and RTTI, which in Java goes with the name 
"reflection".

>>Once Camlp4 has built the syntax
>>tree you can apply any program transformation you care to,
>>in order to optimize your program.
> 
> 
> I really have to make some time to play with that thing - it really 
> sounds amazing.

Not really. TANSTAAFL. You want to optimize your 
code--explicitly unroll loops, rewrite matrix manipulation 
code, and whatnot. Go on, but you better prove that what 
you're doing is correct. I am not a big fan of Hoare's 
method, but I'd definitely use it to make sure the resulting 
compiler is semantically equivalent to the vanilla ocamlc. 
Besides, it's not miraculous, what you end up with is always 
ocaml code, albeit in an abstract form. As DdR pointed out, 
Camlp4 can generate nothing that you cannot code by hand.

> Oh, and in response to my own earlier question regarding partial 
> evaluation and strongly-typed languages, I noticed a post elsewhere on 
> the list to a very interesting site:
> 
> http://www.cs.rice.edu/~taha/MetaOCaml/
> 
> Enjoy!
> 
> 	- j
> 

You too!

Alex

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2002-10-18  4:11 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20020716172916.4903.qmail@web10702.mail.yahoo.com>
2002-07-18 23:14 ` [Caml-list] productivity improvement Oleg
2002-07-18 23:27   ` Brian Smith
2002-07-18 23:54   ` William Lovas
2002-07-19  3:59     ` Oleg
     [not found]       ` <20020719010318.B3631@boson.den.co.bbnow.net>
2002-07-19  8:22         ` Oleg
2002-07-19  8:57           ` Andreas Rossberg
2002-07-19 10:14             ` Alessandro Baretta
2002-07-19 18:15               ` John Max Skaller
2002-07-19 18:33                 ` Brian Smith
2002-07-20 17:30                   ` John Max Skaller
2002-07-19 19:06                 ` Alessandro Baretta
2002-07-20 17:49                   ` John Max Skaller
2002-07-19 10:34             ` Oleg
2002-07-19 17:25               ` Andreas Rossberg
2002-07-20 16:58                 ` John Max Skaller
2002-07-19 16:35     ` Brian Rogoff
2002-10-16 23:24       ` Eray Ozkural
2002-07-19  1:25   ` Alessandro Baretta
2002-07-19  4:04     ` Oleg
2002-07-19 15:46       ` [Caml-list] Rule based language [was: productivity improvement] Alessandro Baretta
2002-07-19 17:20         ` [Caml-list] compact.c Julie Farago
2002-10-15  9:31     ` [Caml-list] productivity improvement Eray Ozkural
2002-10-15 12:34       ` Oleg
2002-10-15 15:08         ` Eray Ozkural
2002-07-19  4:42   ` Emmanuel Renieris
2002-07-19  9:57     ` Oleg
2002-07-19 10:43       ` Alessandro Baretta
2002-07-19 10:52         ` Daniel de Rauglaudre
2002-07-19 11:36           ` Alessandro Baretta
2002-07-19 11:10       ` Xavier Leroy
2002-10-15  9:24         ` Eray Ozkural
2002-10-15 18:47           ` Pal-Kristian Engstad
2002-10-17  0:12             ` Eray Ozkural
2002-10-17  9:34               ` Diego Olivier Fernandez Pons
2002-10-17 15:55                 ` Jeffrey Palmer
2002-10-17 16:15                   ` brogoff
2002-10-17 18:21                   ` [Caml-list] Re: Camlp4 optimizations (was: productivity improvement) Christophe TROESTLER
2002-10-17 18:32                     ` Chris Hecker
2002-10-17 19:08                       ` Shivkumar Chandrasekaran
2002-10-17 20:01                         ` Chris Hecker
2002-10-17 19:36                       ` Daniel de Rauglaudre
2002-10-17 19:59                       ` Brian Hurt
2002-10-17 20:22                         ` Chris Hecker
2002-10-17 21:19                           ` Brian Hurt
2002-10-17 21:37                             ` Jeffrey Palmer
2002-10-17 23:55                               ` Alessandro Baretta
2002-10-18  0:57                                 ` Jeffrey Palmer
2002-10-18  4:21                                   ` Alessandro Baretta [this message]
2002-10-18  8:23                                     ` Remi VANICAT
2002-10-18  8:46                                       ` Sven Luther
2002-10-18  1:47                               ` Brian Hurt
2002-10-17 23:03                             ` Chris Hecker
2002-10-18 23:55                               ` brogoff
2002-10-18 10:43                   ` [Caml-list] productivity improvement Diego Olivier Fernandez Pons
2002-10-21  8:57                   ` Francois Pottier
     [not found] ` <200207200640.CAA11477@dewberry.cc.columbia.edu>
     [not found]   ` <3D391B41.50900@baretta.com>
     [not found]     ` <200207210059.UAA17003@dewberry.cc.columbia.edu>
2002-07-21 13:00       ` [Caml-list] Rule based language [was: productivity improvement] Alessandro Baretta
2002-07-23  9:53         ` Oleg
2002-07-24  8:07           ` Alessandro Baretta

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=3DAF8C58.5040002@baretta.com \
    --to=alex@baretta.com \
    --cc=caml-list@inria.fr \
    --cc=jeffrey.palmer@acm.org \
    /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).