On Wed, 02 Mar 2011 13:38:05 -0500, Bekenn <[email protected]> wrote:

On 3/2/11 8:45 AM, spir wrote:
I had never thought at that, but I'm surprised: what prevents Python's
"compiler" (say, a semantic phase after parsing) to check number and
names of arguments. (Number seems not to be checked before runtime
neither.)
All required information is in the AST. For named params, Python could
translate to position params just like D. This would certainly remove a
relevant amount of runtime "speed-down", I guess. (Only type-check of
builtin func args must remain at runtime.)

Denis

What follows is speculation; I'm not a Python programmer, but I am loosely familiar with the language. If I'm completely wrong, I'm sure someone will point it out:

A Python "compiler" certainly can (and probably does) check function arguments, but the runtime is still heavily involved in argument passing. The complexity in Python is an artifact of how arguments are delivered at run-time: in a big (dynamically created, of course) dictionary. Essentially, The interpreter matches argument positions with parameter names -- at run time -- and then supplies those name/argument pairs as entries in the dictionary. (This is a logical view of the language, and may not precisely match implementations. For instance, I'd expect that "compiled" .pyc files throw out positional information ahead of time.) Looked at another way, *everything* is passed by name, not position; positional arguments are merely a shorthand notation.

This is vastly different from how named arguments would be handled in D. D passes arguments by position -- end of story. Named arguments provide an alternative method of specifying the position of a given argument, which is determined by the compiler long before the linker or the runtime get involved.

Not a python expert either, but I think you are right.

Most dynamic languages are this way -- because you need that flexibility since a "compiled" script might not be recompiled after you change the API.

And also, many dynamic languages allow changing the API mid-program (not sure about python). There would just be no way to determine this at compile time.

-Steve

Reply via email to