[python-users] Transpiler
Stefan Drees
stefan at drees.name
So Feb 9 17:46:54 CET 2014
'n Abend Dirk,
geschrieben hattest Du "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." und da war ich froh
helfen zu können :-)
Am 09.02.14 17:34, schrieb Dirk Hünniger:
> 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
rekursiv ist nochmal eine andere Nummer, als einfach nur "viele"
Funktionsaufrufe.
So lange Probleme gut lesbar und inhaltlich klar formulierbar sind, ist
m.M.n. eine Sprache angemessen. Schlechte Implementierungen (Algorithmus
oder Umsetzung) sind - so denke ich - in jeder Sprache reichlich
vorhanden ;-) da würde ich persönlich ungerne d'rauf fokussieren ...
> 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
dann noch viel Spaß in der (Mailänder) Skala ...
Gruß,
Stefan.
>
>
>
> 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