[IronPython] IronPython 1.0 Beta 5

Asim Jalis asimj at exchange.microsoft.com
Thu Apr 13 00:53:32 CEST 2006


Yes. The perf improvement is great. I compared IronPython with Perl and for tasks over 10 seconds, IronPython did significantly better than Perl.

However, for short and quick tasks Perl and CPython come out ahead because of their faster start-up times.

For example, printing "hello world" takes 0.15 seconds in Perl and 3.31 seconds in IronPython.

Is the start-up time something that might go down in future releases?

Asim
-----Original Message-----
From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Anthony Tarlano
Sent: Friday, March 31, 2006 2:07 AM
To: Discussion of IronPython
Subject: Re: [IronPython] IronPython 1.0 Beta 5

Dino,

Great job on improving the performance!!!!

IronPython is now faster then CPython running overhead.py

After Beta 5:
=========
CPC220# python.net overhead.py
LOOP TIME: 0.460693359375
THREAD TIME: 0.590881347656

CPC220# IronPythonConsole overhead.py
LOOP TIME: 0.460670471191
THREAD TIME: 0.590873718262



----------------------------------------------------------


# overhead.py

import time

TIMES = 100000

threads = list()

def stringops():
   for n in xrange(TIMES):
       s = "Mary had a little lamb"
       s = s.upper()
       s = "Mary had a little lamb"
       s = s.lower()
       s = "Mary had a little lamb"
       s = s.replace('a','A')

def scheduler():
   for n in xrange(TIMES):
       for thread in threads: thread.next()

def upper():
   while 1:
       s = "Mary had a little lamb"
       s = s.upper()
       yield None

def lower():
   while 1:
       s = "Mary had a little lamb"
       s = s.lower()
       yield None

def replace():
   while 1:
       s = "Mary had a little lamb"
       s = s.replace('a','A')
       yield None

if __name__=='__main__':
   start = time.clock()
   stringops()
   looptime = time.clock()-start
   print "LOOP TIME:", looptime

   threads.append(upper())
   threads.append(lower())
   threads.append(replace())
   start = time.clock()
   scheduler()
   threadtime = time.clock()-start
   print "THREAD TIME:", threadtime


On 3/31/06, Dino Viehland <dinov at exchange.microsoft.com> wrote:
>
>
>
> Hello IronPython Community,
>
>
>
> We have just released IronPython 1.0 Beta 5. This release focuses primarily
> on improving IronPython's performance.  In this area we've reduced working
> set and startup type by optimizing methods on-demand, improved the speed of
> attribute access, reduced the overhead in many basic operations (e.g.
> equality checks and uninitialized checks for local variables), and done
> other various fine tuning.  As usual there are also a good number of bug
> fixes (primarily focused on community reported bugs).  There was also one
> significant API change in the .NET <-> Python interoperability area:
>
>
>
> If we have the following definitions:
>
>
>
>     public class Foo {
>
>         public void Bar(int arg) {}
>
>         public void Bar<T>(int arg) {}
>
>     }
>
>
>
> We can call the non-generic version with any of:
>
>     foo.Bar(1)
>
>     foo.Bar.__overloads__[int](1)
>
>
>
> And the generic one with any of:
>
>     foo.Bar[str](1)
>
>     foo.Bar.__overloads__[int][str](1)
>
>     foo.Bar[str].__overloads__[int](1)
>
>
>
> This is different from previous versions of IronPython where indexing was
> used to provide access to generic methods.
>
>
>
> A more complete list of changes follows at the end.
>
>
>
> You can download the release from:
> http://www.microsoft.com/downloads/details.aspx?FamilyID=e4058d5f-49ec-47cb-899e-c4f781e6648f&displaylang=en
>
>
>
> We'd like to thank everyone in the community for your bug reports and
> suggestions that helped make this a better release: Aaronm, Anthony Tarlano,
> Eugene Rosenzweig, Shigeru Hemmi, JoeSox, John Platt, Klaus Müller, Lewis
> Franklin, Pete Sheill, Rusty Deschenes, and Sanghyeon Seo.
>
>
>
>
>
> Thanks and keep in touch,
>
> The IronPython Team
>
>
>
>
>
> More complete list of changes and bug fixes:
>
> ============================================
>
> ReflectOptimize methods on-demand
>
> ReflectOptimize hasattr/getattr/setattr and other context aware methods
>
> Improve BigInteger parsing performance
>
> abs(True) and abs(False) fixed to match CPython behavior
>
> os('stat') sets file modes properly now
>
> Bugfix: Setting variables in nt.environ doesn't propagate to environment
>
> Bugfix: Improve constructing files from streams
>
> ReflectOptimizer inlines type checks for non-convertible types
> (ICallerContext & UserType)
>
> Optimize uses of Ops.IsTrue(Ops.Equal(... )) to Ops.EqualRetBool to avoid
> boxing & conversions
>
> Support binding to generic .NET methods and move manual overload resolution
> __overloads__ dictionary
>
> Use data flow analysis to avoid Uninitialized checks where possible in
> locals
>
> Optimize generator.next calls to get good performance
>
> Bugfix: IronPython CodeDom cannot round trip 2 buttons on a form
>
> Improve performance of constructing commonly used built-in types
>
> FunctionEnvironment performance improvements
>
> Minor tweaks to casting orders
>
> Avoid TLS where possible in repr
>
> Bugfix: from __future__ import division doesn't flow into eval in some cases
>
> Bugfix: hasattr raises
>
> Bugfix: need to implement nt.startfile
>
> Bugfix: subclassing Tuple not working
>
> Bugfix: fix resource definitions in generated files
>
> Large namespaces use binary search to find attributes
>
> Bugfix: -i option doesn't go interactive when exception is raised
>
> SuperConsole now supports Ctrl_C handling as well as basic console
>
> Bugfix: '%02d' % 12 appends a leading zero
>
> Attribute access re-written for significant performance gains
>
> Bugfix: nt module doesn't implement chdir
>
> ReflectedPackage's delay load all type loads
>
> Bugfix: atxexit doesn't work
>
> Bugfix: IP: Cannot use a class from IronPython generated class libraries
>
> Bugfix: Cannot delete variable referenced in nested scope
>
> Bugfix: Support special method names (__int__, __pos__, etc...)
>
> Bugfix: Support for generic & non-generic types of the same name in same
> namespace
>
> Bugfix: __doc__ strings should reflect how we mangle calling conventions
>
> Bugfix: Update makefiles to include new assembly references
>
>
>
>
>
>
>
>
>
>
>
> Do you want to help develop Dynamic languages on CLR?
> (http://members.microsoft.com/careers/search/details.aspx?JobID=6D4754DE-11F0-45DF-8B78-DC1B43134038)
>
>
> _______________________________________________
> users mailing list
> users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
>
_______________________________________________
users mailing list
users at lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



More information about the Ironpython-users mailing list