digitalmars.D - TDPL goes out for preliminary review
- Andrei Alexandrescu (5/5) Dec 16 2009 TDPL, currently counting 398 pages including a small index, has entered
- Robert Clipsham (2/7) Dec 16 2009 Congratulations! I can't wait to receive my copy in a few months time :)
- merlin (13/17) Dec 16 2009 Congratulations. I must profess that over the last couple of months
- retard (4/21) Dec 16 2009 Just like D1 solved the problem of metaprogramming, D2 will solve many,
- Andrei Alexandrescu (15/37) Dec 16 2009 Keeping my fingers crossed regarding that one :o).
- grauzone (5/13) Dec 16 2009 There's a guy on the NG who posts once in a while how broken shared is
- Graham St Jack (3/19) Dec 16 2009 I'm certainly in that category. I will be trying (soon) to put a post
- Graham St Jack (44/65) Dec 17 2009 Here is my attempt to set out my problems with the "shared" keyword as i...
- Michel Fortin (62/65) Dec 18 2009 In my observation, just like the most useful string type is defined as
- dsimcha (5/12) Dec 16 2009 I think for this to happen, there needs to be a tutorial somewhere expla...
- Graham St Jack (5/19) Dec 16 2009 I agree. The whole thing is very confused right now, and certainly
- Jason House (4/13) Dec 16 2009 I posted several shared issues to the NG a few days ago and got no repli...
- Andrei Alexandrescu (6/18) Dec 16 2009 Thanks, Jason. I did see those messages but I didn't want to dilute
- Jason House (18/43) Dec 23 2009 I have reproduced and reported most of the issue I had hit with shared. ...
- Jason House (4/14) Dec 23 2009 I'll add to that list:
- Andrei Alexandrescu (5/52) Dec 23 2009 Great. I just got word from Walter that he fixed a lot of shared bugs
- Denis Koroskin (39/94) Dec 24 2009 I'll add my experience with shared/local separation.
- Jason House (6/12) Dec 24 2009 That was my first experience with shared as well. I submitted a ticket ...
- Jason House (18/36) Dec 24 2009 The commit logs show that bugzilla 3641 was fixed. I'd appreciate it if...
- Don (2/7) Dec 25 2009 The stack trace patch is in.
- Jason House (3/12) Dec 28 2009 Maybe I'm mistaken, but I thought the stack traces only applied to templ...
- Don (2/16) Dec 28 2009 Yes.
- bearophile (4/4) Dec 30 2009 Andrei Alexandrescu:
TDPL, currently counting 398 pages including a small index, has entered editorial review this morning. The book draft includes everything except the threading chapter. I've marked the personal record of writing one chapter in one night :o). Andrei
Dec 16 2009
On 16/12/09 19:24, Andrei Alexandrescu wrote:TDPL, currently counting 398 pages including a small index, has entered editorial review this morning. The book draft includes everything except the threading chapter. I've marked the personal record of writing one chapter in one night :o). AndreiCongratulations! I can't wait to receive my copy in a few months time :)
Dec 16 2009
Andrei Alexandrescu wrote:TDPL, currently counting 398 pages including a small index, has entered editorial review this morning. The book draft includes everything except the threading chapter. I've marked the personal record of writing one chapter in one night :o).Congratulations. I must profess that over the last couple of months I've been feeling a big uptick of enthusiasm about D2. It is really quit an amazing language and with library and tool support should be I did go through a period of skepticism about D leadership when I realized that D2 was not really backwards compatible with D1 and had trouble understanding why llvm hasn't played a bigger role in the long term planning of the project. I have since come around to the point of view that my fears were mostly misplaced...D2 is something quite special and I think ultimately will take hold. Ok, enough gushing :-). merlin
Dec 16 2009
Wed, 16 Dec 2009 16:55:12 -0500, merlin wrote:Andrei Alexandrescu wrote:Just like D1 solved the problem of metaprogramming, D2 will solve many, if not most, multi-core threading problems with the immutable and thread local data types.TDPL, currently counting 398 pages including a small index, has entered editorial review this morning. The book draft includes everything except the threading chapter. I've marked the personal record of writing one chapter in one night :o).Congratulations. I must profess that over the last couple of months I've been feeling a big uptick of enthusiasm about D2. It is really quit an amazing language and with library and tool support should be I did go through a period of skepticism about D leadership when I realized that D2 was not really backwards compatible with D1 and had trouble understanding why llvm hasn't played a bigger role in the long term planning of the project. I have since come around to the point of view that my fears were mostly misplaced...D2 is something quite special and I think ultimately will take hold.
Dec 16 2009
retard wrote:Wed, 16 Dec 2009 16:55:12 -0500, merlin wrote:Keeping my fingers crossed regarding that one :o). Thank you for your vote of confidence, it is indeed quite a turnaround from people's (and, in fact, some of my) feelings of a few months ago. We've experienced a long, unprecedented, and completely serendipitous windfall of productivity since around the time Don joined the compiler work. I guess there is a correlation there :o). It's just been one lucky strike after another. But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up. AndreiAndrei Alexandrescu wrote:Just like D1 solved the problem of metaprogramming, D2 will solve many, if not most, multi-core threading problems with the immutable and thread local data types.TDPL, currently counting 398 pages including a small index, has entered editorial review this morning. The book draft includes everything except the threading chapter. I've marked the personal record of writing one chapter in one night :o).Congratulations. I must profess that over the last couple of months I've been feeling a big uptick of enthusiasm about D2. It is really quit an amazing language and with library and tool support should be I did go through a period of skepticism about D leadership when I realized that D2 was not really backwards compatible with D1 and had trouble understanding why llvm hasn't played a bigger role in the long term planning of the project. I have since come around to the point of view that my fears were mostly misplaced...D2 is something quite special and I think ultimately will take hold.
Dec 16 2009
Andrei Alexandrescu wrote:But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up.There's a guy on the NG who posts once in a while how broken shared is and how he has to use __gshared instead. His threads are being pretty much ignored. And now?Andrei
Dec 16 2009
On Thu, 17 Dec 2009 01:13:36 +0100, grauzone wrote:Andrei Alexandrescu wrote:I'm certainly in that category. I will be trying (soon) to put a post together that sets out my issues with 'shared'.But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up.There's a guy on the NG who posts once in a while how broken shared is and how he has to use __gshared instead. His threads are being pretty much ignored. And now?Andrei
Dec 16 2009
On Thu, 17 Dec 2009 03:04:59 +0000, Graham St Jack wrote:On Thu, 17 Dec 2009 01:13:36 +0100, grauzone wrote:Here is my attempt to set out my problems with the "shared" keyword as it now stands. First the good part: writing multi-threaded programs is not easy, and anything the language and compiler can do to make it easier is good. Now for the way I approach writing multi-threaded programs: Keep threads apart from each other wherever possible. Specifically, don't let them access or modify the same data except in well-understood and carefully controlled ways. My preferred way of doing this is for threads to share only a very small amount of data, all of which is mutex protected, and carefully designed to be safe to access by multiple threads. My favourite kind of these is a templated queue (like a "go" channel). Any data passed out from such a "shareable object" has to be either immutable or cloned, so that each thread can rely on its data not being trampled on by other threads. And my wish-list: What I would like is for D to provide a clean way for me to be able to say "this object and all its methods are nice and safe to access from multiple threads", and to also say "all instances of this type are immutable". And I also want the compiler to tell me if it thinks I have multiple threads accessing data in an unsafe way. Finally my issues with D as it stands: Immutable or const objects are a real pain because I can't have a mutable reference to them. Rebindable doesn't seem to work, and I haven't been able to make a version that works well enough. Immutable types don't add any value because you have to keep stating that objects of them are immutable everywhere. Having first-class immutable types would make it MUCH easier to reap the benefits of immutable data. I can't currently see a use for the shared keyword as it stands. It seems to me that what is needed is a keyword more like "shareable", meaning that this object (or data or function?) can be safely accessed by multiple threads. It should be an error to access a non-shareable object with multiple threads. It should also be an error to claim that something is shareable unless it meets some well thought out criteria that the compiler can check. I haven't thought these out yet, but some candidates I like the look of are: * All outputs from the object must be immutable or passed by value (cloned). * All externally accessible methods must be synchronized on the object's monitor. I'm happy that some sort of back-door override like __gshared has to be there for those cases that are actually ok, but only because of some grubby detail that the compiler can't figure out.Andrei Alexandrescu wrote:I'm certainly in that category. I will be trying (soon) to put a post together that sets out my issues with 'shared'.But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up.There's a guy on the NG who posts once in a while how broken shared is and how he has to use __gshared instead. His threads are being pretty much ignored. And now?Andrei
Dec 17 2009
On 2009-12-17 23:38:58 -0500, Graham St Jack <Graham.StJack internode.on.net> said:Immutable or const objects are a real pain because I can't have a mutable reference to them. Rebindable doesn't seem to work, and I haven't been able to make a version that works well enough.In my observation, just like the most useful string type is defined as immutable(char)[] and thus is rebindable, most of the immutable objects I need also need to be rebindable. Rebindable being the most needed case, it means that I almost always need to write Rebindable!(immutable Object) for my immutable or const objects, which is a pain. I've been wondering yesterday if being rebindable shouldn't just be the default for objects. The rule would be that reference types are rebindable unless marked with final. So you would have: const(Object) o1; // rebindable const(final Object) o2; // not rebindable immutable(Object) o3; // rebindable immutable(final Object) o4; // not rebindable Final would have no effect on non-reference types (anything but classes and interfaces). I can see how it isn't necessarily coherent with the rest of the const system for value types, but reference types are different from value types too. In essence, I just want the most frequently used type (a rebindable object) to be easier to write than Rebindable!(immutable Object), so I'm open to other ideas too. As for a Rebindable that works, I've made one. Unfortunately, use of alias this is broken because of this bug <http://d.puremagic.com/issues/show_bug.cgi?id=3626>, so for now you need to always use the "get" parameter for comparing to null and other things that don't start with a dot. private template Rebindable(T) if (is(T == class) || isArray!(T)) { static if (!is(T X == const(U), U) && !is(T X == immutable(U), U)) { alias T Rebindable; } else static if (isArray!(T)) { alias const(ElementType!(T))[] Rebindable; } else { struct Rebindable { private U stripped; void opAssign(T another) { stripped = cast(U) another; } this(T value) { this = value; } T get() const { return cast(T)stripped; } T opDot() const { return get; } } } } -- Michel Fortin michel.fortin michelf.com http://michelf.com/
Dec 18 2009
== Quote from Andrei Alexandrescu (SeeWebsiteForEmail erdani.org)'s articleBut let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up. AndreiI think for this to happen, there needs to be a tutorial somewhere explaining what shared is supposed to do (there were so many ideas thrown around that I don't remember them all and don't know which ones got adopted), and how much of it is already implemented.
Dec 16 2009
On Thu, 17 Dec 2009 00:51:48 +0000, dsimcha wrote:== Quote from Andrei Alexandrescu (SeeWebsiteForEmail erdani.org)'s articleI agree. The whole thing is very confused right now, and certainly everything I try in my code doesn't work out. The only way I can use threads tight now is to avoid use of shared at all. If anyone knows how it is supposed to work now, please write out a description.But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up. AndreiI think for this to happen, there needs to be a tutorial somewhere explaining what shared is supposed to do (there were so many ideas thrown around that I don't remember them all and don't know which ones got adopted), and how much of it is already implemented.
Dec 16 2009
Andrei Alexandrescu Wrote:But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up.I posted several shared issues to the NG a few days ago and got no replies. Most of it was about poor error messages (both misleading text and missing file/line numbers). I should do proper bugzilla entries but haven't tinkered with D much since. As always, this post comes from my phone instead of a proper computer, or else I'd provide a link or do the bugzilla entries while I'm thinking of it. IIRC, the most troublesome error happened when I created "shared this(){...}" constructor and no information on where it caused errors.Andrei
Dec 16 2009
Jason House wrote:Andrei Alexandrescu Wrote:Thanks, Jason. I did see those messages but I didn't want to dilute focus back when you posted them. If you could put together bugzilla entries as you try things, that would be great. The shared constructor I'll experiment with first. AndreiBut let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up.I posted several shared issues to the NG a few days ago and got no replies. Most of it was about poor error messages (both misleading text and missing file/line numbers). I should do proper bugzilla entries but haven't tinkered with D much since. As always, this post comes from my phone instead of a proper computer, or else I'd provide a link or do the bugzilla entries while I'm thinking of it. IIRC, the most troublesome error happened when I created "shared this(){...}" constructor and no information on where it caused errors.
Dec 16 2009
Andrei Alexandrescu wrote:Jason House wrote:I have reproduced and reported most of the issue I had hit with shared. If it's any consolation, I was able to convert my message passing queues to use shared, but hit issues when expanding to cover other uses of shared data within my code base. There may also be an issue with what a shared delegate is supposed to be and what can be inside of one, but I haven't really worried about that too much. It's a hairy issue and partly my fault for using delegates as messages between threads. When sending a message, I cast the delegate to a shared delegate even though it access immutable data and has no side effect except on thread-local data in the receiving thread. bugzilla 3640 shared this() constructor does not work and reports strange errors without line numbers bugzilla 3641 keywords: rejects-valid alias shared T U does not work bugzilla 3642 keywords: diagnostic Poor error message when using shared: function ___ not callable with argument types ___Andrei Alexandrescu Wrote:Thanks, Jason. I did see those messages but I didn't want to dilute focus back when you posted them. If you could put together bugzilla entries as you try things, that would be great. The shared constructor I'll experiment with first.But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up.I posted several shared issues to the NG a few days ago and got no replies. Most of it was about poor error messages (both misleading text and missing file/line numbers). I should do proper bugzilla entries but haven't tinkered with D much since. As always, this post comes from my phone instead of a proper computer, or else I'd provide a link or do the bugzilla entries while I'm thinking of it. IIRC, the most troublesome error happened when I created "shared this(){...}" constructor and no information on where it caused errors.
Dec 23 2009
Jason House wrote:bugzilla 3640 shared this() constructor does not work and reports strange errors without line numbers bugzilla 3641 keywords: rejects-valid alias shared T U does not work bugzilla 3642 keywords: diagnostic Poor error message when using shared: function ___ not callable with argument types ___I'll add to that list: bugzilla 3091 keywords: rejects-valid "auto x = new shared foo" does not compile
Dec 23 2009
Jason House wrote:Andrei Alexandrescu wrote:Great. I just got word from Walter that he fixed a lot of shared bugs (most reported and some probably not yet reported), so I expect the situation to get considerably better with the next minor release. AndreiJason House wrote:I have reproduced and reported most of the issue I had hit with shared. If it's any consolation, I was able to convert my message passing queues to use shared, but hit issues when expanding to cover other uses of shared data within my code base. There may also be an issue with what a shared delegate is supposed to be and what can be inside of one, but I haven't really worried about that too much. It's a hairy issue and partly my fault for using delegates as messages between threads. When sending a message, I cast the delegate to a shared delegate even though it access immutable data and has no side effect except on thread-local data in the receiving thread. bugzilla 3640 shared this() constructor does not work and reports strange errors without line numbers bugzilla 3641 keywords: rejects-valid alias shared T U does not work bugzilla 3642 keywords: diagnostic Poor error message when using shared: function ___ not callable with argument types ___Andrei Alexandrescu Wrote:Thanks, Jason. I did see those messages but I didn't want to dilute focus back when you posted them. If you could put together bugzilla entries as you try things, that would be great. The shared constructor I'll experiment with first.But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up.I posted several shared issues to the NG a few days ago and got no replies. Most of it was about poor error messages (both misleading text and missing file/line numbers). I should do proper bugzilla entries but haven't tinkered with D much since. As always, this post comes from my phone instead of a proper computer, or else I'd provide a link or do the bugzilla entries while I'm thinking of it. IIRC, the most troublesome error happened when I created "shared this(){...}" constructor and no information on where it caused errors.
Dec 23 2009
On Thu, 24 Dec 2009 08:13:53 +0300, Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> wrote:Jason House wrote:I'll add my experience with shared/local separation. Shared/local as it is now relies solely on convention. For example, I have wrote a large heavily-multithreaded application in D2 without any use of shared (i.e. everything is "local", yet pointers are freely passed among threads). This is because stdlib is not shared aware at all, starting with druntime: thread creation is "broken" in a sense that it allows passing local this pointer through delegate to another thread: class Foo { void bar() { /* do stuff */ } void createNewThread() { auto thread = new Thread(&bar); // local this pointer is bound to delegate thread.start(); // "this" is now accessible from 2 different threads (current one, and a new one) } } A simple fix would be to disallow starting a new thread with a delegate, allowing free function pointers only. Other options would be to introduce "shared delegates" - a delegate that has shared context pointer. I'd suggest starting with fixing signatures of those OS API functions that deal with creating new thread. For example, there are _beginthreadex (Windows) and pthread_create (POSIX) functions that are declared in druntime roughly like this: extern (C) uintptr_t _beginthreadex(void* /+security,+/, uint /+stack_size+/, uint function(void*) /+start_routine+/, void* /+arg+/, uint /+initflag+/, uint* /+thrdaddr+/); // added variable names to make it more clear int pthread_create(pthread_t* /+thread+/, in pthread_attr_t* /+attr+/, void* function(void*) /+start_routine+/, void* /+arg+/); (there are a lot more functions like this, of course) Variable arg is passed from one thread to another, and thus *must* be marked as shared (or unique). The same applies to start_routine (should be "void function(shared void*) start_routine" instead). This will break a lot of code but will at least try to enforce program correctness.Andrei Alexandrescu wrote:Great. I just got word from Walter that he fixed a lot of shared bugs (most reported and some probably not yet reported), so I expect the situation to get considerably better with the next minor release. AndreiJason House wrote:I have reproduced and reported most of the issue I had hit with shared. If it's any consolation, I was able to convert my message passing queues to use shared, but hit issues when expanding to cover other uses of shared data within my code base. There may also be an issue with what a shared delegate is supposed to be and what can be inside of one, but I haven't really worried about that too much. It's a hairy issue and partly my fault for using delegates as messages between threads. When sending a message, I cast the delegate to a shared delegate even though it access immutable data and has no side effect except on thread-local data in the receiving thread. bugzilla 3640 shared this() constructor does not work and reports strange errors without line numbers bugzilla 3641 keywords: rejects-valid alias shared T U does not work bugzilla 3642 keywords: diagnostic Poor error message when using shared: function ___ not callable with argument types ___Andrei Alexandrescu Wrote:Thanks, Jason. I did see those messages but I didn't want to dilute focus back when you posted them. If you could put together bugzilla entries as you try things, that would be great. The shared constructor I'll experiment with first.But let's not forget we have concurrency ahead of us. I encourage you all to chime in with your thoughts and ideas regarding all aspects of concurrency. The recent multicore performance bug is a great starting point. If you try e.g. shared and it's broken, let us know. If you try it and it works, push it til it breaks. If you have ideas on how to make semantic checking better, pipe up.I posted several shared issues to the NG a few days ago and got no replies. Most of it was about poor error messages (both misleading text and missing file/line numbers). I should do proper bugzilla entries but haven't tinkered with D much since. As always, this post comes from my phone instead of a proper computer, or else I'd provide a link or do the bugzilla entries while I'm thinking of it. IIRC, the most troublesome error happened when I created "shared this(){...}" constructor and no information on where it caused errors.
Dec 24 2009
Denis Koroskin wrote:I'll add my experience with shared/local separation. Shared/local as it is now relies solely on convention. For example, I have wrote a large heavily-multithreaded application in D2 without any use of shared (i.e. everything is "local", yet pointers are freely passed among threads).That was my first experience with shared as well. I submitted a ticket [1] to druntime for it over 7 months ago. I'm not sure what the current status of the threading rewrite is. I know Bartosz worked on it until he hit a nasty bug which Don later fixed. [1] http://www.dsource.org/projects/druntime/ticket/23
Dec 24 2009
Andrei Alexandrescu wrote:Jason House wrote:The commit logs show that bugzilla 3641 was fixed. I'd appreciate it if someone could translate what other shared coding constructs were fixed by Walter's changes. Even a partial fix to 3640 to include line numbers would probably help people. My grep results below show where the message is being generated. I see there's a variant of error that accepts a location parameter, but this error doesn't use it. What surprises me is that it looks like nearly every call to error lacks a location parameter. I'm confused why this would be. I don't normally notice a lack of line numbers in most error messages I see from dmd. /usr/local/src/dmd/cast.c:104: error("cannot implicitly convert expression (%s) of type %s to %s", Maybe the biggest help for those converting to shared would be inclusion of why a particular variable is shared and causing the error. Shared can be viral, and exactly how a piece of code is getting called in shared context can occasionally be a bit unclear. I think there was a related patch for inclusion of stack traces with templated code?bugzilla 3640 shared this() constructor does not work and reports strange errors without line numbers bugzilla 3641 keywords: rejects-valid alias shared T U does not work bugzilla 3642 keywords: diagnostic Poor error message when using shared: function ___ not callable with argument types ___Great. I just got word from Walter that he fixed a lot of shared bugs (most reported and some probably not yet reported), so I expect the situation to get considerably better with the next minor release. Andrei
Dec 24 2009
Jason House wrote:Maybe the biggest help for those converting to shared would be inclusion of why a particular variable is shared and causing the error. Shared can be viral, and exactly how a piece of code is getting called in shared context can occasionally be a bit unclear. I think there was a related patch for inclusion of stack traces with templated code?The stack trace patch is in.
Dec 25 2009
Don wrote:Jason House wrote:Maybe I'm mistaken, but I thought the stack traces only applied to templated code? Is that not correct?Maybe the biggest help for those converting to shared would be inclusion of why a particular variable is shared and causing the error. Shared can be viral, and exactly how a piece of code is getting called in shared context can occasionally be a bit unclear. I think there was a related patch for inclusion of stack traces with templated code?The stack trace patch is in.
Dec 28 2009
Jason House wrote:Don wrote:Yes.Jason House wrote:Maybe I'm mistaken, but I thought the stack traces only applied to templated code? Is that not correct?Maybe the biggest help for those converting to shared would be inclusion of why a particular variable is shared and causing the error. Shared can be viral, and exactly how a piece of code is getting called in shared context can occasionally be a bit unclear. I think there was a related patch for inclusion of stack traces with templated code?The stack trace patch is in.
Dec 28 2009
Andrei Alexandrescu: I've sent you an email, late. Bye, bearophile
Dec 30 2009