On Tue, 10 Nov 2009 03:27:20 +0300, Bill Baxter <wbax...@gmail.com> wrote:

On Mon, Nov 9, 2009 at 4:09 PM, Walter Bright
<newshou...@digitalmars.com> wrote:
Looks like Bill Baxter is giving a presentation on D Nov. 18!

http://www.nwcpp.org/

Yep, that's right, and I'd be quite grateful to you smart folks here
if you could share your meta-programming favorites with me!   If
you've got a real-world example of meta-programming in D that you
think is particularly handy, then please send it my way

I'm looking for small-but-useful things that are easy to explain, and
make something easier than it would be otherwise.  Things like places
where static if can save your butt,  or loop unrolling,  and passing
code snippets to functions like in std.algorithm.

Things like a compile-time raytracer or regexp parser (though quite
cool!) are not what I'm after.  Too involved for a short talk.

--bb

kprintf (a printf variant) in XoMB is a nice example imo. It accepts format as a template parameter, doing all the checks at compile-time (and more).

http://github.com/xomboverlord/xomb-bare-bones/blob/6d924a9fd7cafe43aa50f38c0cd04c44187d4993/kernel/core/kprintf.d

/* This template will generate code for printing and will do
 * all parsing of the format string at compile time
 *
 * USAGE:
 *   kprintf!("format string {specifier} ... ")(args...);
 *
 * EXAMPLES:
 *   kprintf!("Integer: {}")(10);
 *   kprintf!("{!cls}Cleared the screen.")();
 *   kprintf!("{!pos:2,3}At position (2,3)")();
 *   kprintf!("{!fg:LightBlue!bg:Gray}{}")(25);
 *   kprintf!("{!fg:Red}redness")();
 *   kprintf!("{x} Hex!")(145);
 *   kprintf!("Curly Brace: {{")();
 *
 * COMMANDS:
 *   !cls - Clears the screen.
 *   !fg  - Sets the foreground color, see the Color enum
 *            in kernel/dev/console.d.
 *   !bg  - Sets the background color, same as above.
 *   !pos - Moves the cursor to the x and y given, see example above.
 *
 * SPECIFIERS:
 *   {x}  - Prints the hex value.
 *   {u}  - Treats as unsigned.
 *   {}   - Prints common form.
 *
 * WHY IS IT COOL?
 *   - Compile time parsing of format strings
 *   - Type checking at compile time as well
 *   - That means it can tell you that you are dumb before you execute.
 *   - No need to specify type information.
 *
 *   - So we can do this and not care about the
 *      output of the function:
 *
 *   auto blah = someFunction();
 *   kprintf!("Some Arbitrary Info: {}")(blah);
 *
 *      WOWWY WOW WOW!
 *
 */

Reply via email to