<div dir="ltr">Hello Learn-D,<div><br></div><div>I'm new to D from a C/C++ background. One caveat of defining structs in D that I came across was that structs should be bit-wise relocatable and hence should not contain pointers to internal data members.</div>
<div><br></div><div style>So that essentially means that code of the form (below) is disallowed.</div><div style><br></div><div style>struct S1</div><div style>{</div><div style>    int x;</div><div style>    int* p = &x;</div>
<div style>}</div><div style><br></div><div style>What I'm wondering is, are references also disallowed? As in:</div><div style><br></div><div style>struct S2</div><div style>{</div><div style>    int x;</div><div style>
    ref int p = x;</div><div style>}</div><div><br></div><div style>I ask this because in C++, I have a telemetry class which publishes the value of any member variable over TCP. I was trying to achieve similar functionality in D and am wondering how to go about designing it.</div>
<div style><br></div><div style>Ideally I'd like to have:</div><div style><br></div><div style>struct Telemetry(T) ...</div><div style><br></div><div style>struct UsefulStruct</div><div style>{</div><div style>    int importantValue;</div>
<div style>    auto tel1 = Telemetry!int(importantValue);</div><div style>}</div><div><div class="gmail_extra"><br></div><div class="gmail_extra">Essentially I'm asking whether the above is a valid construct in D.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Thanks,</div><div class="gmail_extra">Saurabh<br><br><div class="gmail_quote">On Mon, Jun 3, 2013 at 4:42 AM,  <span dir="ltr"><<a href="mailto:digitalmars-d-learn-request@puremagic.com" target="_blank">digitalmars-d-learn-request@puremagic.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Send Digitalmars-d-learn mailing list submissions to<br>
        <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="http://lists.puremagic.com/cgi-bin/mailman/listinfo/digitalmars-d-learn" target="_blank">http://lists.puremagic.com/cgi-bin/mailman/listinfo/digitalmars-d-learn</a><br>
<br>
or, via email, send a message with subject or body 'help' to<br>
        <a href="mailto:digitalmars-d-learn-request@puremagic.com">digitalmars-d-learn-request@puremagic.com</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:digitalmars-d-learn-owner@puremagic.com">digitalmars-d-learn-owner@puremagic.com</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of Digitalmars-d-learn digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
   1. What tool(s) do you use to build a large D project? (coredumper)<br>
   2. Re: What tool(s) do you use to build a large D project?<br>
      (Adam D. Ruppe)<br>
   3. Re: UFCS for classes with opCall( ... ) (Timon Gehr)<br>
   4. Re: until strange behavior (Jonathan M Davis)<br>
   5. isMutable doesn't work with enum ? (Temtaime)<br>
   6. Re: isMutable doesn't work with enum ? (Jonathan M Davis)<br>
   7. Re: isMutable doesn't work with enum ? (bearophile)<br>
   8. Re: isMutable doesn't work with enum ? (Temtaime)<br>
   9. Re: isMutable doesn't work with enum ? (Temtaime)<br>
  10. Re: isMutable doesn't work with enum ? (Jonathan M Davis)<br>
  11. Re: isMutable doesn't work with enum ? (Jonathan M Davis)<br>
  12. Re: until strange behavior (Jack Applegame)<br>
  13. Re: until strange behavior (Jonathan M Davis)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Sun, 02 Jun 2013 21:20:38 +0200<br>
From: "coredumper" <<a href="mailto:me@example.com">me@example.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: What tool(s) do you use to build a large D project?<br>
Message-ID: <<a href="mailto:etvbsbhiaukbnlxgixcy@forum.dlang.org">etvbsbhiaukbnlxgixcy@forum.dlang.org</a>><br>
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no<br>
<br>
Hello!<br>
<br>
What tool(s) do you use to build a D project? I looked at cmaked<br>
(and cmaked2) but both projects seem not to be under active<br>
development, there is also a bunch of other tools like dsss but<br>
all of them are an abandonware. So, if you are seriously using D,<br>
how do you build you projects? What is the mainstream way?<br>
<br>
<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Sun, 02 Jun 2013 21:26:43 +0200<br>
From: "Adam D. Ruppe" <<a href="mailto:destructionator@gmail.com">destructionator@gmail.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: Re: What tool(s) do you use to build a large D project?<br>
Message-ID: <<a href="mailto:qaythxlwuijhavdjhqqi@forum.dlang.org">qaythxlwuijhavdjhqqi@forum.dlang.org</a>><br>
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no<br>
<br>
I just use plain old makefiles. I generally start with<br>
<br>
all:<br>
     dmd *.d <flags><br>
