Just FYI - I added a way to access sites which are local to the functions
caller this morning. There's a new type SiteLocalStorage<T> which you can
declare as a parameter on any built-in function. Then when calling it you get
an instance of this class which is allocated from the calling dynamic site.
Therefore if you have different callers passing different types you'll get
different instances of the storage. That will enable functions like map to be
implemented as:
public static List map(CodeContext/*!*/ context,
SiteLocalStorage<DynamicSite<object, object, object>>/*!*/ storage, object
func, IEnumerable enumerator) {
if (enumerator == null) {
throw PythonOps.TypeError("NoneType is not iterable");
}
if (func != null && !storage.Data.IsInitialized) {
storage.Data.EnsureInitialized(...);
}
List ret = new List();
foreach (object o in enumerator) {
if (func == null) {
ret.AddNoLock(o);
} else {
ret.AddNoLock(storage.Data.Invoke(context, func, o));
}
}
return ret;
}
And therefore we won't have to create a new dynamic site and figure out what to
do each time through map - while at the same time usually having a monomorphic
call site. If you need more than one site you can declare
SiteLocalStorage<object[]> or SLS<Tuple<...>>. That should work w/ any DLR
language which uses the default method binder.
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Douglas S. Blank
Sent: Tuesday, May 27, 2008 1:52 PM
To: Discussion of IronPython
Subject: Re: [IronPython] Hosting IP2 Beta2 in Mono?
Sanghyeon Seo wrote:
> 2008/5/20 Douglas S. Blank <[EMAIL PROTECTED]>:
>> Seo at al.,
>>
>> If you want to grab the patches for an IPCEr8 which will build and run IP2B2:
>>
>> svn export
>> http://svn.cs.brynmawr.edu/Myro/trunk/fepy/IPCE/fepy/patches/2.0b2/
>
> Sorry for a long delay. This is a great work! Thank you. These changes
> are now incorporated in FePy SVN:
> http://fepy.svn.sourceforge.net/viewvc/fepy?view=rev&revision=588
>
> However, your patch-builtin-mapsite is incorrect. A function to map
> can be null (Python None) in valid Python code. Try "map(None, [])"
> for an example.
>
> My workaround involves moving local DynamicSite varaibles to static
> and using EnsureInitialized to initialize them. See:
> http://fepy.svn.sourceforge.net/svnroot/fepy/trunk/patches/latest/patch-builtin-mapsite
>
Excellent; thanks a bunch!
I didn't know that you could map None... interesting. That explains that
code.
-Doug
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com