<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="&#1;" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>As for &#8220;fix the CLR&#8221; being pithy: &nbsp;If the
intention was that Type never be subclassed by 3<sup>rd</sup> parties, then Type
should never have been made abstract.&nbsp; At most, it should have been
sealed, and any polymorphic behavior handled internally using any of the reasonable
techniques for doing so.&nbsp; That *<b>not</b>* being the case, newobj should
*<b>not</b>* be making such assumptions on Type.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>So, in this sense, the combination of (CLR + ReflectionAPI) can
be said to be broken:&nbsp; the one side implies untrue things about the
other.&nbsp; So one or the other needs to give in order to bring Order back (as
it were &#8211; I&#8217;ve spent way too much time in Northwind the past couple
years).&nbsp; My preference would be a change, possibly breaking, to the way
the CLR deals with the Type class.&nbsp; Of course, I may be wrong and it may
not be breaking, but it may instead just mean the type returned is a snapshot
of the type as it exists in the DLR at that time.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>You would need, obviously, to make the info classes behave like
weak references, and include API to detect whether the reference is still
valid.&nbsp; You could add other API to say whether it&#8217;s dynamic at all.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>There might be a different path involving parallel classes and
no CLR changes, but there would still be breaking changes, and it&#8217;s a
worse solution overall, I think.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>But, in the end, I imagine we&#8217;ll hear something by PDC
about the level of interop they&#8217;re planning for DLR/CLR languages.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
users-bounces@lists.ironpython.com [mailto:users-bounces@lists.ironpython.com] <b>On
Behalf Of </b>Curt Hagenlocher<br>
<b>Sent:</b> Thursday, July 24, 2008 7:40 AM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> Re: [IronPython] CLS compilation<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<div>

<div>

<p class=MsoNormal>The assumption of static typing is baked pretty heavily into
the existing CLR metadata APIs.&nbsp; Consider this runtime scenario; an
application has a reference to an object o.&nbsp; It calls o.GetType() to get
its type, then uses reflection to get a MethodInfo for the method
&quot;foo&quot;.&nbsp; What does this MethodInfo mean if the foo method on the
Python type is changed?&nbsp; Or removed from the type entirely? Or overridden
for just this one particular instance of the type?&nbsp; And this is just one
example of the semantic gap between static and dynamic types; it's easy to
think of others -- like the fact that the line between properties and methods
is often blurred in dynamic languages.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>So it probably doesn't make sense to just say &quot;fix the
CLR&quot;, no matter how pithy it sounds :).&nbsp; And such a project is likely
to be a multiyear undertaking anyway, which doesn't help anyone who's got
scenarios today that they need to see addressed.&nbsp; That's why we want to
understand what those scenarios are; to make sure that we can provide some kind
of solution -- whether that's through changes to IronPython or some sample code
or even simple guidance.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal>Bottom line: keep those use cases coming!<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>On Thu, Jul 24, 2008 at 12:45 AM, Keith J. Farmer &lt;<a
href="mailto:kfarmer@thuban.org" target="_blank">kfarmer@thuban.org</a>&gt;
wrote:<o:p></o:p></p>

<div>

<div>

