caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jeffrey Palmer <jeffrey.palmer@acm.org>
To: Brian Hurt <brian.hurt@qlogic.com>, Chris Hecker <checker@d6.com>
Cc: Ocaml Mailing List <Caml-list@inria.fr>
Subject: Re: [Caml-list] Re: Camlp4 optimizations (was: productivity   improvement)
Date: Thu, 17 Oct 2002 16:37:15 -0500	[thread overview]
Message-ID: <200210171637.15448.jeffrey.palmer@acm.org> (raw)
In-Reply-To: <Pine.LNX.4.33.0210171540290.1981-100000@eagle.ancor.com>

On Thursday 17 October 2002 4:19 pm, Brian Hurt wrote:
> I will say- there is a way to get both the ease of development of
> operator overloading *and* the performance of BLAS.  Make matrices
> first class types known to the compiler, like ints, floats, and
> strings (vectors can be considered m-by-1 matrices).  Now the
> compiler knows what substitutions are legal or not- it can easily
> replace a = b + c + d; with a = b; a += c; a += d;, or even a = d; a
> += c; a += b; if it feels like it.
>

There are alternatives to adding these as primitive types to the 
language. In the case of C++, the concept of template metaprogramming 
(basically a weakened macro system) has shown that it's possible to 
generate numeric code on par with Fortran by rewriting expressions to 
avoid pairwise evaluation. See:

http://osl.iu.edu/~tveldhui/papers/iscope97/index.html
http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html
http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html

for the background and some examples of this approach.

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.

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...)

Cheers,

	- j

(Actually, now that I think about it, I recall someone on one of the C++ 
newsgroups discussing the possibility of using a functional language 
for the template language, since it seems like most of the interesting 
things you can do with templates are functional in nature.)


-- 
The river is moving.
The blackbird must be flying.

-------------------
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-17 21:37 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 [this message]
2002-10-17 23:55                               ` Alessandro Baretta
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=200210171637.15448.jeffrey.palmer@acm.org \
    --to=jeffrey.palmer@acm.org \
    --cc=Caml-list@inria.fr \
    --cc=brian.hurt@qlogic.com \
    --cc=checker@d6.com \
    /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).