Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #19015

Re: template metaprogramming in C?

From jacob navia <jacob@spamsink.net>
Newsgroups comp.lang.c
Subject Re: template metaprogramming in C?
Date 2012-03-25 01:21 +0100
Organization lccwin
Message-ID <jklodd$n3r$1@speranza.aioe.org> (permalink)
References <jkkcqp$b94$1@speranza.aioe.org>

Show all headers | View raw


Le 24/03/12 12:57, Rui Maciel a écrit :
> What are your thoughts on adding a standard form of proper template
> metaprogramming to the C programming language?
>
>
> Thanks in advance,
> Rui Maciel

Metaprogramming and templates
-----------------------------

Template metaprogramming has a big drawback: the programming it is done 
by the compiler. There is no way for the user to act wthin the template 
environment. Even simple things like template argument checking 
("concepts" in C++ terminology) is quite impossible: Bjarne has tried 
for 3 years or more and wasn't able to get it right.

I have been proposing another approach for a long time, but I have been 
bogged down because of my isolation and the lack of support from any 
institution. Since I have to earn my life with consulting jobs, I can't 
go very far.

The direction I am going is to establish real compile time functions 
where you have a rich and controlled environment where you develop your 
meta-programs, instead of the incredible limited environment of 
templates where you do not have even an if statement!

The central points of my approach are as follows:

1: Event oriented programming. The compiler generates a sequence of 
events while compiling: Start/end of function, start/end of line, 
statement, etc. Any error generates an event too. You can then, in a 
similar way to event oriented programming under windows or Macintosh 
"add code" to be run by the compiler *within the compiler itself* that 
will generate code according to the arguments of the event. You dispose 
in a controlled way all the compilation environment for you. You can 
query the types of the arguments, local variables, etc etc.

As a demonstration I added a profiler that uses the RDTSC machine 
instruction to generate very detailed and accurate logs of time passed 
at each statement/function.

2: Calling template code from within your code. You can use special 
syntax to call your own template procedures by writing in your code
	ListGen<Var=mylist,Type=mylistType,InitialSize=10>

That is an "undefined variable" error. You subclass that error, and
you are all set, able to generate code for a list as you wish.


The programming language used to program in the metaprogramming 
environment is.... well, you guessed! IT IS THE C language. You
program all your meta-programming code in C, you compile it with
lcc-win, and the compiler loads it when it starts.

The input of your function is the program text at the point of the 
event, i.e. you will find the text of the template in the code buffer.

The output of your function is text: the generated code for the 
functionality you want. That code is re-injected into the compiler input 
stream and processed as you wuld have typed it, just as the
templates of C++.

Of curse this is MUCH more advanced. You do not need to bother about 
"concepts": you can check your arguments yourself within your
metaprogram: you have all the normal constructs of C99 at your disposal.

You aren't dependent of the compiler "understanding correctly" what you
want since you can EXACTLY generate what you want.

Look, this is not just empty talk. I have added for instance the require 
and ensure statements of the Eiffel language to an experimental version 
of the compiler to implement the "Design by contract" paradigm.

I started implementing objective C, but it is not ready yet. I have 
several customers to serve, and two kids+wife...

The reaction in this group has been abysmal, as always. Anyway, here are 
my ideas again

jacob

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

