www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - reddit.com: first Chapter of TDPL available for free

reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_programming_language_tdpl/

(Don't tell anyone, but I plan to rewrite it.)

Andrei
Aug 03 2009
next sibling parent Moritz Warning <moritzwarning web.de> writes:
On Mon, 03 Aug 2009 17:01:34 -0500, Andrei Alexandrescu wrote:

 http://www.reddit.com/r/programming/comments/975ng/

 
 (Don't tell anyone, but I plan to rewrite it.)
 
 Andrei

Your secret will be safe. ;-) Thanks for sharing.
Aug 03 2009
prev sibling next sibling parent reply "Nick Sabalausky" <a a.a> writes:
"Andrei Alexandrescu" <SeeWebsiteForEmail erdani.org> wrote in message 
news:h57mno$26gm$2 digitalmars.com...
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_programming_language_tdpl/

 (Don't tell anyone, but I plan to rewrite it.)

 Andrei

I just read the first section and already I'm impressed with it. Great job :) One little niggle though: At the end of the paragraph that explains the hello world's import statement, it says "Repeated imports of the same file are of no import." Sounds like a typo snuck in there.
Aug 03 2009
next sibling parent Robert Fraser <fraserofthenight gmail.com> writes:
Nick Sabalausky wrote:
 One little niggle though: At the end of the paragraph that explains the 
 hello world's import statement, it says "Repeated imports of the same file 
 are of no import." Sounds like a typo snuck in there. 

Or a pun ;-P.
Aug 03 2009
prev sibling next sibling parent reply Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
On Mon, Aug 3, 2009 at 7:34 PM, Nick Sabalausky<a a.a> wrote:
 "Andrei Alexandrescu" <SeeWebsiteForEmail erdani.org> wrote in message
 news:h57mno$26gm$2 digitalmars.com...
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_programming_language_tdpl/

 (Don't tell anyone, but I plan to rewrite it.)

 Andrei

I just read the first section and already I'm impressed with it. Great job :) One little niggle though: At the end of the paragraph that explains the hello world's import statement, it says "Repeated imports of the same file are of no import." Sounds like a typo snuck in there.

That's no typo; that's a pun!
Aug 03 2009
parent Walter Bright <newshound1 digitalmars.com> writes:
Jarrett Billingsley wrote:
 That's no typo;

That's no moon!
Aug 03 2009
prev sibling next sibling parent Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
On Mon, Aug 3, 2009 at 7:40 PM, Robert Fraser<fraserofthenight gmail.com> wrote:
 Nick Sabalausky wrote:
 One little niggle though: At the end of the paragraph that explains the
 hello world's import statement, it says "Repeated imports of the same file
 are of no import." Sounds like a typo snuck in there.

Or a pun ;-P.

The mailing list lag is killing me.
Aug 03 2009
prev sibling parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
Nick Sabalausky wrote:
 "Andrei Alexandrescu" <SeeWebsiteForEmail erdani.org> wrote in message 
 news:h57mno$26gm$2 digitalmars.com...
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_programming_language_tdpl/

 (Don't tell anyone, but I plan to rewrite it.)

 Andrei

I just read the first section and already I'm impressed with it. Great job :) One little niggle though: At the end of the paragraph that explains the hello world's import statement, it says "Repeated imports of the same file are of no import." Sounds like a typo snuck in there.

It's a pun... Andrei
Aug 03 2009
prev sibling next sibling parent reply MIURA Masahiro <echochamber gmail.com> writes:
Andrei Alexandrescu wrote:
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_progra
ming_language_tdpl/ 

Thanks for sharing it! Typos: in section 1.1, there are inchPerFoot's and inchperfoot's.
Aug 03 2009
next sibling parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
MIURA Masahiro wrote:
 Andrei Alexandrescu wrote:
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_progra
ming_language_tdpl/ 

Thanks for sharing it! Typos: in section 1.1, there are inchPerFoot's and inchperfoot's.

Noted, thanks. Andrei
Aug 03 2009
prev sibling parent reply Pablo Ripolles <in-call gmx.net> writes:
MIURA Masahiro Wrote:

 Andrei Alexandrescu wrote:
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_progra
ming_language_tdpl/ 

Thanks for sharing it! Typos: in section 1.1, there are inchPerFoot's and inchperfoot's.

And, of course, the same goes for cmperinch's. Some other observations are the following: In section 1.2 you refer to prior "if" statements introduced in above samples, what samples? is there maybe a 0 chapte?r In section 1.4, subsection "Building a Vocabulary" it's not very clear what stdio.byLine is... I mean, it says nothing about how to feed the text to the program. Also in subsection "Counting Frequencies. Lambda Functions" there appears a call to "splitter" function, isn't it named "split" instead? Besides the hamlet.txt URL doesn't work already, maybe a bit of indirection here would also be appreciated... In section 1.5, maybe I miss the reason of importing "std.range". In section 1.6, "stats" is a variable and stats.d is the name of the file/module, shouldn't stats.d be renamed to stat.d so that "stat.Max" makes sense and so the name of the program becomes stat and it's invoked that way in the command line? Or maybe rename "stat.Max" to "stats.Max"? Besides, aren't you talking firstly about Min? Why not to illustrate the thing with "stat.Min" instead of "stat.Max"? In the references to different other chapters the word sometimes appears capitalized and sometimes doesn't. Cheers!
Aug 04 2009
parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
Pablo Ripolles wrote:
 MIURA Masahiro Wrote:
 
 Andrei Alexandrescu wrote:
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_progra
ming_language_tdpl/ 

Typos: in section 1.1, there are inchPerFoot's and inchperfoot's.

And, of course, the same goes for cmperinch's. Some other observations are the following: In section 1.2 you refer to prior "if" statements introduced in above samples, what samples? is there maybe a 0 chapte?r In section 1.4, subsection "Building a Vocabulary" it's not very clear what stdio.byLine is... I mean, it says nothing about how to feed the text to the program. Also in subsection "Counting Frequencies. Lambda Functions" there appears a call to "splitter" function, isn't it named "split" instead? Besides the hamlet.txt URL doesn't work already, maybe a bit of indirection here would also be appreciated... In section 1.5, maybe I miss the reason of importing "std.range". In section 1.6, "stats" is a variable and stats.d is the name of the file/module, shouldn't stats.d be renamed to stat.d so that "stat.Max" makes sense and so the name of the program becomes stat and it's invoked that way in the command line? Or maybe rename "stat.Max" to "stats.Max"? Besides, aren't you talking firstly about Min? Why not to illustrate the thing with "stat.Min" instead of "stat.Max"? In the references to different other chapters the word sometimes appears capitalized and sometimes doesn't. Cheers!

Thanks, Pablo. Andrei
Aug 04 2009
prev sibling parent reply Jos van Uden <jvu nospam.nl> writes:
Andrei Alexandrescu wrote:
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_progra
ming_language_tdpl/ 
 
 
 (Don't tell anyone, but I plan to rewrite it.)
 
 Andrei

Is this supposed to compile? I keep getting error messages. import std.stdio, std.string; void main() { uint[string] dic; foreach (line; stdin.byLine) { // Break sentence into words string[] words = split(strip(line)); // Add each word in the sentence to the vocabulary foreach (word; words) { if (word in dic) continue; // nothing to do uint newID = dic.length; dic[word] = newID; writeln(newID, '\t', word); } } } test.d(7): Error: function std.string.split (immutable(char)[] s) does not match parameter types (char[]) test.d(7): Error: cannot implicitly convert expression (strip(line)) of type char[] to immutable(char)[] test.d(7): Error: expected 2 function arguments, not 1 I've changed the code to: import std.stdio; import std.string; void main() { uint[string] dic; foreach (line; stdin.byLine) { string[] words = split(strip!(string)(line)); foreach (word; words) { if (word in dic) { continue; } uint newID = dic.length; dic[word] = newID; writeln(newID, '\t', word); } } } but I still get an error... test.d(12): Error: cannot implicitly convert expression (line) of type char[] to immutable(char)[]
Aug 08 2009
parent reply Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
On Sat, Aug 8, 2009 at 8:44 PM, Jos van Uden<jvu nospam.nl> wrote:
 Andrei Alexandrescu wrote:
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_pro=


 (Don't tell anyone, but I plan to rewrite it.)

 Andrei

Is this supposed to compile? I keep getting error messages. import std.stdio, std.string; void main() { =A0 uint[string] dic; =A0 foreach (line; stdin.byLine) { =A0 =A0 =A0// Break sentence into words =A0 =A0 =A0string[] words =3D split(strip(line)); =A0 =A0 =A0// Add each word in the sentence to the vocabulary =A0 =A0 =A0foreach (word; words) { =A0 =A0 =A0 =A0 if (word in dic) continue; // nothing to do =A0 =A0 =A0 =A0 uint newID =3D dic.length; =A0 =A0 =A0 =A0 dic[word] =3D newID; =A0 =A0 =A0 =A0 writeln(newID, '\t', word); =A0 =A0 =A0} =A0 } } test.d(7): Error: function std.string.split (immutable(char)[] s) does no=

 match parameter types (char[])
 test.d(7): Error: cannot implicitly convert expression (strip(line)) of t=

 char[] to immutable(char)[]
 test.d(7): Error: expected 2 function arguments, not 1


 I've changed the code to:

 import std.stdio;
 import std.string;

 void main() {

 =A0 =A0uint[string] dic;
 =A0 =A0foreach (line; stdin.byLine) {
 =A0 =A0 =A0 =A0string[] words =3D split(strip!(string)(line));
 =A0 =A0 =A0 =A0foreach (word; words) {
 =A0 =A0 =A0 =A0 =A0 =A0if (word in dic) {
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0continue;
 =A0 =A0 =A0 =A0 =A0 =A0}
 =A0 =A0 =A0 =A0 =A0 =A0uint newID =3D dic.length;
 =A0 =A0 =A0 =A0 =A0 =A0dic[word] =3D newID;
 =A0 =A0 =A0 =A0 =A0 =A0writeln(newID, '\t', word);
 =A0 =A0 =A0 =A0}
 =A0 =A0}
 }

 but I still get an error...

 test.d(12): Error: cannot implicitly convert expression (line) of type
 char[] to immutable(char)[]

It's not documented, but the .byLine method returns char[], not immutable(char)[] (string). This is because the 'line' variable is reused on each new line of the input, to improve speed. I think to solved this, you should use: auto words =3D split(strip(line.idup)); The .idup creates a new duplicate of the line that is immutable. Now, why split() doesn't take a const(char)[] is beyond me..
Aug 08 2009
parent Jos van Uden <jvu nospam.nl> writes:
Jarrett Billingsley wrote:
 On Sat, Aug 8, 2009 at 8:44 PM, Jos van Uden<jvu nospam.nl> wrote:
 Andrei Alexandrescu wrote:
 http://www.reddit.com/r/programming/comments/975ng/diving_into_the_d_programming_language_tdpl/

 (Don't tell anyone, but I plan to rewrite it.)

 Andrei

import std.stdio, std.string; void main() { uint[string] dic; foreach (line; stdin.byLine) { // Break sentence into words string[] words = split(strip(line)); // Add each word in the sentence to the vocabulary foreach (word; words) { if (word in dic) continue; // nothing to do uint newID = dic.length; dic[word] = newID; writeln(newID, '\t', word); } } } test.d(7): Error: function std.string.split (immutable(char)[] s) does not match parameter types (char[]) test.d(7): Error: cannot implicitly convert expression (strip(line)) of type char[] to immutable(char)[] test.d(7): Error: expected 2 function arguments, not 1 I've changed the code to: import std.stdio; import std.string; void main() { uint[string] dic; foreach (line; stdin.byLine) { string[] words = split(strip!(string)(line)); foreach (word; words) { if (word in dic) { continue; } uint newID = dic.length; dic[word] = newID; writeln(newID, '\t', word); } } } but I still get an error... test.d(12): Error: cannot implicitly convert expression (line) of type char[] to immutable(char)[]

It's not documented, but the .byLine method returns char[], not immutable(char)[] (string). This is because the 'line' variable is reused on each new line of the input, to improve speed. I think to solved this, you should use: auto words = split(strip(line.idup)); The .idup creates a new duplicate of the line that is immutable. Now, why split() doesn't take a const(char)[] is beyond me..

Yep, that solves it, in both cases. Jos
Aug 08 2009