[racket] Python versus Racket

From: Eduardo Costa (edu500ac at gmail.com)
Date: Wed May 14 17:11:31 EDT 2014

I wonder whether a more restricted form of Python would not be acceptable
in situations where speed is critical. I mean, instead of cl-python, that
tries to mimic the semantic of Python closely, the Lisp community could
write a compiler for the subset of Python that the majority of people
really use. This subset of Python would share the semantic of Lisp.

I believe that the strategy of specialised  operators adopted in Scheme and
Racket could be useful for Python too. I mean, operators like fx+, fl+,
fl*, etc could help the compiler infer the type of the operands. I am not
thinking about Python at large, but that brand of Python that Lisp
programmers like so much to implement: cl-python, bigpy, lambda-py, etc. A
Lisp to Python translator could be very useful for Lisp programers that
need to port a small Python library to Lisp. Of course, translation to Lisp
is meaningless if the result proves to be as slow as Python.


2014-05-14 10:40 GMT-03:00 Konrad Hinsen <konrad.hinsen at fastmail.net>:

> 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.
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140514/67bdea3f/attachment.html>

Posted on the users mailing list.