digitalmars.D - Is the compiler supposed to accept this?
- Brian Schott (9/9) Jul 09 2013 While finishing up work on my parser and grammar specification I
- Timon Gehr (3/11) Jul 09 2013 I'd say support it and file a bug against the documentation.
- Brian Schott (14/14) Jul 10 2013 There are severel comments in the part of the dmd front end that
- Timon Gehr (2/16) Jul 10 2013 Accepts-valid is not a bug.
- Brian Schott (2/3) Jul 10 2013 I think you know what I meant. :-)
- Timon Gehr (3/6) Jul 10 2013 Well, I am going to guess you meant accepts-invalid, though I'd prefer
- Timon Gehr (9/23) Jul 10 2013 // (parameters) => expression ?
- Brian Schott (5/12) Jul 10 2013 "(parameters) => expression" is mentioned in the source and I
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (10/16) Jul 10 2013 According to spec "function(parameters) => expression" is not valid.
- Timon Gehr (5/19) Jul 10 2013 Yes, you said that. What I do not understand is why. I think common
- deadalnix (3/18) Jul 10 2013 I don't see how DMD implementation matters here. This is language
- Kenji Hara (8/15) Jul 10 2013 This is accepts-valid behavior.
- Kenji Hara (5/23) Jul 10 2013 I filed the website bug in bugzilla, and posted pull request.
- deadalnix (2/6) Jul 11 2013 http://msalvarez1.edublogs.org/files/2010/01/rock_rule2.jpg
While finishing up work on my parser and grammar specification I found this in container.d: return equal!(function(Elem a, Elem b) => !_less(a,b) && !_less(b,a)) (thisRange, thatRange); It seems to be some strange hybrid of the function literal syntax and the lambda syntax. It's not documented anywhere (surprise!) and I'm not sure if I should support it or file an accepts-invalid bug against DMD.
Jul 09 2013
On 07/10/2013 01:24 AM, Brian Schott wrote:While finishing up work on my parser and grammar specification I found this in container.d: return equal!(function(Elem a, Elem b) => !_less(a,b) && !_less(b,a)) (thisRange, thatRange); It seems to be some strange hybrid of the function literal syntax and the lambda syntax.=>... is supposed to be just a shorthand for { return ...; }It's not documented anywhere (surprise!) and I'm not sure if I should support it or file an accepts-invalid bug against DMD.I'd say support it and file a bug against the documentation.
Jul 09 2013
There are severel comments in the part of the dmd front end that show the syntax that the parser is looking for. Here's a listing: // function type (parameters) { statements... } // delegate type (parameters) { statements... } // function (parameters) { statements... } // delegate (parameters) { statements... } // function { statements... } // delegate { statements... } // (parameters) { statements... } // { statements... } // identifier => expression Based on the fact that "function (parameters) => expression" isn't written out like the others, I'm going to file an accepts-valid bug for this.
Jul 10 2013
On 07/10/2013 07:47 PM, Brian Schott wrote:There are severel comments in the part of the dmd front end that show the syntax that the parser is looking for. Here's a listing: // function type (parameters) { statements... } // delegate type (parameters) { statements... } // function (parameters) { statements... } // delegate (parameters) { statements... } // function { statements... } // delegate { statements... } // (parameters) { statements... } // { statements... } // identifier => expression Based on the fact that "function (parameters) => expression" isn't written out like the others, I'm going to file an accepts-valid bug for this.Accepts-valid is not a bug.
Jul 10 2013
On Wednesday, 10 July 2013 at 18:17:07 UTC, Timon Gehr wrote:Accepts-valid is not a bug.I think you know what I meant. :-)
Jul 10 2013
On 07/10/2013 08:47 PM, Brian Schott wrote:On Wednesday, 10 July 2013 at 18:17:07 UTC, Timon Gehr wrote:Well, I am going to guess you meant accepts-invalid, though I'd prefer if you didn't. :o)Accepts-valid is not a bug.I think you know what I meant. :-)
Jul 10 2013
On 07/10/2013 07:47 PM, Brian Schott wrote:There are severel comments in the part of the dmd front end that show the syntax that the parser is looking for. Here's a listing: // function type (parameters) { statements... } // delegate type (parameters) { statements... } // function (parameters) { statements... } // delegate (parameters) { statements... } // function { statements... } // delegate { statements... } // (parameters) { statements... } // { statements... } // identifier => expression Based on the fact that "function (parameters) => expression" isn't written out like the others,You mean, like some others.I'm going to file an [...] bug for this.// (parameters) => expression ? In any case, please consider that it actually makes no sense to restrict the expressiveness of the type signature based on how the function body is specified. (Why on earth should one have to use the { return expression; } syntax just in order to be able to assert that no context pointer is required?) The documentation is in error here.
Jul 10 2013
On Wednesday, 10 July 2013 at 21:16:30 UTC, Timon Gehr wrote:// (parameters) => expression ? In any case, please consider that it actually makes no sense to restrict the expressiveness of the type signature based on how the function body is specified. (Why on earth should one have to use the { return expression; } syntax just in order to be able to assert that no context pointer is required?) The documentation is in error here."(parameters) => expression" is mentioned in the source and I agree it's valid. I must have forgotton to copy-paste it. I don't agree that "function(parameters) => expression" is valid though. Can any of the DMD devs clear up if this is intended?
Jul 10 2013
On 07/10/2013 02:32 PM, Brian Schott wrote:On Wednesday, 10 July 2013 at 21:16:30 UTC, Timon Gehr wrote:According to spec "function(parameters) => expression" is not valid. http://dlang.org/expression.html Lambda: Identifier => AssignExpression ParameterAttributes => AssignExpression Neither of those allow 'function' or 'delegate' keyword. However, I agree with Timon Gehr that the spec should be changed to match the current behavior. AliThe documentation is in error here."(parameters) => expression" is mentioned in the source and I agree it's valid. I must have forgotton to copy-paste it. I don't agree that "function(parameters) => expression" is valid though. Can any of the DMD devs clear up if this is intended?
Jul 10 2013
On 07/10/2013 11:32 PM, Brian Schott wrote:On Wednesday, 10 July 2013 at 21:16:30 UTC, Timon Gehr wrote:Yes, you said that. What I do not understand is why. I think common sense would mandate that it should be valid syntax.// (parameters) => expression ? In any case, please consider that it actually makes no sense to restrict the expressiveness of the type signature based on how the function body is specified. (Why on earth should one have to use the { return expression; } syntax just in order to be able to assert that no context pointer is required?) The documentation is in error here."(parameters) => expression" is mentioned in the source and I agree it's valid. I must have forgotton to copy-paste it. I don't agree that "function(parameters) => expression" is valid though.Can any of the DMD devs clear up if this is intended?This is the relevant pull: https://github.com/D-Programming-Language/dmd/commit/675898721c04d0bf155a85abf986eae99c37c0dc
Jul 10 2013
On Wednesday, 10 July 2013 at 21:33:00 UTC, Brian Schott wrote:On Wednesday, 10 July 2013 at 21:16:30 UTC, Timon Gehr wrote:I don't see how DMD implementation matters here. This is language design issue.// (parameters) => expression ? In any case, please consider that it actually makes no sense to restrict the expressiveness of the type signature based on how the function body is specified. (Why on earth should one have to use the { return expression; } syntax just in order to be able to assert that no context pointer is required?) The documentation is in error here."(parameters) => expression" is mentioned in the source and I agree it's valid. I must have forgotton to copy-paste it. I don't agree that "function(parameters) => expression" is valid though. Can any of the DMD devs clear up if this is intended?
Jul 10 2013
This is accepts-valid behavior. function(parameters) => expr means the combination of: 1. specifying "context pointer is not necessary" 2. lambda syntax "(parameters) => expr" I think website documentation has a bug. Kenji Hara 2013/7/10 Brian Schott <briancschott gmail.com>While finishing up work on my parser and grammar specification I found this in container.d: return equal!(function(Elem a, Elem b) => !_less(a,b) && !_less(b,a)) (thisRange, thatRange); It seems to be some strange hybrid of the function literal syntax and the lambda syntax. It's not documented anywhere (surprise!) and I'm not sure if I should support it or file an accepts-invalid bug against DMD.
Jul 10 2013
I filed the website bug in bugzilla, and posted pull request. http://d.puremagic.com/issues/show_bug.cgi?id=10605 https://github.com/D-Programming-Language/dlang.org/pull/351 Kenji Hara 2013/7/11 Kenji Hara <k.hara.pg gmail.com>This is accepts-valid behavior. function(parameters) => expr means the combination of: 1. specifying "context pointer is not necessary" 2. lambda syntax "(parameters) => expr" I think website documentation has a bug. Kenji Hara 2013/7/10 Brian Schott <briancschott gmail.com>While finishing up work on my parser and grammar specification I found this in container.d: return equal!(function(Elem a, Elem b) => !_less(a,b) && !_less(b,a)) (thisRange, thatRange); It seems to be some strange hybrid of the function literal syntax and the lambda syntax. It's not documented anywhere (surprise!) and I'm not sure if I should support it or file an accepts-invalid bug against DMD.
Jul 10 2013
On Thursday, 11 July 2013 at 04:59:14 UTC, Kenji Hara wrote:I filed the website bug in bugzilla, and posted pull request. http://d.puremagic.com/issues/show_bug.cgi?id=10605 https://github.com/D-Programming-Language/dlang.org/pull/351 Kenji Harahttp://msalvarez1.edublogs.org/files/2010/01/rock_rule2.jpg
Jul 11 2013