[racket] Python versus Racket

From: Konrad Hinsen (konrad.hinsen at fastmail.net)
Date: Wed May 14 09:40:17 EDT 2014

Eduardo Costa writes:

 > Is there anything in the semantic of Python that makes it much more difficult to
 > implement a Python compiler than a Racket compiler?

Python is much more dynamic than Racket. As an illustration, look at a simple
operation: addition. In Racket, 

   (+ a b)

requires dispatching on the types of a and, from a finite (and small)
list of admitted candidates (fixnum, flonum, ...). Anything else is an error.

In Python,

    a + b

is just syntactic sugar for

    a.__add__(b)

which means (1) Look up the type of a, (2) look up '__add__' in the
method dictionary of that type and its supertypes, (3) if not found,
look up '__radd__' in the method dictionary of the type of b, (4) call
the resulting method. None of the intermediate lookups can be cached
because everything might be different the next time that operation is
executed: a and b can have different types, and the definition of
__add__ for the types of a and b can have changed.

Konrad.

Posted on the users mailing list.