<p><span style='font-size:11.0pt;color:#1F497D'>As for the rest.. fix the CLR!
;)</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>I would *<b>presume</b>* that
changes in certain APIs as well as the runtime would be necessary to truly make
.NET dynamic-language-friendly.&nbsp; There's only so far you can go, after
all, without it.</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>I'll also respond privately
with other stuff.</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
[mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
<b>On Behalf Of </b>Shri Borde<br>
<b>Sent:</b> Wednesday, July 23, 2008 11:06 PM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> [IronPython] CLS compilation</span><o:p></o:p></p>

</div>

</div>

<div>

<div>

<p>&nbsp;<o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>I am changing the subject to
better reflect the discussion. I have posted a blog at <a
href="http://blogs.msdn.com/shrib/archive/2008/07/24/cls-compilation-of-ironpython.aspx"
target="_blank">http://blogs.msdn.com/shrib/archive/2008/07/24/cls-compilation-of-ironpython.aspx</a>
discussing some issues I see.</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>Keith, as far as exposing
IronPython types as System.Type, its not just a question of inheriting from
System.Type. If we did just that, the resulting Type would not be usable from
important APIs like Activator.CreateInstance, from IL instructions like newobj,
etc. because the CLR has special knowledge about the System.Type object it
creates from metadata.</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>Also, LINQ to SQL does look
like an interesting scenario. I mention this at the end of the blog. However,
the reason to collect real use cases is to know exactly what features are
needed. Supporting the full range of CLS features may not be necessary. Knowing
how folks are wanting to use the feature can guide the design of the feature in
the future. For example LINQ to SQL only needs CustomAttributes on types but
not on methods AFAIK. This may could make a significant difference as support
CustomAttributes on method is much more complicated.</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>So do send in other use cases
you have run into&#8230;</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
[mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
<b>On Behalf Of </b>Dino Viehland<br>
<b>Sent:</b> Wednesday, July 23, 2008 7:41 PM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> Re: [IronPython] IronPython Post 2.0 Roadmap</span><o:p></o:p></p>

</div>

</div>

<p>&nbsp;<o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>The only problem w/ the
existing Type and MemberInfo classes is that they all require inheritance
demands to inherit from them.&nbsp; That prevents us from subclassing them in
anything core because it won't work in Silverlight or other partial trust
scenarios.&nbsp; But it is something we've been working w/ the CLR team on
getting fixed so we'll be able to take that approach in the future &#8211;
there's other areas where it'd be useful as well.</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
[mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
<b>On Behalf Of </b>Keith J. Farmer<br>
<b>Sent:</b> Wednesday, July 23, 2008 7:30 PM<br>
<b>To:</b> Discussion of IronPython; Discussion of IronPython<br>
<b>Subject:</b> Re: [IronPython] IronPython Post 2.0 Roadmap</span><o:p></o:p></p>

</div>

</div>

<p>&nbsp;<o:p></o:p></p>

<div>

<div>

<p><span style='font-size:10.0pt'>I can answer both in one:&nbsp; To be able to
use IronPython to create data classes, marked up with attributes, to be
consumed by&nbsp;APIs probably written in something other than IronPython.</span><o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p><span style='font-size:10.0pt'>That's it.. quite simple.</span><o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p><span style='font-size:10.0pt'>Example of such an API:&nbsp; LINQ to
SQL.&nbsp; Or LINQ to whatever, since outside of of Objects and XML, things
pretty much end up with mapping metadata and attributes are one of the first
places to look for that.</span><o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p><span style='font-size:10.0pt'>And so, in light of the DLR effort, and the
general push to make the static languages be able to work well with the
dynamics, I think it's only right that the DLR languages be able to expose
their dynamic types in such as way as to be transparent to the static
languages.&nbsp; That's why I pointed out that Type is an abstract class and
the MemberInfo subclasses themselves appear to be subclassable.&nbsp; It really
appears that the API is there, waiting to be implemented.</span><o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p><span style='font-size:10.0pt'>Otherwise, really, the dynamic languages are
completely unusable for certain APIs -- they just don't interact with the
reflection API in such a way that libraries can consume in a reasonable,
language-neutral&nbsp;manner.</span><o:p></o:p></p>

</div>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

<div class=MsoNormal align=center style='text-align:center'>

<hr size=3 width="100%" align=center>

</div>

<p style='margin-bottom:12.0pt'><b><span style='font-size:10.0pt'>From:</span></b><span
style='font-size:10.0pt'> <a href="mailto:users-bounces@lists.ironpython.com"
target="_blank">users-bounces@lists.ironpython.com</a> on behalf of Curt
Hagenlocher<br>
<b>Sent:</b> Wed 7/23/2008 4:39 PM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> Re: [IronPython] IronPython Post 2.0 Roadmap</span><o:p></o:p></p>

</div>

<div>

<div>

<div>

<p>So, we had a brief hallway discussion today about this topic, and the upshot
is that&nbsp;I'm interested in hearing your &quot;real world&quot; use cases
for <o:p></o:p></p>

</div>

<div>

<p>a) attributes, and<o:p></o:p></p>

</div>

<div>

<p>b) static type generation in general<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p style='margin-bottom:12.0pt'>By &quot;use case&quot;, I mean a scenario
that's specifically relevant to you today.&nbsp; By &quot;relevant&quot;, I
mean that it would be *nice* to be able to write a PowerShell extension in
Python, but if you didn't end up writing the extension in another language,
then it doesn't really count for what I'm looking for. :)<o:p></o:p></p>

