digitalmars.D - Uniform function call syntax
- Jacob Carlborg <doob me.com> Oct 08 2009
- "Nick Sabalausky" <a a.a> Oct 08 2009
- Michel Fortin <michel.fortin michelf.com> Oct 08 2009
- Jacob Carlborg <doob me.com> Oct 09 2009
- Ellery Newcomer <ellery-newcomer utulsa.edu> Oct 08 2009
- "Nick Sabalausky" <a a.a> Oct 08 2009
- Kagamin <spam here.lot> Oct 09 2009
In the first D conference there was some talk about uniform function call syntax which allowed a.foo(x) and foo(a, x) to be interchangeable (just as we have now with arrays), what happened do that? Will it still happen? Except for the mentioned advantages in the talk I've found another use for it. When creating bindings to Objective-C it could be used to simulate categories which otherwise is quite hard simulate and doesn't scale well. The only way I found requires that the source is available of the class to add the methods to. I poked around in the DMD sources I found that it's really easy to add, just edit one line. However there is a problem it don't work for literals like 3.foo(), for that I think that parser needs to be modified. For those unfamiliar with Objective-C and categories: "A category allows you to add methods to an existing class—even to one to which you do not have the source", http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1 /Jacob Carlborg
Oct 08 2009
"Jacob Carlborg" <doob me.com> wrote in message news:halgto$1kc0$1 digitalmars.com...In the first D conference there was some talk about uniform function call syntax which allowed a.foo(x) and foo(a, x) to be interchangeable (just as we have now with arrays), what happened do that? Will it still happen?
Yea, I find not having that to be a painful inconsistancy. Been hoping for that for a while.Except for the mentioned advantages in the talk I've found another use for it. When creating bindings to Objective-C it could be used to simulate categories which otherwise is quite hard simulate and doesn't scale well. The only way I found requires that the source is available of the class to add the methods to. I poked around in the DMD sources I found that it's really easy to add, just edit one line.
Can you please post the file, line number, old line, new line, and dmd ver? Or submit a patch to bugzilla. That could be helpful for anyone who wants to look into this furthur.However there is a problem it don't work for literals like 3.foo(), for that I think that parser needs to be modified. For those unfamiliar with Objective-C and categories: "A category allows you to add methods to an existing class—even to one to which you do not have the source", http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1
Do you know if that actually affects the class itself (like adds an entry to the vtable or , or something like that)? If not, that sounds like what C# calls extension methods, which are just like what D does with arrays (except that you have to actually declare the function to be an extension method - which I've been kind of on the fence about as to whether I like that or not).
Oct 08 2009
On 2009-10-08 18:23:32 -0400, "Nick Sabalausky" <a a.a> said:However there is a problem it don't work for literals like 3.foo(), for that I think that parser needs to be modified. For those unfamiliar with Objective-C and categories: "A category allows you to add methods to an existing class—even to one to which you do not have the source", http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1
Do
the vtable or , or something like that)? If not, that sounds like what C# calls extension methods, which are just like what D does with arrays (except that you have to actually declare the function to be an extension method - which I've been kind of on the fence about as to whether I like that or not).
There is no vtable in Objective-C, but yes categories will add methods to classes just as if they where in the original class. Methods from categories are overridable in subclasses and can be seen through reflection. I've proposed previously a similar system for D. The idea was to build vtables at runtime, or use a special linker to do the same. See: http://michelf.com/weblog/2009/some-ideas-for-dynamic-vtables-in-d/ and: http://michelf.com/weblog/2008/vtable-benchmarking/ -- Michel Fortin michel.fortin michelf.com http://michelf.com/
Oct 08 2009
On 10/9/09 00:23, Nick Sabalausky wrote:"Jacob Carlborg"<doob me.com> wrote in message news:halgto$1kc0$1 digitalmars.com...In the first D conference there was some talk about uniform function call syntax which allowed a.foo(x) and foo(a, x) to be interchangeable (just as we have now with arrays), what happened do that? Will it still happen?
Yea, I find not having that to be a painful inconsistancy. Been hoping for that for a while.Except for the mentioned advantages in the talk I've found another use for it. When creating bindings to Objective-C it could be used to simulate categories which otherwise is quite hard simulate and doesn't scale well. The only way I found requires that the source is available of the class to add the methods to. I poked around in the DMD sources I found that it's really easy to add, just edit one line.
Can you please post the file, line number, old line, new line, and dmd ver? Or submit a patch to bugzilla. That could be helpful for anyone who wants to look into this furthur.
I've submitted a patch to bugzilla: http://d.puremagic.com/issues/show_bug.cgi?id=3382However there is a problem it don't work for literals like 3.foo(), for that I think that parser needs to be modified. For those unfamiliar with Objective-C and categories: "A category allows you to add methods to an existing class—even to one to which you do not have the source", http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1
Do you know if that actually affects the class itself (like adds an entry to the vtable or , or something like that)? If not, that sounds like what C# calls extension methods, which are just like what D does with arrays (except that you have to actually declare the function to be an extension method - which I've been kind of on the fence about as to whether I like that or not).
Oct 09 2009
Jacob Carlborg wrote:I poked around in the DMD sources I found that it's really easy to add, just edit one line. However there is a problem it don't work for literals like 3.foo(), for that I think that parser needs to be modified.
You'd have to modify a bit more than the parser. ["3.f",<9>,line=2,col=9] ["oo",<4>,line=2,col=12] ["(",<146>,line=2,col=14] [")",<147>,line=2,col=15] [";",<154>,line=2,col=16] Otherwise, the parser can handle that as is. Surround the 3 with parens.
Oct 08 2009
"Ellery Newcomer" <ellery-newcomer utulsa.edu> wrote in message news:ham5lo$dq0$1 digitalmars.com...Jacob Carlborg wrote:I poked around in the DMD sources I found that it's really easy to add, just edit one line. However there is a problem it don't work for literals like 3.foo(), for that I think that parser needs to be modified.
You'd have to modify a bit more than the parser. ["3.f",<9>,line=2,col=9] ["oo",<4>,line=2,col=12] ["(",<146>,line=2,col=14] [")",<147>,line=2,col=15] [";",<154>,line=2,col=16] Otherwise, the parser can handle that as is. Surround the 3 with parens.
Yet another example why "1." and ".1" literals are more trouble than they're worth.
Oct 08 2009
Nick Sabalausky Wrote:Yet another example why "1." and ".1" literals are more trouble than they're worth.
They save you 1 keystroke :3
Oct 09 2009









Michel Fortin <michel.fortin michelf.com> 