template metaprogramming in C? Rui Maciel <rui.maciel@gmail.com> - 2012-03-24 11:57 +0000
  Re: template metaprogramming in C? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-03-24 07:25 -0700
    Re: template metaprogramming in C? Markus Wichmann <nullplan@gmx.net> - 2012-03-26 11:46 +0200
      Re: template metaprogramming in C? Philipp Klaus Krause <pkk@spth.de> - 2012-03-27 21:09 +0200
        Re: template metaprogramming in C? Markus Wichmann <nullplan@gmx.net> - 2012-03-28 09:25 +0200
          Re: template metaprogramming in C? James Kuyper <jameskuyper@verizon.net> - 2012-03-28 06:59 -0400
      Re: template metaprogramming in C? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-03-28 12:13 -0700
      Re: template metaprogramming in C? James Dow Allen <jdallen2000@yahoo.com> - 2012-04-01 02:47 -0700
  Re: template metaprogramming in C? Jens Gustedt <jens.gustedt@loria.fr> - 2012-03-24 18:01 +0100
  Re: template metaprogramming in C? Nobody <nobody@nowhere.com> - 2012-03-24 22:57 +0000
    Re: template metaprogramming in C? William Ahern <william@wilbur.25thandClement.com> - 2012-03-24 18:29 -0700
      Re: template metaprogramming in C? Ian Collins <ian-news@hotmail.com> - 2012-03-25 15:03 +1300
      Re: template metaprogramming in C? nick_keighley_nospam@hotmail.com - 2012-03-25 05:32 -0700
  Re: template metaprogramming in C? BGB <cr88192@hotmail.com> - 2012-03-24 17:02 -0700
  Re: template metaprogramming in C? jacob navia <jacob@spamsink.net> - 2012-03-25 01:21 +0100
    Re: template metaprogramming in C? Philipp Klaus Krause <pkk@spth.de> - 2012-03-27 21:17 +0200
      Re: template metaprogramming in C? jacob navia <jacob@spamsink.net> - 2012-03-28 11:10 +0200
        Re: template metaprogramming in C? Nils M Holm <news2009@t3x.org> - 2012-03-28 10:05 +0000
          Re: template metaprogramming in C? Willem <willem@toad.stack.nl> - 2012-03-28 13:36 +0000
            Re: template metaprogramming in C? Nils M Holm <news2009@t3x.org> - 2012-03-28 14:40 +0000
        Re: template metaprogramming in C? Kaz Kylheku <kaz@kylheku.com> - 2012-03-28 18:32 +0000
          Re: template metaprogramming in C? jacob navia <jacob@spamsink.net> - 2012-03-28 22:27 +0200
            Re: template metaprogramming in C? Kaz Kylheku <kaz@kylheku.com> - 2012-03-28 21:02 +0000
        Re: template metaprogramming in C? Nobody <nobody@nowhere.com> - 2012-03-29 16:30 +0100
          Re: template metaprogramming in C? jacob navia <jacob@spamsink.net> - 2012-03-29 23:39 +0200
            Re: template metaprogramming in C? "BartC" <bc@freeuk.com> - 2012-03-29 23:36 +0100
              Re: template metaprogramming in C? Kaz Kylheku <kaz@kylheku.com> - 2012-03-30 00:55 +0000
            Re: template metaprogramming in C? Kaz Kylheku <kaz@kylheku.com> - 2012-03-30 00:32 +0000
              Re: template metaprogramming in C? "BartC" <bc@freeuk.com> - 2012-03-30 10:52 +0100
                Re: template metaprogramming in C? jacob navia <jacob@spamsink.net> - 2012-04-01 09:36 +0200
            Re: template metaprogramming in C? Ian Collins <ian-news@hotmail.com> - 2012-03-30 16:32 +1300
              Re: template metaprogramming in C? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-03-31 01:52 -0700
    Re: template metaprogramming in C? ImpalerCore <jadill33@gmail.com> - 2012-03-28 08:48 -0700
      Re: template metaprogramming in C? "io_x" <a@b.c.invalid> - 2012-04-05 12:18 +0200
        Re: template metaprogramming in C? "io_x" <a@b.c.invalid> - 2012-04-05 13:08 +0200
          Re: template metaprogramming in C? "io_x" <a@b.c.invalid> - 2012-04-05 13:36 +0200
            Re: template metaprogramming in C? pete <pfiland@mindspring.com> - 2012-04-06 18:43 -0400
              Re: template metaprogramming in C? pete <pfiland@mindspring.com> - 2012-04-06 19:20 -0400
      Re: template metaprogramming in C? "io_x" <a@b.c.invalid> - 2012-04-05 13:08 +0200
  Re: template metaprogramming in C? William Ahern <william@wilbur.25thandClement.com> - 2012-03-24 19:01 -0700
    Re: template metaprogramming in C? William Ahern <william@wilbur.25thandClement.com> - 2012-03-24 19:10 -0700
  Re: template metaprogramming in C? Ian Collins <ian-news@hotmail.com> - 2012-03-25 15:25 +1300
    Re: template metaprogramming in C? Rui Maciel <rui.maciel@gmail.com> - 2012-03-25 15:13 +0100
      Re: template metaprogramming in C? Ian Collins <ian-news@hotmail.com> - 2012-03-26 07:10 +1300
        Re: template metaprogramming in C? Rui Maciel <rui.maciel@gmail.com> - 2012-03-25 20:31 +0100
          Re: template metaprogramming in C? nick_keighley_nospam@hotmail.com - 2012-03-26 00:54 -0700

csiph-web