Thanks Jonathan, that cleared things up for me.<div><br></div><div>Josh<br><br><div class="gmail_quote">On Sat, Jun 11, 2011 at 12:00 PM,  <span dir="ltr"><<a href="mailto:digitalmars-d-learn-request@puremagic.com">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. dmd vs rdmd (Joshua Niehus)<br>
   2. Re: dmd vs rdmd (Jonathan M Davis)<br>
   3. Re: dmd vs rdmd (Andrej Mitrovic)<br>
   4. char[] to string (Jonathan Sternberg)<br>
   5. Re: char[] to string (Jonathan M Davis)<br>
   6. Re: DMD Backend: Deciding instructions to use/avoid?<br>
      (Nick Sabalausky)<br>
   7. Re: char[] to string (bearophile)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Fri, 10 Jun 2011 14:28:41 -0700<br>
From: Joshua Niehus <<a href="mailto:jm.niehus@gmail.com">jm.niehus@gmail.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: dmd vs rdmd<br>
Message-ID: <BANLkTi=TYnN+UuxCr8wj8UwFRjS=<a href="mailto:iVzM3Q@mail.gmail.com">iVzM3Q@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
Hello,<br>
<br>
I am trying to compile code which is composed of two modules (in the same<br>
directory):<br>
<br>
main.d<br>
foo.d<br>
<br>
foo.d just declares a class Foo which has a string variable "bar" which i<br>
set to "hello" and main.d just prints bar's value to the console:<br>
<br>
// --------- main.d -----------<br>
import std.stdio, foo;<br>
<br>
void main() {<br>
    Foo f = new Foo;<br>
    writeln(f.bar);<br>
}<br>
<br>
When i attempt to compile main.d via:<br>
$dmd main.d<br>
I get undefined symbol errors.<br>
<br>
But when I run:<br>
$rdmd main.d<br>
it works as expected.<br>
<br>
The only way I could get main.d to compile with just dmd was to compile foo<br>
as a lib first and then compile main.d and passing the foo.a file as an<br>
argument:<br>
$dmd -lib foo.d<br>
$dmd main.d foo.a<br>
<br>
Is this normal?<br>
I got the impression from TDPL (Alexandrescu) that the dmd compiler would<br>
automatically search the root directory, find foo.d, work its magic, and<br>
create all the symbols that were defined in foo.d for main.d to compile...<br>
<br>
Thanks,<br>
Josh<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20110610/dccf485f/attachment-0001.html" target="_blank">http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20110610/dccf485f/attachment-0001.html</a>><br>

