On Monday, 10 February 2014 at 15:35:00 UTC, Patrick D. Jeeves wrote:
One thing I've been trying to figure out is how to do the following in D:

class foo
{
    string bar();
};

void foo::bar()
{
    return "hello world!";
}

From what I can gather constructs like this just aren't allowed in D, but I don't understand why, can anyone explain it please? I know they're only in C++ because it uses #include instead of importing compiled modules, but I find it hard to quickly get a general idea of what a class is supposed to do when there are function definitions strewn about it.

dmd's -H family of options allows you to generate .di files which strip definitions, leaving only declarations in place. I agree that sometimes finding your way around a huge class or module is difficult. However, D is not the only language that does this (C#, Java, Python...), and it's still manageable using DDoc and .di files.

The other thing I want to know is about the mixin() command, and what the limitations of it are; I know it runs an interpreted version of D,

It doesn't run any interpreters, it mixes in a string as D code and compiles it.

but I get the feeling that it isn't as powerful as the compiled version, because no one seems to have tried making something like this:

class example : File
{
     mixin(d.flex(`lex_file.l`));
     mixin(d.bison(`bison_file.y`));
};

There's a string import expression (http://dlang.org/expression.html#ImportExpression) that allows to import some text file at compile time and make a string literal out of it. vibe.d, for example, uses it to generate code for its 'Diet' HTML templates. Generally, if you can create compile-time parser for something, you can implement what you're describing above.

Reply via email to