From: Alessandro Baretta <alex@baretta.com>
To: Jeffrey Palmer <jeffrey.palmer@acm.org>, Ocaml <caml-list@inria.fr>
Subject: Re: [Caml-list] Re: Camlp4 optimizations (was: productivity improvement)
Date: Fri, 18 Oct 2002 01:55:36 +0200 [thread overview]
Message-ID: <3DAF4DF8.707@baretta.com> (raw)
In-Reply-To: <200210171637.15448.jeffrey.palmer@acm.org>
Jeffrey Palmer wrote:
> However, the (obvious) problem with this approach, from a C++
> perspective, is that it is not supported by the language. This stuff
> was basically "discovered", rather than designed, and if you've ever
> tried to use these techniques, this becomes VERY clear. The syntax is a
> disaster. An in-language mechanism for this type of macro expansion (a
> la lisp/scheme macros) would simplify this immensely.
>
> Is this approach implementable in ocaml? The C++ template mechanism has
> complete access to the C++ type system, which makes it significantly
> more useful than the standard preprocessor. I seem to remember an
> earlier posting (today) indicating that this type information isn't
> available in ocamlp4.
I'm sorry to have to point out that this is false. The
template rewriting mechanism knows absolutely nothing about
typing. You can give the C++ compiler a template it will
placidly accept, while at the same time giving you all sorts
or typing errors at template instantiation time. This means
that if you write a template library in C++ you'll know if
it is type-correct (with respect to C++ *very weak* typing
rules) only when you try to use it in some other project.
This is equivalent to the non-typing of assembly language,
which yields all sorts of runtime errors to the users. As
far as C++ templates go, you have to consider as users the
programmers who will use the template library. Template
instantiation plays the part of running an assembled program.
Besides, what kind of access to the type system can a
*generic* program have? If it depended on specific features
of specific types it would no longer be generic, would it not?
The golden rule of C : Use functions, not macros.
The golden rule of C++: Use classes, not templates.
The Java developers knew both rules. They made a mess anyway.
> Does anyone know of any strongly-typed languages where this type of
> macro expansion/partial evaluation is available? (I seem to remember
> GHC providing a hook mechanism for term rewriting during optimization,
> but I don't think that's quite the same...)
Ocaml. Macro expansion == Syntax extension.
Macro processor == Camlp4.
Keep in mind that Camlp4 builds the complete abstract syntax
tree of an ocaml program you parse with it. It later feeds
the tree to the compiler. Once Camlp4 has built the syntax
tree you can apply any program transformation you care to,
in order to optimize your program. Of course, before
applying such "program-rewriting-at-compile-time"
techniques, you should prove them to be correct.
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
next prev parent reply other threads:[~2002-10-17 23:45 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 [this message]
2002-10-18 0:57 ` Jeffrey Palmer
2002-10-18 4:21 ` Alessandro Baretta
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=3DAF4DF8.707@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