<br>
and then break it out just like I would with a C++ project when<br>
the need arises (actually pretty rare, this works quite well even<br>
for my larger stuff).<br>
<br>
<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Sun, 02 Jun 2013 22:48:47 +0200<br>
From: Timon Gehr <<a href="mailto:timon.gehr@gmx.ch">timon.gehr@gmx.ch</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: Re: UFCS for classes with opCall( ... )<br>
Message-ID: <kogb3f$ehk$<a href="mailto:1@digitalmars.com">1@digitalmars.com</a>><br>
Content-Type: text/plain; charset=UTF-8; format=flowed<br>
<br>
On 06/01/2013 02:22 PM, ParticlePeter wrote:<br>
> Hello,<br>
><br>
> after watching Walters Talk about Component Programming ( link Bellow )<br>
> I was quite fond of his pipelining approach.<br>
> I tried the following and had to realize that this way using UFCS isn't<br>
> working ( or I do something wrong ).<br>
><br>
> // I want to write On Canvas1 | draw Shape1 | draw Shape2 | ... in code<br>
> ( not working ):<br>
> canvas1.shape1.shape2.draw()<br>
><br>
> // Which in essence would be ( working ):<br>
> shape2( shape1( canvas1 ) ).draw()<br>
> ...<br>
<br>
UFCS is working with opCall already.<br>
<br>
The reason your code does not work is that UFCS only works with<br>
module-level symbols (and with the latest release also for locally<br>
imported symbols IIRC.)<br>
<br>
<br>
<br>
<br>
------------------------------<br>
<br>
Message: 4<br>
Date: Sun, 02 Jun 2013 13:50:15 -0700<br>
From: Jonathan M Davis <<a href="mailto:jmdavisProg@gmx.com">jmdavisProg@gmx.com</a>><br>
To: "digitalmars.D.learn" <<a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a>><br>
Subject: Re: until strange behavior<br>
Message-ID: <2641846.fA8uGAeyYA@lyonel><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
On Sunday, June 02, 2013 15:20:31 Temtaime wrote:<br>
> Why<br>
><br>
> char arr[3] = "abc";<br>
> arr[].until('b').front has type of dchar ???<br>
<br>
<a href="http://stackoverflow.com/questions/12288465" target="_blank">http://stackoverflow.com/questions/12288465</a><br>
<br>
- Jonathan M Davis<br>
<br>
<br>
------------------------------<br>
<br>
Message: 5<br>
Date: Mon, 03 Jun 2013 00:14:34 +0200<br>
From: "Temtaime" <<a href="mailto:temtaime@gmail.com">temtaime@gmail.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: isMutable doesn't work with enum ?<br>
Message-ID: <<a href="mailto:eruaxrnxigbyqamlxemq@forum.dlang.org">eruaxrnxigbyqamlxemq@forum.dlang.org</a>><br>
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no<br>
<br>
Hi!<br>
<br>
        enum int a = 5;<br>
        writeln(isMutable!(typeof(a)));<br>
