From: Mats Karlssohn <mats@mida.se>
Subject: Compile time executed functions
Date: Tue, 27 Mar 2001 09:10:06 +0200
Date: 2001-03-27T07:10:31+00:00 [thread overview]
Message-ID: <3AC03CCE.70E3C2D5@mida.se> (raw)
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 reply other threads:[~2001-03-27 7:10 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-03-27 7:10 Mats Karlssohn [this message]
2001-03-27 13:30 ` Compile time executed functions Ken Garlington
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