[python-users] Transpiler

Dirk Hünniger dirk.hunniger at googlemail.com
Sa Feb 8 20:38:34 CET 2014


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. Das angehängte Beispiel ist gewiss böswillig 
gewählt macht aber das Problem klar. Mir kam daher die Idee automatisch 
von Python nach C++ zu transpilieren. Ich halten den Angehängten C++ 
code durchaus für aus dem angehängten Python code generierbar. Das 
einzige Problem wäre vieleicht noch die instanziierung des Templates mit 
int, jedoch finde sich im code an der entsprechenden Stelle eine 40 und 
die ist nun mal int. Es ist völlig klar das ein solches Vorgehen die 
Dynamischen Eingenschaften von Python untergräbt und somit nie den 
Sprachumfang von Python abdecken kann. Jedoch hätte ich hiermit eine 
Statische Typenanalyse zu Kompilezeit welche mir ja so sehr am Herzen 
liegt und gleichzeitig ein Hohe Rechentempo.
Viele Grüße Dirk

== 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))

== 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;
}



Mehr Informationen über die Mailingliste python-users