</div>

<div>

<p>On Mon, Jul 21, 2008 at 4:16 PM, Keith J. Farmer &lt;<a
href="mailto:kfarmer@thuban.org" target="_blank">kfarmer@thuban.org</a>&gt;
wrote:<o:p></o:p></p>

<p>We are talking about *new* features, but you're limiting yourself to
existing APIs?<br>
<br>
If, for the sake of working nicely with the DLR, the existing reflection API
needs to be modified to deal with a more dynamic world, that's not outside the
realm of possibility in my books. &nbsp;After all, there has always been talk
of IP being able to expose static types for consumption outside of IP. &nbsp;I
don't see that this is any less possible now than it was at the start.<br>
<br>
Incidentally, Type is an abstract class. &nbsp;Also, ParameterInfo isn't
sealed, and implements ICustomerAttributeProvider, which is a public interface:<br>
<br>
public interface ICustomAttributeProvider &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Reflection.ICustomAttributeProvider"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Reflection.ICustomAttributeProvider</a>&gt;<br>
{<br>
&nbsp; &nbsp;// Methods<br>
&nbsp; &nbsp;object &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object</a>&gt;
[] GetCustomAttributes &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Reflection.ICustomAttributeProvider/GetCustomAttributes(Boolean):Object%5b%5d"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Reflection.ICustomAttributeProvider/GetCustomAttributes(Boolean):Object%5b%5d</a>&gt;
(bool &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean</a>&gt;
&nbsp;inherit);<br>
&nbsp; &nbsp;object &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object</a>&gt;
[] GetCustomAttributes &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Reflection.ICustomAttributeProvider/GetCustomAttributes(System.Type,Boolean):Object%5b%5d"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Reflection.ICustomAttributeProvider/GetCustomAttributes(System.Type,Boolean):Object%5b%5d</a>&gt;
(Type &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Type"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Type</a>&gt;
&nbsp;attributeType, bool &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean</a>&gt;
&nbsp;inherit);<br>
&nbsp; &nbsp;bool &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean</a>&gt;
&nbsp;IsDefined &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Reflection.ICustomAttributeProvider/IsDefined(System.Type,Boolean):Boolean"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Reflection.ICustomAttributeProvider/IsDefined(System.Type,Boolean):Boolean</a>&gt;
(Type &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Type"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Type</a>&gt;
&nbsp;attributeType, bool &lt;<a
href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean"
target="_blank">http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean</a>&gt;
&nbsp;inherit);<br>
}<br>
<br>
<br>
So I think, actually, that this could be done without changing much if any
external API. &nbsp;They'd probably need to change some of the internals to
return dynamic variants of the info types, but I think that's doable.<br>
<br>
________________________________<br>
<br>
From: <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
on behalf of Harry Pierson<br>
Sent: Mon 7/21/2008 12:59 PM<o:p></o:p></p>

<div>

<div>

