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
next prev parent 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