Thread overview | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
January 29, 2012 A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Hello, I posted there a few weeks ago about a tutorial on D templates I put in github: https://github.com/PhilippeSigaud/D-templates-tutorial/blob/master/dtemplates.pdf Since then, I received numerous mails, issues, advices and thanks. Thank to you all! Following the ideas found in TDPL, I wrote a D script to extract and test all the samples presented in the document. I'm proud to say that right now, all named (module XXX;) samples compile, which makes for more than 200 modules tested! Indeed, you could see the entire document as a huge package documentation :) I also added explanations, new sections and a new appendix in D templates resources. As before, do not hesitate to read, comment, post and even send pull requests, I'm all ears. Bye, Philippe |
January 30, 2012 Re: A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | On 1/29/12 2:44 PM, Philippe Sigaud wrote:
> Hello,
>
> I posted there a few weeks ago about a tutorial on D templates I put in github:
>
> https://github.com/PhilippeSigaud/D-templates-tutorial/blob/master/dtemplates.pdf
>
> Since then, I received numerous mails, issues, advices and thanks. Thank to you all!
>
> Following the ideas found in TDPL, I wrote a D script to extract and test all the samples
> presented in the document. I'm proud to say that right now, all named (module XXX;) samples
> compile, which makes for more than 200 modules tested! Indeed, you could see the entire document
> as a huge package documentation :)
>
> I also added explanations, new sections and a new appendix in D templates resources.
>
> As before, do not hesitate to read, comment, post and even send pull requests, I'm all ears.
>
> Bye,
>
> Philippe
Great! Just give me the green light when you feel this is reddit-publishable.
Andrei
|
January 30, 2012 Re: A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | On Mon, Jan 30, 2012 at 06:16, Andrei Alexandrescu <SeeWebsiteForEmail@erdani.org> wrote: > Great! Just give me the green light when you feel this is reddit-publishable. That should be OK now, thanks. |
January 30, 2012 Re: A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | On 1/29/12 11:56 PM, Philippe Sigaud wrote: > On Mon, Jan 30, 2012 at 06:16, Andrei Alexandrescu > <SeeWebsiteForEmail@erdani.org> wrote: >> Great! Just give me the green light when you feel this is >> reddit-publishable. > > That should be OK now, thanks. Let it ride! http://www.reddit.com/r/programming/comments/p2qfd/d_templates_a_tutorial_pdfgoogle_preview/ Andrei |
January 30, 2012 Re: A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | On Sunday, 29 January 2012 at 20:44:00 UTC, Philippe Sigaud wrote:
> Hello,
>
> I posted there a few weeks ago about a tutorial on D templates I put in github:
>
> https://github.com/PhilippeSigaud/D-templates-tutorial/blob/master/dtemplates.pdf
> .
> .
> .
> As before, do not hesitate to read, comment, post and even send pull requests, I'm all ears.
>
> Bye,
>
> Philippe
Neat. I will start reading tonight.
Anything else I'll wrote here.
|
January 30, 2012 Re: A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | On 01/29/2012 12:44 PM, Philippe Sigaud wrote:
> Hello,
>
> I posted there a few weeks ago about a tutorial on D templates I put in github:
>
> https://github.com/PhilippeSigaud/D-templates-tutorial/blob/master/dtemplates.pdf
>
> Since then, I received numerous mails, issues, advices and thanks. Thank to you all!
>
> Following the ideas found in TDPL, I wrote a D script to extract and test all the samples
> presented in the document. I'm proud to say that right now, all named (module XXX;) samples
> compile, which makes for more than 200 modules tested! Indeed, you could see the entire document
> as a huge package documentation :)
>
> I also added explanations, new sections and a new appendix in D templates resources.
>
> As before, do not hesitate to read, comment, post and even send pull requests, I'm all ears.
>
> Bye,
>
> Philippe
First of all thank you so much for this wonderful book!
I would like to ask for a little enhancement regarding mixin templates. see snippet.
The second mixin template "RandomAccessList" is slightly OT 'cause Ranges are also touched, but I think this could be very interesting stuff.
A third mixin template example which comes in mind is the Publisher subscriber pattern template.
snip.
import std.stdio;
import std.cstream;
void main(string[] args)
{
// showing mixin template scope.
auto bar = new Bar();
writeln(bar.onClick());
din.getc();
}
mixin template FooMixin()
{
void init()
{
}
string onClick()
{
return "Clicked";
}
}
class Foo
{
mixin FooMixin;
}
class Bar : Foo
{
}
// Something more interesting : Mixin templates and ranges
mixin template RandomAccessList()
{
alias typeof(this) Me;
//Either
static private Me[] MeArray;
//OR
private Me next, prev;
}
interface IRandomAccessRange {}
class Contacts : IRandomAccessRange // Contacts not Contact !
{
mixin RandomAccessList;
}
|
January 30, 2012 Re: A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Posted in reply to bls | On Mon, Jan 30, 2012 at 13:07, bls <bizprac@orange.fr> wrote: > First of all thank you so much for this wonderful book! Thanks! > I would like to ask for a little enhancement regarding mixin templates. see snippet. Yes, this section is still bit short. But, what enhancement are you talking about? The FooMixin template? > The second mixin template "RandomAccessList" is slightly OT 'cause Ranges are also touched, but I think this could be very interesting stuff. Yes indeed. Can I ask you for a small explanatory text? (And your real name, if you want to be cited under it) > A third mixin template example which comes in mind is the Publisher subscriber pattern template. I'll add it also. Again, I'd welcome any explanatory text. |
January 30, 2012 Re: A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | Hi Philippe, Ok, something more interesting it combines suggestion 2) and 3). Still a quick hack, not much tested, but I think the intention is clear. The snippets show how a publisher subscriber pattern can be mixed in. Further it shows how a simple class could become a stack, queue, list etc. The FooMixin was just to show (due to a question on D.Learn), how we can mimic partial C# classes. import std.stdio; import std.cstream; import std.functional; void main(string[] args) { auto p = new PersonStack(); p.add("Hans", 42);// uses MIStack push(), MISubScriber notify() din.getc(); } mixin template MIPublisher() { alias void delegate(Object sender, string event) CallBack; CallBack[] callBacks; public void register(CallBack callBack) { callBacks ~= callBack; } // There is for sure a smarter solution to remove public void unRegister(CallBack callBack) { for ( int i=0 ; !i<callBacks.length ; i++ ) { if (callBacks[i] == callBack) { callBacks = callBacks[0..i] ~ callBacks[i+1..callBacks.length]; --i; } } } // Notify ALL Subscribers public void notify(string evt) { foreach ( CallBack callBack ; callBacks ) { callBack( this, evt ); } } } mixin template MIStack() { alias typeof(this) Me; //alias Me[] Us; static Me[] stack; public: bool empty() { return stack.length == 0; } int count() { return stack.length; } void push(Me element) { stack ~= element; } Me pop() { Me element = peek(); stack.length = stack.length - 1; return element; } Me peek() { if ( stack.length == 0 ) { // throw error } Me element = stack[stack.length-1]; return element; } } class PersonStack { private string name; private int age; // Our Mixins mixin MIStack; mixin MIPublisher; this() { // Register some subscribers (MIPublisher register function) // I have used free functions to show the useful toDelegate() register( toDelegate(&DrawPersonBarChart) ); register( toDelegate(&DrawPersonPieChart) ); } // Push void add(string name, int age) { this.name = name; this.age = age; // Push Person (MIStack push function.) push(this); // Notify all subscribers notify("Push"); } // remove() } //Subscriber free functions void DrawPersonBarChart(Object sender, string msg) { writeln("Bar " ~ msg); } void DrawPersonPieChart(Object sender, string msg) { writeln("Pie " ~ msg); } |
January 30, 2012 Re: A tutorial on D templates: updates | ||||
---|---|---|---|---|
| ||||
Posted in reply to bls | On 01/30/2012 01:14 PM, bls wrote: > Hi Philippe, slightly better .. class PersonStack { private string name; private int age; // Our Mixins mixin MIStack; mixin MIPublisher; this() { // Register some subscribers (MIPublisher register function) // I have used free functions to show the useful toDelegate() register( toDelegate(&DrawPersonBarChart) ); register( toDelegate(&DrawPersonPieChart) ); } // Push void add(string name, int age) { auto p = new PersonStack(); p.name = name; p.age = age; // Add Person (MIStack push function.) push(p); // Notify all subscribers notify("Push"); } void remove() { auto el = pop(); notify("Pop " ~ el.name ); } } |
Copyright © 1999-2021 by the D Language Foundation