[python-users] Transpiler

Dirk Hünniger dirk.hunniger at googlemail.com
So Feb 9 17:34:35 CET 2014


Hallo,
deinen Algorithmus habe ich eben auch schon mal in  Haskell 
implementiert. Und der ist natürlich auch viel schneller. Mir ging es 
mit meinem Algorithmus eher darum viele Funktionsaufrufe zu erzwingen 
weil ich weiß das Funktionsaufrufe in Python zeitraubend sind. Der 
Algorithmus was also absichtlich bösartig gewählt. Ich hatte mir letzten 
Endes diese Webseite angeschaut

http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=all&lang=python3&lang2=java&data=u32

und gesehen das Python fast immer viel langsamer läuft. Jetzt wollte ich 
eben eine ungefähr so kurze Syntax hat wie Python aber eine statische 
Typenprüfung und damit verbesserte Laufzeit bietet. Und das ist halt 
nach meine bisherigen Recherchen Skala.
Viele Grüße Dirk




On 09.02.2014 17:10, Stefan Drees wrote:
> Hallo Dirk,
> Am 08.02.14 20:38, schrieb Dirk Hünniger:
>> Hallo,
>> irgendwie finde ich es ja schön, das Python Code lesbar und kurz ist.
>> Ich finde es aber nicht schön, das er so zeit verschwenderisch wird wenn
>> man anfängt zu rechnen. ...
>
> ich mag Fibonacci lieber mit Fi(0) = 0, Geschmacksfrage - aber wieso 
> sollte Python an sich da langsam sein? Ich finde eher den unten 
> stehenden C++ Code langsam (was vermutlich auch am Algorithmus liegt ;-)
>
> $> python2 -V && time python2 fibonacci_generator_sample.py
> Python 2.7.6
> 102334155
>
> real    0m0.074s
> user    0m0.017s
> sys    0m0.012s
>
> $> python3 -V && time python3 fibonacci_generator_sample.py
> Python 3.3.3
> 102334155
>
> real    0m0.083s
> user    0m0.040s
> sys    0m0.010s
>
> Der Beispiel-Code dazu ist unten ... zum Vergleich s.u. auch Timings 
> des naiven Algorithmus in Python und auf derselben Maschine.
>
>> == Laufzeiten ==
>>
>> dirk at dirk-HP-Pro-3400-Series-MT:~/yp$ time ./a.out
>> 165580141
>> real    0m1.338s
>> user    0m1.335s
>> sys    0m0.004s
>> dirk at dirk-HP-Pro-3400-Series-MT:~/yp$ time python3 1.py
>> 165580141
>>
>> real    0m54.272s
>> user    0m54.296s
>> sys    0m0.012s
>>
>>
>> == Python Code ==
>>
>> def fib(n):
>>    if (n==0) or (n==1):
>>      return 1
>>    else:
>>      return fib(n-1)+fib(n-2)
>>
>> print (fib(40))
>
> So ein Algorithmus wie oberhalb lief auch bei meinem Rechner lang:
>
> real    1m4.648s
> user    1m4.462s
> sys    0m0.070s
>
> Alternativer Python Code (auch für python v2 :-)
> fibonacci_generator_sample.py:
>
> #!/usr/bin/env python2
> # -*- coding: utf-8 -*-
> from __future__ import print_function
>
>
> def fibonacci_generator():
>     a, b = 0, 1
>     yield a
>     yield b
>     while True:
>         a, b = b, a + b
>         yield b
>
>
> def fibonacci(n):
>     if n < 0:
>         raise NotImplementedError
>     for i, fin in enumerate(fibonacci_generator(),
>                             start=0):
>         if i == n:
>             return fin
>
> # run time 0.1s (where naive algorithm takes 64s)
> print(fibonacci(40))
>
>
> Schönes Wochenende,
> Stefan.
>
>> == C++ Code ==
>>
>> #include <iostream>
>>
>> template <typename A>
>> A fib(A n)
>> {
>>    if ((n==0) || (n==1)) {
>>      return 1;
>>    }
>>    else {
>>      return fib(n-1)+fib(n-2);
>>    }
>> }
>>
>> int main(void)
>> {
>>    std::cout << fib<int>(40);
>>    return 0;
>> }
>> ________________________________________
>>
>> Diese Mail erhalten Sie ueber die Mailingliste python-users der
>> Universitaet zu Koeln
>> Nachrichten an: python-users at uni-koeln.de
>> Abonnement und Benutzereinstellungen:
>> https://lists.uni-koeln.de/mailman/listinfo/python-users
>> Listenarchiv: https://lists.uni-koeln.de/pipermail/python-users/
>>
>> pyCologne Homepage: http://pycologne.de/
>




Mehr Informationen über die Mailingliste python-users