Dino Viehland wrote:
> This might be something fun to look at during the sprints at PyCon.
>   

I will definitely be staying for the sprints - either as part of a 
Resolver sprint or under my own steam...

Michael

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Michael Foord
> Sent: Monday, February 04, 2008 2:55 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] Decorators on classes
>
> Hello Dino,
>
> That sounds *great*, and is something really needed by IronPython. How
> long do you think it will take you to implement? <0.5 wink>
>
> Michael
> http://www.manning.com/foord
>
> Dino Viehland wrote:
>   
>> Ok, maybe it's a little optimistic or maybe it needs a couple of hooks 
>> exposed, but it's not too crazy.
>>
>> As other people have pointed out decorators are a runtime concept and I 
>> don't think we get to change that.  So consider a class decorator such as:
>>
>> def ClrAttribute(attr):
>>         def attrFunc(class):
>>                 # do something smart here with attr
>>         return attrFunc
>>
>> @ClrAttribute(System.SerializableAttribute)
>> class X(ISomething, object):
>>         @ClrAttribute(SomeOtherAttribte)
>>         def DoSomething(self):
>>                 return 42
>>
>>
>> As Curt mentioned we do a bunch of caching and such with NewTypeMaker and 
>> maybe spit out a new type.  That's all going to happen before the decorator 
>> gets to run - but we'll only create a new type once so there isn't too much 
>> overhead here :).
>>
>> >From there you could copy that type w/ Reflection.Emit but add the 
>> >attribute(s) on it, and then create a new instance of it passing in the 
>> >PythonType object to its constructor (that's how Python types work - the 
>> >instance holds onto a copy of the PythonType, the one problem here being 
>> >that the UnderlyingSystemType of the PythonType would now be wrong, so that 
>> >might need a hook).  This could also include applying the attributes to 
>> >methods and potentially manifesting concretely typed methods.   This same 
>> >sort of approach might even work w/ a meta-class.
>>
>> Plugging into NewTypeMaker would simplify this but I don't think makes it 
>> impossible.
>>
>> There's also other potential problems with systems based up types and 
>> attributes: Sometimes they want a type that lives in an assembly and 
>> sometimes they want to create instances of types (and they don't know to 
>> pass in a PythonType object to the constructor).
>>
>> -----Original Message-----
>> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Michael Foord
>> Sent: Monday, February 04, 2008 2:03 PM
>> To: Discussion of IronPython
>> Subject: Re: [IronPython] Decorators on classes
>>
>> Dino Viehland wrote:
>>
>>     
>>> FYI IP 2.0 is tracking 2.5 and we have the big pieces in place plus many 
>>> small pieces (although there's more to go).  In 1.1 we had -X:Python25 
>>> which enabled selective 2.5 features and we could conceptually do the same 
>>> sort of thing for 2.0 so that it includes one or two 2.6 features such as 
>>> class decorators.
>>>
>>> >From there the decorators to support attributes could even be written in 
>>> >Python.
>>>
>>>
>>>
>>>       
>> Is that right - could attributes be added to an IronPython class (or
>> instances) at runtime using reflection? Earlier parts of this
>> conversation implied that this wasn't the case...
>>
>> Decorators are only syntactic sugar, so the lack of class decorators
>> isn't an impediment...
>>
>> Michael
>>
>>
>>
>>     
>>> -----Original Message-----
>>> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Keith J. 
>>> Farmer
>>> Sent: Monday, February 04, 2008 1:40 PM
>>> To: Discussion of IronPython; Discussion of IronPython
>>> Subject: Re: [IronPython] Decorators on classes
>>>
>>> Grandfathering: Giving more consideration to retaining compatibility than 
>>> it deserves. :)
>>>
>>> Obviously, IronPython should prioritize compatibility with Py2.4, but for 
>>> obvious reasons I limit that to seeing IP as a consumer of CPy, not the 
>>> other way around.  On the other hand, IP must also be able to consume .NET, 
>>> and .NET is increasingly making use of things the IP cannot yet express.  
>>> (I thought of another framework that attributes are used on -- WCF.  There 
>>> are also XML serialization attributes.)
>>>
>>> To that end, I think it would be worthwhile, for the purpose of .NET 
>>> attributes, to have decorators or their analogues available to IronPython 
>>> in the current stage of development.  That is, I think it should be that 
>>> IronPython = CPy 2.4 + .NET Attributes + other .NET-isms expressed in a 
>>> Pythonic way.
>>>
>>> ________________________________
>>>
>>> From: [EMAIL PROTECTED] on behalf of Michael Foord
>>> Sent: Mon 2/4/2008 11:53 AM
>>> To: Discussion of IronPython
>>> Subject: Re: [IronPython] Decorators on classes
>>>
>>>
>>>
>>> Keith J. Farmer wrote:
>>>
>>>
>>>       
>>>> I've had no problems with not grandfathering in older APIs, and am quite 
>>>> happy to not grandfather in older syntax, either.
>>>>
>>>>
>>>>
>>>>         
>>> What do you mean by 'grandfathering' in this context?
>>>
>>> Michael
>>>
>>>
>>>
>>>       
>>>> I agree that IronPython would have to be able to distinguish between CLR 
>>>> attributes and Python decorators, inasmuch as CLR attributes are a static 
>>>> part of the class/member definition.  But I don't think it's an 
>>>> insurmountable problem, and solving it in the DLR, actually, would be very 
>>>> useful.
>>>>
>>>> I wouldn't expect that class authors would want to change the set of .NET 
>>>> attributes frequently if at all -- it doesn't match how they've been 
>>>> designed and how they've evolved, so creating the attributed base class 
>>>> once (and then having pythonic decorators coming in and out at will) seems 
>>>> like a reasonable approach to me.
>>>>
>>>> ________________________________
>>>>
>>>> From: [EMAIL PROTECTED] on behalf of Curt Hagenlocher
>>>> Sent: Mon 2/4/2008 11:13 AM
>>>> To: Discussion of IronPython
>>>> Subject: Re: [IronPython] Decorators on classes
>>>>
>>>>
>>>> Oh! I didn't realize that about 2.6.
>>>>
>>>> There is indeed a big difference between a Python runtime decorator and a 
>>>> .NET compile time attribute; in fact, the similarities are superficial at 
>>>> best.
>>>>
>>>> .NET attributes are totally static, so there's no way to modify a .NET 
>>>> class definition to add them.  The IronPython engine would have to 
>>>> recognize particular class-level Pythonic annotations and use that 
>>>> information to emit a new CLR class to represent the Python class.  It 
>>>> already emits CLR classes as needed to represent Python classes.  By "as 
>>>> needed", I mean that a specific CLR base class plus a specific set of CLR 
>>>> interfaces will uniquely determine a class to be emitted by IronPython.  
>>>> This class is cached so that -- once generated -- any new Python class 
>>>> definition that matches this set of (CLR base class plus interfaces) will 
>>>> reuse the same CLR class definition.
>>>>
>>>> What you'd have to change is to put the class-level attributes onto the 
>>>> generated CLR class, then change caching so that the key is (CLR base 
>>>> class plus interfaces plus attributes).  It's definitely doable, but 
>>>> raises intriguing questions about "purity".  And you'd also need to 
>>>> consider the impact on the larger DLR.
>>>>
>>>> Method-level attributes are an entirely different matter.
>>>>
>>>> On Feb 4, 2008 10:58 AM, Michael Foord <[EMAIL PROTECTED]> wrote:
>>>>
>>>>
>>>>       Class decorators will be in Python 2.6 - but there is a big 
>>>> difference
>>>>       between a Python runtime decorator and .NET compile time attributes. 
>>>> Is
>>>>       it possible to attach attributes at runtime using the reflection API?
>>>>
>>>>       Michael
>>>>       http://www.manning.com/foord
>>>>
>>>>
>>>>       Keith J. Farmer wrote:
>>>>       > Can I resurrect this forgotten soul?  
>>>> http://www.codeplex.com/WorkItem/View.aspx?ProjectName=IronPython&WorkItemId=13583
>>>>       >
>>>>       > Having just finished working on LINQ to SQL, I'm convinced that 
>>>> future LINQ providers will be making heavy use of .NET attributes not just 
>>>> on properties, but on classes themselves.  Being able to express these 
>>>> attributes in IronPython is a tremendous bonus.  That there be one and 
>>>> only one way to express these is paramount.
>>>>       >
>>>>       > _______________________________________________
>>>>       > Users mailing list
>>>>       > Users@lists.ironpython.com
>>>>       > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>       >
>>>>       >
>>>>
>>>>       _______________________________________________
>>>>       Users mailing list
>>>>       Users@lists.ironpython.com
>>>>       http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users@lists.ironpython.com
>>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>
>>>>
>>>>
>>>>
>>>>         
>>> _______________________________________________
>>> Users mailing list
>>> Users@lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users@lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>> _______________________________________________
>>> Users mailing list
>>> Users@lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>
>>>
>>>
>>>       
>> _______________________________________________
>> Users mailing list
>> Users@lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>> _______________________________________________
>> Users mailing list
>> Users@lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>>     
>
> _______________________________________________
> Users mailing list
> Users@lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> Users@lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
>   

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to