[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