comp.lang.ada
 help / color / mirror / Atom feed
From: "Ken Garlington" <Ken.Garlington@computer.org>
Subject: Re: Compile time executed functions
Date: Tue, 27 Mar 2001 13:30:22 GMT
Date: 2001-03-27T13:30:22+00:00	[thread overview]
Message-ID: <OB0w6.272$rl5.40145021@newssvr16.news.prodigy.com> (raw)
In-Reply-To: 3AC03CCE.70E3C2D5@mida.se

I think the key statement is "The constant is really a constant and should
therefore be placed in ROM."

AFAIK, you can create an _Ada_ constant from a function. Whether it's placed
in ROM is a concept outside the scope of the language, and is a function of
compiler optimizations. For example, my company spent a lot of time and
money in order to get the result of an Unchecked_Conversion between a
System.Address and a compatible access type placed into ROM for a particular
Ada 83 compiler/linker. Before we paid for this, the result would be placed
in RAM. Both implementations were legal with respect to the language
definition.

A more general solution, as you noted, is to write an Ada program that
writes an easier-to-optimize Ada program (or, in some cases, assembly
instructions). We have several of those for commonly-used capabilities in
our domain.

"Mats Karlssohn" <mats@mida.se> wrote in message
news:3AC03CCE.70E3C2D5@mida.se...
: After following the thread on C style preprocessing, an old wish of
: mine popped up in my brain (or whatever is inside the scull :).
:
: Sometimes, especially when doing embedded programming, I feel a great
: need to execute a function to get literal initialization a constant.
: That is I'd like to have the compiler to execute a function for me (at
: compiletime!) and use the return of that function to initialize the
: constant.
:
: Example (pleas, this is just an example, it hasn't been compiled):
:
: type Byte is mod 2**8;
: type Word is mod 2**16;
: type CRC_Lookup_Table is array(0..255) of Byte;
:
: constant CRC_Polynom := 4711; -- replace with a 'correct' polunom
:
: function Generate_CRC_Table(Polynom : in Word) return CRC_Lookup_Table
: is
: begin
:    -- Implementation
: end Generate_CRC_Table;
:
: package Package_Using_CRC is
:    constant CRC_Lookup_Table := Generate_CRC_Table(CRC16_Polynom);
:
:    --
: end Package_Using_CRC;
:
:
: - The constant is really a constant an should therefore be placed in
: ROM.
: - Therefore the function Generate_CRC_Table isn't needed in the output
:   at all and since it may be quite large and/or time consuming it would
:   be nice to do the job once, at compile time.
:
:
: The way I'm currently doing this is by building a small external program
: that generates an appropriate code fragment, that gets pasted into the
: right place. This gives both maintenance and configuration management
: headaches.
:
: I must admit that I havn't researched enough to say that I can't get the
: same effect using generice and/or other techniques in Ada.
:
: Now, first I wonder have somebody out there solved this issue in a way
: that complies with the first to points above ?
:
: I realize that a lot of limitations must be put on the
: Generate_CRC_Table function, but, have something along these lines been
: considered by the language designers.
:
: I have hoped to get the time to either build a small preprocessor to do
: this kind of execution/substitution trick, or to add the same trick into
: GNAT using some pragma(Compiler_Executed, func). Sorry to say, I don't
: see that ammount of time in the near future.
:
:
: Finally, as usual, I beg you to bear with my english.
:
: --
: Mats Karlssohn, developer                         mailto:mats@mida.se
: Mida Systemutveckling AB                          http://www.mida.se
: Box 64, S-732 22 ARBOGA, SWEDEN
: Phone: +46-(0)589-89808   Fax: +46-(0)589-89809





  reply	other threads:[~2001-03-27 13:30 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-03-27  7:10 Compile time executed functions Mats Karlssohn
2001-03-27 13:30 ` Ken Garlington [this message]
2001-03-28  7:08   ` Mats Karlssohn
2001-03-28 19:07     ` Phaedrus
2001-03-29  7:41       ` Mats Karlssohn
2001-03-29  5:02     ` Ken Garlington
2001-03-29  7:58       ` Mats Karlssohn
2001-03-29 14:28         ` Ken Garlington
2001-03-29 14:48           ` Ted Dennison
2001-04-04  7:52             ` Mats Karlssohn
2001-04-04 14:05               ` Ted Dennison
2001-04-05  6:30                 ` Mats Karlssohn
2001-03-29 19:48           ` Simon Wright
2001-03-31 19:30             ` Ken Garlington
2001-04-04  7:53             ` Mats Karlssohn
2001-03-30 10:41           ` Jean-Marc Bourguet
2001-03-30 16:13             ` Ken Garlington
2001-03-30 16:47               ` Jean-Marc Bourguet
2001-03-30 18:54                 ` Stephen Leake
2001-04-01  8:42                   ` Jean-Marc Bourguet
2001-03-31 19:30                 ` Ken Garlington
2001-04-01  8:59                   ` Jean-Marc Bourguet
2001-04-01 18:22                     ` Ken Garlington
2001-04-02  9:30                       ` Jean-Marc Bourguet
2001-04-02 12:42                         ` Robert A Duff
2001-04-02 14:16                           ` Jean-Marc Bourguet
2001-04-03  0:33                           ` Pat Rogers
2001-04-02 13:09                         ` Ken Garlington
2001-04-02 13:40                           ` Robert A Duff
2001-04-02 23:29                             ` Ken Garlington
2001-04-13 23:11                               ` Robert A Duff
2001-04-02 14:32                           ` Jean-Marc Bourguet
2001-04-04  7:59             ` Mats Karlssohn
2001-04-04  7:47           ` Mats Karlssohn
2001-04-06  0:33             ` Ken Garlington
2001-04-09 12:21               ` Mats Karlssohn
2001-04-13 15:51                 ` Tucker Taft
2001-03-27 14:39 ` Ted Dennison
2001-03-27 16:40   ` Mark Biggar
2001-03-27 18:14   ` Florian Weimer
2001-03-27 18:15   ` Florian Weimer
2001-03-27 18:57     ` Ted Dennison
2001-03-27 19:22       ` Florian Weimer
2001-03-27 20:23         ` Ted Dennison
2001-03-27 22:15           ` Florian Weimer
2001-03-27 23:30             ` Georg Bauhaus
2001-03-28  9:54               ` Florian Weimer
2001-03-28 15:20             ` Ted Dennison
2001-03-28 16:12               ` David C. Hoos, Sr.
2001-03-28 21:15               ` Robert A Duff
2001-03-28 21:56                 ` Brian Rogoff
2001-03-29  8:18                 ` Mats Karlssohn
2001-03-29  8:11               ` Mats Karlssohn
2001-03-29 14:37                 ` Ted Dennison
2001-03-29 16:35                   ` Mark Biggar
2001-03-29 19:27                     ` Florian Weimer
2001-03-29 19:28                     ` Florian Weimer
2001-03-30  3:41                       ` Ken Garlington
2001-03-30  4:32                         ` Brian Rogoff
2001-03-30 14:27                           ` Compile time executed functions [OT] Karel Thönissen
2001-03-30 17:30                             ` Scheveningen (Re: Compile time executed functions [OT]) Ray Blaak
2001-03-30 17:39                             ` More {OT] (Was " Brian Rogoff
2001-03-30 23:39                               ` Karel Thönissen
2001-03-30 17:47                         ` Compile time executed functions Brian Hanson
2001-03-30  0:06                     ` Robert A Duff
2001-03-30 15:02                       ` Ted Dennison
2001-03-30 20:57                         ` Robert A Duff
2001-04-02 14:26                           ` Ted Dennison
2001-03-30 17:33                       ` Ray Blaak
2001-03-29  8:25               ` Florian Weimer
2001-03-28  7:17   ` Mats Karlssohn
2001-03-29  1:35   ` Jon S Anthony
2001-03-27 14:39 ` Robert A Duff
2001-03-27 15:09   ` Ted Dennison
2001-03-27 16:33     ` Robert A Duff
2001-03-27 23:36     ` Ken Garlington
2001-03-28 20:47     ` Mark Lundquist
2001-03-28  7:29   ` Mats Karlssohn
2001-03-28 22:15     ` Robert A Duff
2001-03-29  8:43       ` Mats Karlssohn
2001-03-31  4:12         ` Robert A Duff
2001-04-05  7:06           ` Mats Karlssohn
2001-04-13 23:18             ` Robert A Duff
2001-03-29  5:02     ` Ken Garlington
2001-03-28  7:31 ` Mats Karlssohn
2001-03-30  8:57 ` Georg Bauhaus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox