January 27, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to ref2401 | On Tuesday, 27 January 2015 at 09:01:39 UTC, ref2401 wrote:
> For several times I've met struct(or static struct) usage in Phobos for singleton pattern implementation. Unfortunately now i can remember only core.runtime.Runtime.
> So I've got a question. Why do Phobos guys use struct or static struct for or singleton pattern implementation? Why don't use static final class for this purpose?
You probably saw static member function.
Please take the following with a big grain of salt as I took it out of my head:
We can divide the D static keyword usage into 3 types:
1. static variable
struct A{int a} // no static before declaration
static A s; //note that static is used for struct variable storage class (lifetime)
static int b;
etc.
2. static declaration
static struct A{int a}; //static used for context unnesting
static int fun(){}; // static used also for removing scope context
etc.
3. static if
static if(compile_time_cond)
{
//this section of code will be taken into the binary, used for meta programming
}
I don't think there is much (if any) use of static (type 1) for singleton.
Piotrek
|
January 27, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Piotrek | On 01/27/2015 08:58 AM, Piotrek wrote: Nice list. :) > 1. static variable > > struct A{int a} // no static before declaration > static A s; //note that static is used for struct variable storage class > (lifetime) > > static int b; > etc. > > 2. static declaration > > static struct A{int a}; //static used for context unnesting > static int fun(){}; // static used also for removing scope context Of course that includes static member functions, where the 'this' pointer is removed. Actually, "static opCall" is kind of different because it makes the type itself callable. > > etc. > > 3. static if > > static if(compile_time_cond) > { > //this section of code will be taken into the binary, used for meta > programming > } Another use of 'static' that means "at compile time": static assert 4. Module initialization and deinitialization: static this shared static this static ~this shared static ~this 5. Module import: static import std.stdio; Ali |
January 27, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Piotrek | On 01/27/2015 08:33 AM, Piotrek wrote: >> Non-static means nested. > > Hmm,this can be misleading. Nesting in structs doesn't introduce context > pointer. You must be thinking of structs nested inside user-defined types. Structs that are nested inside functions do have the context pointer. Ali |
January 27, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Tuesday, 27 January 2015 at 18:24:29 UTC, Ali Çehreli wrote:
> On 01/27/2015 08:33 AM, Piotrek wrote:
>
> >> Non-static means nested.
> >
> > Hmm,this can be misleading. Nesting in structs doesn't
> introduce context
> > pointer.
>
> You must be thinking of structs nested inside user-defined types. Structs that are nested inside functions do have the context pointer.
>
> Ali
What you wrote about the structs is true. However I was referring to other thing. I just wanted to emphasize (with my poor English) that also classes and structs *nested in struct* doesn't contain the additional context pointer. As opposed to class nested in class.
Then I think we'd better not say that non-static means nested.
Piotrek
|
January 27, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Tuesday, 27 January 2015 at 18:18:02 UTC, Ali Çehreli wrote:
> On 01/27/2015 08:58 AM, Piotrek wrote:
>
> Nice list. :)
>
> > 1. static variable
> >
> > struct A{int a} // no static before declaration
> > static A s; //note that static is used for struct variable
> storage class
> > (lifetime)
> >
> > static int b;
> > etc.
> >
> > 2. static declaration
> >
> > static struct A{int a}; //static used for context unnesting
> > static int fun(){}; // static used also for removing scope
> context
>
> Of course that includes static member functions, where the 'this' pointer is removed.
>
> Actually, "static opCall" is kind of different because it makes the type itself callable.
>
> >
> > etc.
> >
> > 3. static if
> >
> > static if(compile_time_cond)
> > {
> > //this section of code will be taken into the binary, used
> for meta
> > programming
> > }
>
> Another use of 'static' that means "at compile time":
>
> static assert
>
> 4. Module initialization and deinitialization:
>
> static this
> shared static this
>
> static ~this
> shared static ~this
>
> 5. Module import:
>
> static import std.stdio;
>
> Ali
Thanks for comments, Mr. Professor. On duty as usual ;)
Let me here thank for your book which I've been reading for some time.
Piotrek
|
January 27, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Piotrek | On 01/27/2015 01:44 PM, Piotrek wrote: > Let me here thank for your book I am glad that it is useful. > which I've been reading for some time. Me too! I browsed the index section to remember the other uses of 'static'. :) Ali |
January 28, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Piotrek | On 01/27/2015 01:33 PM, Piotrek wrote: > On Tuesday, 27 January 2015 at 18:24:29 UTC, Ali Çehreli wrote: >> On 01/27/2015 08:33 AM, Piotrek wrote: >> >> >> Non-static means nested. >> > >> > Hmm,this can be misleading. Nesting in structs doesn't >> introduce context >> > pointer. Oh, I misread what you wrote. Sorry... > classes and structs *nested in struct* doesn't contain the additional > context pointer. As opposed to class nested in class. > > Then I think we'd better not say that non-static means nested. > > Piotrek Makes sense. Ali |
July 15, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to ref2401 | In simple words, Singleton is a pattern and not a keyword. The Singleton pattern has several advantages over static classes. A singleton allows a class for which there is just one, persistent instance across the lifetime of an application. That means, it created a single instance and that instance (reference to that instance) can be passed as a parameter to other methods, and treated as a normal object. While a static class allows only static methods and and you cannot pass static class as parameter. More about..... http://net-informations.com/faq/netfaq/singlestatic.htm Lee |
November 20, 2015 Re: static class vs. static struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to ref2401 | On Monday, 26 January 2015 at 14:02:54 UTC, ref2401 wrote: > What's the difference between static class and static struct? > What should i use? In simple words, Singleton is a pattern and not a keyword. The Singleton pattern has several advantages over static classes. A singleton allows a class for which there is just one, persistent instance across the lifetime of an application. That means, it created a single instance and that instance (reference to that instance) can be passed as a parameter to other methods, and treated as a normal object. While a static class allows only static methods and and you cannot pass static class as parameter. Full Source: http://net-informations.com/faq/netfaq/singlestatic.htm Vyar |
Copyright © 1999-2021 by the D Language Foundation