core.sys.posix.unistd link error
Ruslan Mullakhmetov
nobody at example.com
Sun Sep 22 13:15:29 PDT 2013
Thanks. I suspected it but i wanted a formal reference. the
logic, though little bit cleared by you is quite obvious. But
don't waste time, if you can not tell from a scratch that this
is clause x.y.z of the Standard, sorry, Book.
On Sunday, 22 September 2013 at 19:56:36 UTC, Jonathan M Davis
wrote:
> On Sunday, September 22, 2013 13:52:54 Ruslan Mullakhmetov
> wrote:
>> But now i need to sort out what the difference between
>> // global scope
>>
>> int a = 10;
>
> That directly initializes the variable at compile time, meaning
> that whatever
> is used to initialize the variable must be callable at compile
> time. And the
> value must be able to be set at compile time and then be
> carried over to
> runtime. That will work with int, but it does not work with
> most stuff that's
> on the heap (like classes or AAs) - arrays would be the major
> exception to
> that, since they can be set at compile time (and I believe that
> it was
> recently changed so that immutable classes could be set at
> compile time, but
> not const or mutable ones - implementing that is rather
> complicated, and it
> may or may not ever happen). Over time, what you can do at
> compile time with
> CTFE (Compile Time Function Evaluation) has improved, but there
> are still
> restrictions, and some things will never be possible (e.g. I/O
> or calling C
> functions).
>
>> and
>>
>> int a;
>>
>> static this()
>> {
>> a = 10;
>> }
>
> That does not set the variable at compile time. Rather, the
> static constructor
> sets it at runtime. So, this has none of the restrictions that
> directly
> initializing a module or static variable does. However, it does
> have the
> downside that two modules that have static constructors can't
> import each
> other (either directly or indirectly), because then the runtime
> wouldn't know
> which order to run them in. If you do that, you'll get an
> exception at runtime
> complaining about a circular import (which sucks, but
> unfortunately, the
> circular import can't always be detected at compile time -
> thanks in part to
> .di files - so runtime detection is the best that can be done).
> So, while
> static constructors can be really nice, you do have to avoid
> having modules
> that use them import each other, which means either being
> careful about how
> your modules import each other or avoiding static constructors.
> Which is
> easier depends on your code.
More information about the Digitalmars-d-learn
mailing list