Static typing [was Re: Python and the need for speed]
justin walters
walters.justin01 at gmail.com
Sun Apr 16 11:00:14 EDT 2017
On Sun, Apr 16, 2017 at 3:55 AM, bartc <bc at freeuk.com> wrote:
> Example C of the same silly program in Python:
>
> def add(a,b):
> return a+b
>
> def testfn():
> sum=a=b=0
> for i in range(100000000):
> sum += add(a,b)
> a += 1
> b += 2
>
> print (a,b,sum)
>
> testfn()
>
>
> Timings:
>
> A (Pure HLL**) 13 seconds (dynamic/interpreted)
> A (With ASM module) 3
> A (With ASM module) 2 (older version; hmmm...)
>
> B (my compiler) 0.5 (static/compiled)
> B (via C/gcc-O3) 0.14
>
> C (Python 2) 163
> C (Python 2/xrange) 30
> C (Python 3) 38
> C (Pypy) 5
>
Just for fun I wanted to write this up in Nim to compare execution time.
Nim has Python-esqe syntax but is statically
typed and compiled. I think this is relevant to the discussion.
Code looks like this:
```
import times
proc add(a, b: int): int =
result = a + b
proc test() =
var
sum = 0
a = 0
b = 0
for i in 0..<100000000:
sum += add(a, b)
a += 1
b += 1
echo "a: " & $a & " b: " & $b & "\n"
echo "Sum: " & $sum
when isMainModule:
var t0 = cpuTime()
test()
var t1 = cpuTime()
echo "***Execution Time: " & $(t1 - t0) & "***\n"
```
No optimization: ***Execution Time: 2.876923***
Optimized for speed: ***Execution Time: 2.844163***
Optimized for size: ***Execution Time: 2.844901***
Release option: ***Execution Time: 2.844021***
So, generally around 2.8 seconds.
Not too bad for a GC'd language. There are probably some more optimizations
I could make to improve execution time.
More information about the Python-list
mailing list