Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
May 31, 2013 how to use shared keyword in 2.063 version? | ||||
---|---|---|---|---|
| ||||
Hello! I'm trying to use following code: <======================================> //... class A { private { int m_someVar = 10; } public { this() { } } } int main(string[] args) { shared A a = null; a = new shared(A)(); // error. return 0; } <======================================> And on compile time, the compiler says "Error: non-shared method main.A.this is not callable using a shared object". How can I use an objects as shared, which classes were not defined with "synchronized" or "shared" keyword? Thanks. |
May 31, 2013 Re: how to use shared keyword in 2.063 version? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrey | On Friday, 31 May 2013 at 21:01:49 UTC, Andrey wrote:
> Hello!
>
> I'm trying to use following code:
>
> <======================================>
> //...
>
> class A
> {
> private
> {
> int m_someVar = 10;
> }
>
> public
> {
> this()
> {
> }
> }
> }
>
>
> int main(string[] args)
> {
> shared A a = null;
> a = new shared(A)(); // error.
>
> return 0;
> }
> <======================================>
>
> And on compile time, the compiler says "Error: non-shared method main.A.this is not callable using a shared object".
> How can I use an objects as shared, which classes were not defined with "synchronized" or "shared" keyword?
>
>
> Thanks.
To create a shared object you need shared this ctor.
immutable this() for immutable,
and const this() for const.
Check out the change log. #2 on the list.
|
June 01, 2013 Re: how to use shared keyword in 2.063 version? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Anthony Goins | On Friday, May 31, 2013 23:26:19 Anthony Goins wrote:
> To create a shared object you need shared this ctor.
>
> immutable this() for immutable,
>
> and const this() for const.
>
> Check out the change log. #2 on the list.
Either that or you create it as thread-local and cast to shared.
- Jonathan M Davis
|
June 01, 2013 Re: how to use shared keyword in 2.063 version? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Saturday, 1 June 2013 at 00:58:00 UTC, Jonathan M Davis wrote:
> On Friday, May 31, 2013 23:26:19 Anthony Goins wrote:
>> To create a shared object you need shared this ctor.
>>
>> immutable this() for immutable,
>>
>> and const this() for const.
>>
>> Check out the change log. #2 on the list.
>
> Either that or you create it as thread-local and cast to shared.
>
> - Jonathan M Davis
Does it mean, that to create shared Mutex or shared Socket for example, I have to use next construction:
shared Socket socket = cast(shared Mutex)(new Socket());
shared Mutex m = cast(shared Mutex)(new Mutex());
??
|
June 01, 2013 Re: how to use shared keyword in 2.063 version? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrey | On Saturday, June 01, 2013 10:03:28 Andrey wrote:
> On Saturday, 1 June 2013 at 00:58:00 UTC, Jonathan M Davis wrote:
> > On Friday, May 31, 2013 23:26:19 Anthony Goins wrote:
> >> To create a shared object you need shared this ctor.
> >>
> >> immutable this() for immutable,
> >>
> >> and const this() for const.
> >>
> >> Check out the change log. #2 on the list.
> >
> > Either that or you create it as thread-local and cast to shared.
> >
> > - Jonathan M Davis
>
> Does it mean, that to create shared Mutex or shared Socket for example, I have to use next construction:
>
> shared Socket socket = cast(shared Mutex)(new Socket());
>
> shared Mutex m = cast(shared Mutex)(new Mutex());
Given the lack of shared constructors, yes - though you should probably write it more like
auto mutex = cast(shared)new Mutex;
auto socket = cast(shared)new Socket;
since then you don't have to worry about accidentally changing the base type (like you did with the Socket), and you don't have to write the type multiple times.
- Jonathan M Davis
|
June 03, 2013 Re: how to use shared keyword in 2.063 version? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Saturday, 1 June 2013 at 16:00:58 UTC, Jonathan M Davis wrote:
> On Saturday, June 01, 2013 10:03:28 Andrey wrote:
>> On Saturday, 1 June 2013 at 00:58:00 UTC, Jonathan M Davis wrote:
>> > On Friday, May 31, 2013 23:26:19 Anthony Goins wrote:
>> >> To create a shared object you need shared this ctor.
>> >>
>> >> immutable this() for immutable,
>> >>
>> >> and const this() for const.
>> >>
>> >> Check out the change log. #2 on the list.
>> >
>> > Either that or you create it as thread-local and cast to shared.
>> >
>> > - Jonathan M Davis
>>
>> Does it mean, that to create shared Mutex or shared Socket for
>> example, I have to use next construction:
>>
>> shared Socket socket = cast(shared Mutex)(new Socket());
>>
>> shared Mutex m = cast(shared Mutex)(new Mutex());
>
> Given the lack of shared constructors, yes - though you should probably write
> it more like
>
> auto mutex = cast(shared)new Mutex;
> auto socket = cast(shared)new Socket;
>
> since then you don't have to worry about accidentally changing the base type
> (like you did with the Socket), and you don't have to write the type multiple
> times.
>
> - Jonathan M Davis
Thank you! Now my app works fine.
|
Copyright © 1999-2021 by the D Language Foundation