<p style='margin-bottom:12.0pt'>To: Discussion of IronPython<br>
Subject: Re: [IronPython] IronPython Post 2.0 Roadmap<br>
<br>
<br>
<br>
All of the many overloads of GetCustomAttributes (<a
href="http://msdn.microsoft.com/en-us/library/system.attribute.getcustomattributes(VS.85).aspx"
target="_blank">http://msdn.microsoft.com/en-us/library/system.attribute.getcustomattributes(VS.85).aspx</a>)
need some type of static type info (Type, MemberInfo, ParameterInfo). So
supporting custom attributes would require some type of static class as Michael
mentions below.<br>
<br>
<br>
<br>
-----Original Message-----<br>
From: <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
[mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
On Behalf Of Michael Foord<br>
Sent: Monday, July 21, 2008 12:48 PM<br>
To: Discussion of IronPython<br>
Subject: Re: [IronPython] IronPython Post 2.0 Roadmap<br>
<br>
Keith J. Farmer wrote:<br>
&gt; Attributes can be applied to more than just types -- members,<br>
&gt; parameters, return values (as I recall), etc.<br>
<br>
But those all presuppose a static type - right?<br>
<br>
IronPython could generate a static class in the compile phase where .NET<br>
attributes are used. Python decorator syntax could be used - class<br>
decorators are now part of Python 2.6 and no-one would object to you<br>
sneaking them into Python 2.5...<br>
<br>
Parameter and return type attributes could still use a method decorator<br>
to apply them.<br>
<br>
Michael<br>
<br>
&gt;<br>
&gt; ------------------------------------------------------------------------<br>
&gt; *From:* <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
on behalf of Curt Hagenlocher<br>
&gt; *Sent:* Mon 7/21/2008 9:51 AM<br>
&gt; *To:* Discussion of IronPython<br>
&gt; *Subject:* Re: [IronPython] IronPython Post 2.0 Roadmap<br>
&gt;<br>
&gt; &quot;Availability of a static type&quot; not because IronPython would
need to<br>
&gt; access one but because it would need to expose one.<br>
&gt;<br>
&gt;<br>
&gt; On Mon, Jul 21, 2008 at 9:44 AM, Keith J. Farmer &lt;<a
href="mailto:kfarmer@thuban.org" target="_blank">kfarmer@thuban.org</a><br>
&gt; &lt;mailto:<a href="mailto:kfarmer@thuban.org" target="_blank">kfarmer@thuban.org</a>&gt;&gt;
wrote:<br>
&gt;<br>
&gt; &nbsp; &nbsp; You can create your own attribute classes, for whatever
markup.<br>
&gt; &nbsp; &nbsp; &nbsp;Particularly since LINQ-to-*, where they often are
used to<br>
&gt; &nbsp; &nbsp; annotate data classes with strings, etc (not references to
types).<br>
&gt;<br>
&gt; &nbsp; &nbsp; In any event, why does &quot;availability of a static
type&quot; enter into<br>
&gt; &nbsp; &nbsp; this? &nbsp;IP can access static types just as well as any
other .NET<br>
&gt; &nbsp; &nbsp; language (System.Math comes to mind). &nbsp;The motivation
in general<br>
&gt; &nbsp; &nbsp; is to make IP a better producer for CLR types, rather than
just a<br>
&gt; &nbsp; &nbsp; consumer, and attributes are an increasingly important thing
to<br>
&gt; &nbsp; &nbsp; support.<br>
&gt;<br>
&gt; &nbsp; &nbsp; As for expression trees and extension methods, those are to
make<br>
&gt; &nbsp; &nbsp; IP a better consumer of a very important API (LINQ and the<br>
&gt; &nbsp; &nbsp; IQueryable stack from .NET 3.5).<br>
&gt;<br>
&gt; &nbsp; &nbsp; To be honest, once those 3 features are available in IP, I think<br>
&gt; &nbsp; &nbsp; it would be on par with the mainstream languages in being
very<br>
&gt; &nbsp; &nbsp; usable in an exclusive sense.<br>
&gt;<br>
&gt; &nbsp; &nbsp; -----Original Message-----<br>
&gt; &nbsp; &nbsp; From: <a href="mailto:users-bounces@lists.ironpython.com"
target="_blank">users-bounces@lists.ironpython.com</a><br>
&gt; &nbsp; &nbsp; &lt;mailto:<a
href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>&gt;<br>
&gt; &nbsp; &nbsp; [mailto:<a href="mailto:users-bounces@lists.ironpython.com"
target="_blank">users-bounces@lists.ironpython.com</a><br>
&gt; &nbsp; &nbsp; &lt;mailto:<a
href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>&gt;]
On Behalf Of Harry<br>
&gt; &nbsp; &nbsp; Pierson<br>
&gt; &nbsp; &nbsp; Sent: Sunday, July 20, 2008 11:14 PM<br>
&gt; &nbsp; &nbsp; To: Discussion of IronPython<br>
&gt; &nbsp; &nbsp; Subject: Re: [IronPython] IronPython Post 2.0 Roadmap<br>
&gt;<br>
&gt; &nbsp; &nbsp; Can you give me some examples where you would use these? The<br>
&gt; &nbsp; &nbsp; problem I see is that many scenarios (WCF contracts, XML<br>
&gt; &nbsp; &nbsp; serialization just to name two) where people want to use a
custom<br>
&gt; &nbsp; &nbsp; attribute depends on the availability of a static type.<br>
&gt;<br>
&gt; &nbsp; &nbsp; Harry<br>
&gt;<br>
&gt; &nbsp; &nbsp; -----Original Message-----<br>
&gt; &nbsp; &nbsp; From: <a href="mailto:users-bounces@lists.ironpython.com"
target="_blank">users-bounces@lists.ironpython.com</a><br>
&gt; &nbsp; &nbsp; &lt;mailto:<a
href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>&gt;<br>
&gt; &nbsp; &nbsp; [mailto:<a href="mailto:users-bounces@lists.ironpython.com"
target="_blank">users-bounces@lists.ironpython.com</a><br>
&gt; &nbsp; &nbsp; &lt;mailto:<a
href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>&gt;]
On Behalf Of Keith J.<br>
&gt; &nbsp; &nbsp; Farmer<br>
&gt; &nbsp; &nbsp; Sent: Saturday, July 19, 2008 8:13 PM<br>
&gt; &nbsp; &nbsp; To: Discussion of IronPython<br>
&gt; &nbsp; &nbsp; Subject: Re: [IronPython] IronPython Post 2.0 Roadmap<br>
&gt;<br>
&gt; &nbsp; &nbsp; votes++<br>
&gt;<br>
&gt; &nbsp; &nbsp; -----Original Message-----<br>
&gt; &nbsp; &nbsp; From: <a href="mailto:users-bounces@lists.ironpython.com"
target="_blank">users-bounces@lists.ironpython.com</a><br>
&gt; &nbsp; &nbsp; &lt;mailto:<a
href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>&gt;<br>
&gt; &nbsp; &nbsp; [mailto:<a href="mailto:users-bounces@lists.ironpython.com"
target="_blank">users-bounces@lists.ironpython.com</a><br>
&gt; &nbsp; &nbsp; &lt;mailto:<a
href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>&gt;]
On Behalf Of Michael<br>
&gt; &nbsp; &nbsp; Foord<br>
&gt; &nbsp; &nbsp; Sent: Saturday, July 19, 2008 10:38 AM<br>
&gt; &nbsp; &nbsp; To: Discussion of IronPython<br>
&gt; &nbsp; &nbsp; Subject: Re: [IronPython] IronPython Post 2.0 Roadmap<br>
&gt;<br>
&gt; &nbsp; &nbsp; Sanghyeon Seo wrote:<br>
&gt; &nbsp; &nbsp; &gt; 2008/7/20 Harry Pierson &lt;<a
href="mailto:Harry.Pierson@microsoft.com" target="_blank">Harry.Pierson@microsoft.com</a><br>
&gt; &nbsp; &nbsp; &lt;mailto:<a href="mailto:Harry.Pierson@microsoft.com"
target="_blank">Harry.Pierson@microsoft.com</a>&gt;&gt;:<br>
&gt; &nbsp; &nbsp; &gt;<br>
&gt; &nbsp; &nbsp; &gt;&gt; Hosting features are all done via the DLR, so that's
a separate<br>
&gt; &nbsp; &nbsp; team. As for<br>
&gt; &nbsp; &nbsp; &gt;&gt; &quot;ability to interact with the rest of the .Net
framework&quot;, can<br>
&gt; &nbsp; &nbsp; you be more<br>
&gt; &nbsp; &nbsp; &gt;&gt; specific about what you're looking for in that
space? What<br>
&gt; &nbsp; &nbsp; *isn't* IPy doing<br>
&gt; &nbsp; &nbsp; &gt;&gt; that you want it to?<br>
&gt; &nbsp; &nbsp; &gt;&gt;<br>
&gt; &nbsp; &nbsp; &gt;<br>
&gt; &nbsp; &nbsp; &gt; .NET attributes?<br>
&gt; &nbsp; &nbsp; &gt;<br>
&gt; &nbsp; &nbsp; &gt;<br>
&gt; &nbsp; &nbsp; +1 :-)<br>
&gt;<br>
&gt; &nbsp; &nbsp; Michael<br>
&gt;<br>
&gt; &nbsp; &nbsp; --<br>
&gt; &nbsp; &nbsp; <a href="http://www.ironpythoninaction.com/" target="_blank">http://www.ironpythoninaction.com/</a><br>
&gt; &nbsp; &nbsp; <a href="http://www.voidspace.org.uk/" target="_blank">http://www.voidspace.org.uk/</a><br>
&gt; &nbsp; &nbsp; <a href="http://www.trypython.org/" target="_blank">http://www.trypython.org/</a><br>
&gt; &nbsp; &nbsp; <a href="http://www.ironpython.info/" target="_blank">http://www.ironpython.info/</a><br>
&gt; &nbsp; &nbsp; <a href="http://www.theotherdelia.co.uk/" target="_blank">http://www.theotherdelia.co.uk/</a><br>
&gt; &nbsp; &nbsp; <a href="http://www.resolverhacks.net/" target="_blank">http://www.resolverhacks.net/</a><br>
&gt;<br>
&gt; &nbsp; &nbsp; _______________________________________________<br>
&gt; &nbsp; &nbsp; Users mailing list<br>
&gt; &nbsp; &nbsp; <a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>
&lt;mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>&gt;<br>
&gt; &nbsp; &nbsp; <a
href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt; &nbsp; &nbsp; _______________________________________________<br>
&gt; &nbsp; &nbsp; Users mailing list<br>
&gt; &nbsp; &nbsp; <a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>
&lt;mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>&gt;<br>
&gt; &nbsp; &nbsp; <a
href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt;<br>
&gt; &nbsp; &nbsp; _______________________________________________<br>
&gt; &nbsp; &nbsp; Users mailing list<br>
&gt; &nbsp; &nbsp; <a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>
&lt;mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>&gt;<br>
&gt; &nbsp; &nbsp; <a
href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt; &nbsp; &nbsp; _______________________________________________<br>
&gt; &nbsp; &nbsp; Users mailing list<br>
&gt; &nbsp; &nbsp; <a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>
&lt;mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>&gt;<br>
&gt; &nbsp; &nbsp; <a
href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt;<br>
&gt;<br>
&gt; ------------------------------------------------------------------------<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Users mailing list<br>
&gt; <a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
&gt; <a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt;<br>
<br>
<br>
--<br>
<a href="http://www.ironpythoninaction.com/" target="_blank">http://www.ironpythoninaction.com/</a><br>
<a href="http://www.voidspace.org.uk/" target="_blank">http://www.voidspace.org.uk/</a><br>
<a href="http://www.trypython.org/" target="_blank">http://www.trypython.org/</a><br>
<a href="http://www.ironpython.info/" target="_blank">http://www.ironpython.info/</a><br>
<a href="http://www.theotherdelia.co.uk/" target="_blank">http://www.theotherdelia.co.uk/</a><br>
<a href="http://www.resolverhacks.net/" target="_blank">http://www.resolverhacks.net/</a><br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><o:p></o:p></p>

</div>

</div>

<p style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><o:p></o:p></p>

</div>

<p>&nbsp;<o:p></o:p></p>

</div>

</div>

</div>

</div>

</div>

</div>

<p class=MsoNormal style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><o:p></o:p></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

</div>

</body>

</html>