<br>
Writes true. Why? How i can figure out if variable is "enum"<br>
constant ?<br>
Thanks.<br>
Regards.<br>
<br>
<br>
------------------------------<br>
<br>
Message: 6<br>
Date: Sun, 02 Jun 2013 15:23:36 -0700<br>
From: Jonathan M Davis <<a href="mailto:jmdavisProg@gmx.com">jmdavisProg@gmx.com</a>><br>
To: "digitalmars.D.learn" <<a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a>><br>
Subject: Re: isMutable doesn't work with enum ?<br>
Message-ID: <4584128.RAFB2m748R@lyonel><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
On Monday, June 03, 2013 00:14:34 Temtaime wrote:<br>
> Hi!<br>
><br>
>       enum int a = 5;<br>
>       writeln(isMutable!(typeof(a)));<br>
><br>
> Writes true. Why? How i can figure out if variable is "enum"<br>
> constant ?<br>
> Thanks.<br>
> Regards.<br>
<br>
isMutable just checks whether the type const or immutable, and is true if it's<br>
neither. And int is mutable. Also, what you've declared there is a manifest<br>
constant, not really an enum in the normal sense. It would have to have a type<br>
name for it be a full-on enum. Something more like<br>
<br>
enum E : int { a = 5 }<br>
<br>
Your a there is not typed as an enum at all. The difference between it and<br>
doing something like<br>
<br>
immutable int a = 5;<br>
<br>
is the fact a manifest constant does not have an address and gets copy-pasted<br>
where it's used, which is why doing something like<br>
<br>
enum arr = [1, 2, 3, 4, 5];<br>
<br>
is often considered a bad idea. An array gets allocated every time that the<br>
manifest constant is used, because using arr effectively just pastes [1, 2, 3,<br>
4, 5] in its place.<br>
<br>
However, if you really want to check whether something is an enum or not, do<br>
<br>
is(E == enum)<br>
<br>
And with your original definition, is(typeof(a) == enum) will be false, because<br>
its type is int.<br>
<br>
- Jonathan M Davis<br>
<br>
<br>
------------------------------<br>
<br>
Message: 7<br>
Date: Mon, 03 Jun 2013 00:30:42 +0200<br>
From: "bearophile" <<a href="mailto:bearophileHUGS@lycos.com">bearophileHUGS@lycos.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: Re: isMutable doesn't work with enum ?<br>
Message-ID: <<a href="mailto:hpdebexqxrzebtgixoua@forum.dlang.org">hpdebexqxrzebtgixoua@forum.dlang.org</a>><br>
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no<br>
<br>
Temtaime:<br>
<br>
><br>
>       enum int a = 5;<br>
>       writeln(isMutable!(typeof(a)));<br>
><br>
> Writes true. Why?<br>
<br>
If you run this:<br>
<br>
enum int a = 5;<br>
pragma(msg, typeof(a));<br>
void main() {}<br>
<br>
It prints "int". An int is mutable.<br>
<br>
<br>
> How i can figure out if variable is "enum" constant ?<br>
<br>
Why do you need to know that?<br>
<br>
Bye,<br>
bearophile<br>
<br>
<br>
------------------------------<br>
<br>
Message: 8<br>
Date: Mon, 03 Jun 2013 00:34:49 +0200<br>
From: "Temtaime" <<a href="mailto:temtaime@gmail.com">temtaime@gmail.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: Re: isMutable doesn't work with enum ?<br>
Message-ID: <<a href="mailto:jfpkdgmmvfsifarokmsu@forum.dlang.org">jfpkdgmmvfsifarokmsu@forum.dlang.org</a>><br>
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no<br>
<br>
It's intresting.<br>
So the only way to pass "a" to overloaded function like that ?<br>
<br>
void foo(T)(ref T) { writeln("true"); }<br>
void foo(T)(auto ref in T) { writeln("false"); }<br>
<br>
enum int a = 10;<br>
foo(a); // false<br>
<br>
int b = 1;<br>
foo(b); // true<br>
<br>
<br>
------------------------------<br>
<br>
Message: 9<br>
Date: Mon, 03 Jun 2013 00:36:46 +0200<br>
From: "Temtaime" <<a href="mailto:temtaime@gmail.com">temtaime@gmail.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: Re: isMutable doesn't work with enum ?<br>
Message-ID: <<a href="mailto:ecwvfgfajylndwlyjccu@forum.dlang.org">ecwvfgfajylndwlyjccu@forum.dlang.org</a>><br>
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no<br>
<br>
I'm writing serializer and it iterates all members of struct.<br>
It compares fields marked as "enum" when reading from file to<br>
check BOM, for example.<br>
<br>
I'm using enum now because const members are deprecated in 2.063.<br>
<br>
<br>
------------------------------<br>
<br>
Message: 10<br>
Date: Sun, 02 Jun 2013 15:40:32 -0700<br>
From: Jonathan M Davis <<a href="mailto:jmdavisProg@gmx.com">jmdavisProg@gmx.com</a>><br>
To: "digitalmars.D.learn" <<a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a>><br>
Subject: Re: isMutable doesn't work with enum ?<br>
Message-ID: <1713172.WrMD0SRKMg@lyonel><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
On Monday, June 03, 2013 00:34:49 Temtaime wrote:<br>
> It's intresting.<br>
> So the only way to pass "a" to overloaded function like that ?<br>
><br>
> void foo(T)(ref T) { writeln("true"); }<br>
> void foo(T)(auto ref in T) { writeln("false"); }<br>
><br>
> enum int a = 10;<br>
> foo(a); // false<br>
><br>
> int b = 1;<br>
> foo(b); // true<br>
<br>
ref only accepts lvalues. An enum is not an lvalue. auto ref makes it so that<br>
if the templated function is passed an lvalue, it generates a ref version,<br>
whereas if it's passed an rvalue, it generates a non-ref version. It would<br>
appear that the compiler considers ref to be a better match than auto ref (as<br>
opposed to giving an error), so when you pass foo an lvalue, the ref version<br>
gets called, but when you pass it an rvalue, the only viable overload is the<br>
auto ref one, so it gets called.<br>
<br>
- Jonathan M Davis<br>
<br>
<br>
------------------------------<br>
<br>
Message: 11<br>
Date: Sun, 02 Jun 2013 15:42:09 -0700<br>
From: Jonathan M Davis <<a href="mailto:jmdavisProg@gmx.com">jmdavisProg@gmx.com</a>><br>
To: "digitalmars.D.learn" <<a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a>><br>
Subject: Re: isMutable doesn't work with enum ?<br>
Message-ID: <19062665.b9QIKb6H1G@lyonel><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
On Monday, June 03, 2013 00:36:46 Temtaime wrote:<br>
> I'm writing serializer and it iterates all members of struct.<br>
> It compares fields marked as "enum" when reading from file to<br>
> check BOM, for example.<br>
><br>
> I'm using enum now because const members are deprecated in 2.063.<br>
<br>
The equivalent to what const members were doing before is static const. static<br>
was being implicitly tacked onto the const. enums do something subtley<br>
different. static const variables are actually variables with addresses<br>
(lvalues), whereas enums have no address and are rvalues.<br>
<br>
- Jonathan M Davis<br>
<br>
<br>
------------------------------<br>
<br>
Message: 12<br>
Date: Mon, 03 Jun 2013 01:04:28 +0200<br>
From: "Jack Applegame" <<a href="mailto:japplegame@gmail.com">japplegame@gmail.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: Re: until strange behavior<br>
Message-ID: <<a href="mailto:qahcvglusxgrkshoocti@forum.dlang.org">qahcvglusxgrkshoocti@forum.dlang.org</a>><br>
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no<br>
<br>
On Sunday, 2 June 2013 at 20:50:31 UTC, Jonathan M Davis wrote:<br>
<br>
> <a href="http://stackoverflow.com/questions/12288465" target="_blank">http://stackoverflow.com/questions/12288465</a><br>
<br>
Lets have string of chars, and it contains UTF-8 string.<br>
Does front(str[]) automatically convert first unicode character<br>
to UTF-32 and returns it?<br>
I made a test case and answer is: "Yes, it does!"<br>
May be this make sense. But such implicit conversion confuses<br>
everyone whom I asked.<br>
Therefore, string is not ordinary array (in Phobos context), but<br>
special array with special processing rules.<br>
<br>
I'm moving from C++ and often ask myself: "why D has so much<br>
hidden confusing things?"<br>
<br>
<br>
------------------------------<br>
<br>
Message: 13<br>
Date: Sun, 02 Jun 2013 16:12:09 -0700<br>
From: Jonathan M Davis <<a href="mailto:jmdavisProg@gmx.com">jmdavisProg@gmx.com</a>><br>
To: "digitalmars.D.learn" <<a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a>><br>
Subject: Re: until strange behavior<br>
Message-ID: <10181668.aRRsJoJz5o@lyonel><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
On Monday, June 03, 2013 01:04:28 Jack Applegame wrote:<br>
> On Sunday, 2 June 2013 at 20:50:31 UTC, Jonathan M Davis wrote:<br>
> > <a href="http://stackoverflow.com/questions/12288465" target="_blank">http://stackoverflow.com/questions/12288465</a><br>
><br>
> Lets have string of chars, and it contains UTF-8 string.<br>
> Does front(str[]) automatically convert first unicode character<br>
> to UTF-32 and returns it?<br>
> I made a test case and answer is: "Yes, it does!"<br>
> May be this make sense. But such implicit conversion confuses<br>
> everyone whom I asked.<br>
> Therefore, string is not ordinary array (in Phobos context), but<br>
> special array with special processing rules.<br>
><br>
> I'm moving from C++ and often ask myself: "why D has so much<br>
> hidden confusing things?"<br>
<br>
The language treats strings as arrays of code units. The standard library<br>
treats them as ranges of code points. Yes, this can be confusing, but we need<br>
both. In order to operate on strings efficiently, they need to be made up of<br>
code units, but correctness requires code points. This means that the<br>
complexity is to a great extent an intrinsic part of dealing with strings<br>
properly. In C++, people usually just screw it up and treat char as if it were<br>
a character when in fact it's not. It's a piece of one.<br>
<br>
Whether we went about handling the complexity of code units vs code points in<br>
the best manner is debatable, but it can't be made simple if you want both<br>
efficiency and correctness. A better approach might have been to have a string<br>
type which operated on code points and held the code units internally so that<br>
everything operated on code points by default, but the library stuff was added<br>
later, and Walter Bright tends to think that everyone should understand<br>
Unicode well, so the decisions he makes with regards to that aren't always the<br>
best (since most people don't understand Unicode well and don't want to care).<br>
<br>
What we have actually works quite well, but it does require that you come to<br>
at least a basic understanding of the difference between code units and code<br>
points.<br>
<br>
- Jonathan M Davis<br>
<br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
Digitalmars-d-learn mailing list<br>
<a href="mailto:Digitalmars-d-learn@puremagic.com">Digitalmars-d-learn@puremagic.com</a><br>
<a href="http://lists.puremagic.com/cgi-bin/mailman/listinfo/digitalmars-d-learn" target="_blank">http://lists.puremagic.com/cgi-bin/mailman/listinfo/digitalmars-d-learn</a><br>
<br>
<br>
End of Digitalmars-d-learn Digest, Vol 89, Issue 5<br>
**************************************************<br>
</blockquote></div><br></div></div></div>