digitalmars.D.learn - Exceptions in safe D
- Robert Clipsham (29/29) Jan 09 2012 Are exceptions in safe D possible? I started trying to make my code
- Juan Campanas (3/31) Jan 09 2012 Why are you calling the MyException constructor with a string
- =?utf-8?Q?Simen_Kj=C3=A6r=C3=A5s?= (4/40) Jan 09 2012 Indeed. This seems like a bug. Please file it in bugzilla.
- Jesse Phillips (4/4) Jan 09 2012 Maybe I missed something, but the last I knew Safe D is not
- Jonathan M Davis (11/15) Jan 09 2012 Yeah. I'm not sure how well @safe is implemented in general, but IIRC, i...
Are exceptions in safe D possible? I started trying to make my code safe (there's no reason why it can't be as far as I'm aware), but I hit the following issue: ---- safe class MyException : Exception { this() { super(""); } } void main() { throw new MyException(""); } ---- $ rdmd test.d test.d(7): Error: safe function 'this' cannot call system function 'this' test.d(13): Error: constructor test.MyException.this () is not callable using argument types (string) test.d(13): Error: expected 0 arguments, not 1 for non-variadic function type safe MyException() ---- Is this just unimplemented, is there a workaround, or will this never work? Thanks, -- Robert http://octarineparrot.com/
Jan 09 2012
On Monday, 9 January 2012 at 21:14:05 UTC, Robert Clipsham wrote:Are exceptions in safe D possible? I started trying to make my code safe (there's no reason why it can't be as far as I'm aware), but I hit the following issue: ---- safe class MyException : Exception { this() { super(""); } } void main() { throw new MyException(""); } ---- $ rdmd test.d test.d(7): Error: safe function 'this' cannot call system function 'this' test.d(13): Error: constructor test.MyException.this () is not callable using argument types (string) test.d(13): Error: expected 0 arguments, not 1 for non-variadic function type safe MyException() ---- Is this just unimplemented, is there a workaround, or will this never work? Thanks,Why are you calling the MyException constructor with a string parameter? Anyways. I think that Exception is not marked as safe.
Jan 09 2012
On Mon, 09 Jan 2012 22:33:28 +0100, Juan Campanas <johnny bells.com> wrote:On Monday, 9 January 2012 at 21:14:05 UTC, Robert Clipsham wrote:Yeah, that explains the error on line 13.Are exceptions in safe D possible? I started trying to make my code safe (there's no reason why it can't be as far as I'm aware), but I hit the following issue: ---- safe class MyException : Exception { this() { super(""); } } void main() { throw new MyException(""); } ---- $ rdmd test.d test.d(7): Error: safe function 'this' cannot call system function 'this' test.d(13): Error: constructor test.MyException.this () is not callable using argument types (string) test.d(13): Error: expected 0 arguments, not 1 for non-variadic function type safe MyException() ---- Is this just unimplemented, is there a workaround, or will this never work? Thanks,Why are you calling the MyException constructor with a string parameter?Anyways. I think that Exception is not marked as safe.Indeed. This seems like a bug. Please file it in bugzilla. http://d.puremagic.com/issues/enter_bug.cgi
Jan 09 2012
Maybe I missed something, but the last I knew Safe D is not completely implemented. I think checking that you don't call system functions is the only piece implemented, and Phobos isn't annotated with it.
Jan 09 2012
On Tuesday, January 10, 2012 03:55:35 Jesse Phillips wrote:Maybe I missed something, but the last I knew Safe D is not completely implemented. I think checking that you don't call system functions is the only piece implemented, and Phobos isn't annotated with it.Yeah. I'm not sure how well safe is implemented in general, but IIRC, it's not fully implemented yet - though it certainly works well enough to use in many cases. However, one of the biggest problems is essentially the same problem that we have with const, and that is that not enough stuff in druntime and Phobos uses it where it should. Case in point: Exception isn't marked with safe, pure, or nothrow, and it probably could (and probably _should_) be marked with all three. Attribute inferrence for templates has helped a lot with the problem, but there's still plenty of non-templated stuff which needs to be fixed up to work properly with safe, pure, and nothrow. - Jonathan M Davis
Jan 09 2012