Path: csiph.com!usenet.pasdenom.info!dedibox.gegeweb.org!gegeweb.eu!nntpfeed.proxad.net!proxad.net!feeder1-2.proxad.net!usenet-fr.net!nerim.net!novso.com!news2.euro.net!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'explicitly': 0.04; 'subject:Python': 0.05; 'compiler': 0.05; 'pypy': 0.07; 'python': 0.09; 'abstraction': 0.09; 'experimental': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'runtime': 0.09; 'semantics': 0.09; 'subject:Why': 0.09; 'subject:create': 0.09; 'static': 0.13; 'c++.': 0.16; 'compilation,': 0.16; 'compilers': 0.16; 'from:addr:behnel.de': 0.16; 'from:addr:stefan_ml': 0.16; 'from:name:stefan behnel': 0.16; 'notably': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'subject: \n ': 0.16; 'sure.': 0.16; 'stefan': 0.17; 'url:moin': 0.17; 'widely': 0.17; 'creates': 0.18; 'variable': 0.20; 'specifically': 0.24; 'header:In-Reply-To:1': 0.25; 'header:User- Agent:1': 0.26; 'url:wiki': 0.26; 'restrict': 0.27; 'header:X -Complaints-To:1': 0.28; 'all.': 0.28; 'subject:like': 0.29; 'usable': 0.29; "i'm": 0.29; 'code': 0.31; 'implement': 0.32; 'url:python': 0.32; 'received:84': 0.32; 'int': 0.33; 'handle': 0.33; 'to:addr:python-list': 0.33; 'languages': 0.33; 'that,': 0.34; "can't": 0.34; 'list': 0.35; 'so,': 0.35; 'subject:?': 0.35; 'similar': 0.35; 'there': 0.35; 'received:org': 0.36; 'but': 0.36; 'url:org': 0.36; 'useful': 0.36; 'does': 0.37; 'why': 0.37; 'quite': 0.37; 'subject:: ': 0.38; 'things': 0.38; 'possible.': 0.38; 'to:addr:python.org': 0.39; 'build': 0.39; 'header:Received:5': 0.40; 'most': 0.61; 'different': 0.63; 'love': 0.63; 'more': 0.63; 'levels': 0.66; 'basically,': 0.84; 'received:arcor-ip.net': 0.84; 'received:pools.arcor-ip.net': 0.84 X-Injected-Via-Gmane: http://gmane.org/ To: python-list@python.org From: Stefan Behnel Subject: Re: Why is it impossible to create a compiler than can compile Python to machinecode like C? Date: Thu, 28 Feb 2013 22:03:09 +0100 References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Gmane-NNTP-Posting-Host: dslb-084-056-001-058.pools.arcor-ip.net User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 In-Reply-To: X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 34 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1362085404 news.xs4all.nl 6987 [2001:888:2000:d::a6]:51193 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:40178 kramer65, 28.02.2013 21:25: > I'm using Python for a while now and I love it. There is just one thing > I cannot understand. There are compilers for languages like C and C++. > why is it impossible to create a compiler that can compile Python code > to machinecode? All projects that implement such compilers prove that it's quite possible. The most widely used static Python compiler is Cython, but there are also a couple of experimental compilers that do similar things in more or less useful or usable ways. And there are also a couple of projects that do dynamic runtime compilation, most notably PyPy and Numba. You may want to take a look at the Python implementations page, specifically the list of Python compilers: http://wiki.python.org/moin/PythonImplementations#Compilers > Does machinecode always need to know whether a variable is an int or a > float? Not at all. You're mixing different levels of abstraction here. > And if so, can't you build a compiler which creates machinecode > that can handle both ints and floats in case of doubt? Sure. Cython does just that, for example, unless you tell it explicitly to restrict a variable to a specific type. Basically, you get Python semantics by default and C semantics if you want to. Stefan