<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Fri, 10 Jun 2011 21:50:37 +0000<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: dmd vs rdmd<br>
Message-ID: <<a href="mailto:20110610215037.56570@gmx.com">20110610215037.56570@gmx.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
On 2011-06-10 14:28, Joshua Niehus wrote:<br>
> Hello,<br>
><br>
> I am trying to compile code which is composed of two modules (in the same<br>
> directory):<br>
><br>
> main.d<br>
> foo.d<br>
><br>
> foo.d just declares a class Foo which has a string variable "bar" which i<br>
> set to "hello" and main.d just prints bar's value to the console:<br>
><br>
> // --------- main.d -----------<br>
> import std.stdio, foo;<br>
><br>
> void main() {<br>
> Foo f = new Foo;<br>
> writeln(f.bar);<br>
> }<br>
><br>
> When i attempt to compile main.d via:<br>
> $dmd main.d<br>
> I get undefined symbol errors.<br>
><br>
> But when I run:<br>
> $rdmd main.d<br>
> it works as expected.<br>
><br>
> The only way I could get main.d to compile with just dmd was to compile foo<br>
> as a lib first and then compile main.d and passing the foo.a file as an<br>
> argument:<br>
> $dmd -lib foo.d<br>
> $dmd main.d foo.a<br>
><br>
> Is this normal?<br>
> I got the impression from TDPL (Alexandrescu) that the dmd compiler would<br>
> automatically search the root directory, find foo.d, work its magic, and<br>
> create all the symbols that were defined in foo.d for main.d to compile...<br>
<br>
With dmd, you must list every file that you're compiling. The only exceptions<br>
are that when dealing with libraries, dmd to have the root directory where the<br>
source is passed to -I, and it needs to have the root directory where the<br>
library is given with -L and -l with the library name (or just the library<br>
directly if you don't want it to search for the library). It's like gcc and<br>
dmc in that respect. It does nothing extra to track down files to compile for<br>
you. It'll find the source for importing thanks to -I, but it won't compile<br>
it. You must still compile it. You don't normally need -I or -L however,<br>
because dmd.conf (or sc.ini on Windows) already adds the appropriate flags for<br>
Phobos for you. You only need too specify them yourself when using other<br>
libraries.<br>
<br>
rdmd does extra magic to automatically track down all of the files that main.d<br>
imports and compile them. dmd doesn't do that.<br>
<br>
- Jonathan M Davis<br>
<br>
<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Sat, 11 Jun 2011 01:08:50 +0200<br>
From: Andrej Mitrovic <<a href="mailto:andrej.mitrovich@gmail.com">andrej.mitrovich@gmail.com</a>><br>
To: "digitalmars.D.learn" <<a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a>><br>
Subject: Re: dmd vs rdmd<br>
Message-ID: <<a href="mailto:BANLkTimH88skMm0DEa7h1JLuGhZaJ9XJqw@mail.gmail.com">BANLkTimH88skMm0DEa7h1JLuGhZaJ9XJqw@mail.gmail.com</a>><br>
Content-Type: text/plain; charset=ISO-8859-1<br>
<br>
Perhaps -L is just a linux feature, on Windows it only passes options<br>
to Optlink, and passing directories won't add them to search paths for<br>
library files.<br>
<br>
E.g. if I have:<br>
main.d<br>
foo/test.d<br>
foo/test.lib <- compiled as a library<br>
<br>
and try to invoke:<br>
dmd main.d -I.\foo\ test.lib -L.\foo\<br>
<br>
Optlink won't find the lib file:<br>
 Warning 2: File Not Found foo.lib<br>
<br>
I always have to specify the full path to the lib file, e.g.:<br>
dmd main.d -I.\test2\ .\test2\foo.lib<br>
<br>
<br>
------------------------------<br>
<br>
Message: 4<br>
Date: Sat, 11 Jun 2011 02:56:19 +0000 (UTC)<br>
From: Jonathan Sternberg <<a href="mailto:jonathansternberg@gmail.com">jonathansternberg@gmail.com</a>><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: char[] to string<br>
Message-ID: <isulgj$1efp$<a href="mailto:1@digitalmars.com">1@digitalmars.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
Why doesn't this work?<br>
<br>
import std.stdio;<br>
<br>
string copy_string(char [] input)<br>
{<br>
    return input.dup;<br>
}<br>
<br>
int main()<br>
{<br>
    char [] buf = ['h', 'e', 'l', 'l', 'o'];<br>
    writeln( copy_string(buf) );<br>
}<br>
<br>
I want to do something more complex. In my code, I want to have a dynamic<br>
array that I can append stuff into and then return it as a string. In C++, a<br>
non-const variable can be implicitly converted into a const. I know string is<br>
an alias for const char. Is there a reason why it won't implicitly convert it?<br>
<br>
I hesitate to use cast for this type of thing as it probably indicates I'm<br>
doing something fundamentally wrong as I'm just starting to learn the language.<br>
<br>
<br>
------------------------------<br>
<br>
Message: 5<br>
Date: Fri, 10 Jun 2011 21:32:44 -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: char[] to string<br>
Message-ID: <<a href="mailto:201106102132.44286.jmdavisProg@gmx.com">201106102132.44286.jmdavisProg@gmx.com</a>><br>
Content-Type: Text/Plain;  charset="us-ascii"<br>
<br>
On 2011-06-10 19:56, Jonathan Sternberg wrote:<br>
> Why doesn't this work?<br>
><br>
> import std.stdio;<br>
><br>
> string copy_string(char [] input)<br>
> {<br>
>     return input.dup;<br>
> }<br>
><br>
> int main()<br>
> {<br>
>     char [] buf = ['h', 'e', 'l', 'l', 'o'];<br>
>     writeln( copy_string(buf) );<br>
> }<br>
><br>
> I want to do something more complex. In my code, I want to have a dynamic<br>
> array that I can append stuff into and then return it as a string. In C++,<br>
> a non-const variable can be implicitly converted into a const. I know<br>
> string is an alias for const char. Is there a reason why it won't<br>
> implicitly convert it?<br>
><br>
> I hesitate to use cast for this type of thing as it probably indicates I'm<br>
> doing something fundamentally wrong as I'm just starting to learn the<br>
> language.<br>
<br>
string is an alias for immutable(char)[]. The elements of a string can never<br>
be altered. dup returns a mutable copy of a string (not const, not immutable).<br>
idup returns an immutable copy. So, in this case you want idup, not dup. Even<br>
better though, would be to use <a href="http://std.conv.to" target="_blank">std.conv.to</a> - e.g. to!string(input). This will<br>
convert input to a string, but it has the advantage that if input is already a<br>
string, then it'll just return the string rather than making another copy like<br>
idup would.<br>
<br>
- Jonathan M Davis<br>
<br>
<br>
------------------------------<br>
<br>
Message: 6<br>
Date: Sat, 11 Jun 2011 03:11:07 -0400<br>
From: "Nick Sabalausky" <a@a.a><br>
To: <a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a><br>
Subject: Re: DMD Backend: Deciding instructions to use/avoid?<br>
Message-ID: <isv4mh$2a0v$<a href="mailto:1@digitalmars.com">1@digitalmars.com</a>><br>
<br>
"Andrew Wiley" <<a href="mailto:wiley.andrew.j@gmail.com">wiley.andrew.j@gmail.com</a>> wrote in message<br>
news:mailman.762.1307693296.14074.digitalmars-d-learn@puremagic.com...<br>
> On Thu, Jun 9, 2011 at 5:58 PM, Nick Sabalausky <a@a.a> wrote:<br>
><br>
>> "Bernard Helyer" <<a href="mailto:b.helyer@gmail.com">b.helyer@gmail.com</a>> wrote in message<br>
>> news:isdgdc$m3a$1@digitalmars.com...<br>
>> > If you run the program in GDB, can you disassemble when the error is<br>
>> > given? That may give you the instruction the kernel is assasinating<br>
>> > your<br>
>> > process for.<br>
>><br>
>> I can try that if anyone can help walk me through it or at least point me<br>
>> to<br>
>> a good beginner's tutorial for gdb. I never use commandline debuggers,<br>
>> and<br>
>> I've never even touched gdb, so I don't have the slightest clue how to<br>
>> use<br>
>> it.<br>
>><br>
>><br>
>> The short version is to run `gdb yourapp` which will get you into the GDB<br>
> shell. Then `run` to actually start the app. It will halt and return to<br>
> the<br>
> shell when it hits the bad instruction, and you should type `disass` to<br>
> view<br>
> the assembly code of the current function. There will be a pointer (->, I<br>
> think) pointing to the current instruction in the listing.<br>
> You can find GDB basics at <a href="http://www.cs.cmu.edu/~gilpin/tutorial/" target="_blank">http://www.cs.cmu.edu/~gilpin/tutorial/</a><br>
> although<br>
> that tutorial doesn't include `disass`. I mostly learned it by firing it<br>
> up<br>
> and typing `help`  :D<br>
><br>
<br>
Thanks. This is what I get:<br>
<br>
$ gdb ./dvm-0.2.0-linux-32<br>
GNU gdb (GDB) 7.1-ubuntu<br>
Copyright (C) 2010 Free Software Foundation, Inc.<br>
License GPLv3+: GNU GPL version 3 or later<br>
<<a href="http://gnu.org/licenses/gpl.html" target="_blank">http://gnu.org/licenses/gpl.html</a>><br>
This is free software: you are free to change and redistribute it.<br>
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"<br>
and "show warranty" for details.<br>
This GDB was configured as "i486-linux-gnu".<br>
For bug reporting instructions, please see:<br>
<<a href="http://www.gnu.org/software/gdb/bugs/" target="_blank">http://www.gnu.org/software/gdb/bugs/</a>>...<br>
Reading symbols from /home/nick/dev/d/tool/dvm-0.2.0-linux-32...(no<br>
debugging symbols found)...done.<br>
(gdb) run<br>
Starting program: /home/nick/dev/d/tool/dvm-0.2.0-linux-32<br>
[Thread debugging using libthread_db enabled]<br>
<br>
Program received signal SIGILL, Illegal instruction.<br>
0x080bccdb in<br>
_D5tango4core4sync6Atomic31__T13memoryBarrierVb1Vb0Vi0Vb0Z13memoryBarrierFZv<br>
()<br>
(gdb) disass<br>
Dump of assembler code for function<br>
_D5tango4core4sync6Atomic31__T13memoryBarrierVb1Vb0Vi0Vb0Z13memoryBarrierFZv:<br>
   0x080bccd8 <+0>:     push   %ebp<br>
   0x080bccd9 <+1>:     mov    %esp,%ebp<br>
=> 0x080bccdb <+3>:     lfence<br>
   0x080bccde <+6>:     pop    %ebp<br>
   0x080bccdf <+7>:     ret<br>
End of assembler dump.<br>
(gdb)<br>
<br>
So apperently it's a memory fence instruction. I don't have a clue what my<br>
CPU supports in that area. Oh, and apperently it's inside Tango, so maybe<br>
I'll bring this up over there. But I have no idea if that's something that<br>
Tango has in common with druntime or not.<br>
<br>
<br>
<br>
<br>
<br>
<br>
------------------------------<br>
<br>
Message: 7<br>
Date: Sat, 11 Jun 2011 08:12:51 -0400<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: char[] to string<br>
Message-ID: <isvm43$bjo$<a href="mailto:1@digitalmars.com">1@digitalmars.com</a>><br>
Content-Type: text/plain<br>
<br>
Jonathan M Davis:<br>
<br>
> Even better though, would be to use <a href="http://std.conv.to" target="_blank">std.conv.to</a> - e.g. to!string(input). This will<br>
> convert input to a string, but it has the advantage that if input is already a<br>
> string, then it'll just return the string rather than making another copy like<br>
> idup would.<br>
<br>
I didn't know this. Isn't it very good to give this bit of intelligence to idup too?<br>
<br>
Bye,<br>
bearophile<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 65, Issue 26<br>
***************************************************<br>
</blockquote></div><br></div>