The Cost of Dynamism (was Re: Pyhon 2.x or 3.x, which is faster?)
Mark Lawrence
breamoreboy at yahoo.co.uk
Sat Mar 12 06:27:27 EST 2016
On 12/03/2016 11:08, BartC wrote:
> On 12/03/2016 06:48, Marko Rauhamaa wrote:
>> Chris Angelico <rosuav at gmail.com>:
>>
>>> Definitely agree with this. Having a way to declare that a name is
>>> "truly constant" would be extremely handy;
>>
>> I don't think it would be all that handy. I'm afraid all this type
>> hinting will turn Python into a poor man's Java.
>
> It's not type hinting. Otherwise you can say that using 'def' or 'class'
> is a form of type hinting. Think of 'const' as operating like the latter
> and declaring something a little different.
>
> Although the volatility of the names so defined is still the problem.
>
>>> Maybe, but I honestly don't miss 'switch' all that often - and when I
>>> do, it's usually because I want a range.
>>
>> I don't consider the switch statement an optimization technique but
>> rather, a readability technique.
>>
>> Note that Scheme has a "switch statement" (a "case form") despite being
>> a highly dynamic language.
>
> Yes, you can have simpler forms of switch, that have the same overall
> structure, but do a series of sequential tests rather than using any
> form of table indexed by the value being tested.
>
> The advantage here is that that test-value need only be evaluated once.
> It stays on the stack until some match is found, or the statement comes
> to an end.
>
> It won't have as dramatic an impact on performance, but enhances
> readability as you say.
>
>> Compile-time macros are actually a conceptual compromise that violate
>> full-fledged dynamism: once the compiler has expanded the macro, its
>> definition can't change.
>
> What's big deal with dynamism anyway? I could never understand Python's
> obsession with it.
>
> For me, 'dynamic' means that a variable has a dynamic type; that's all.
> But you know at compile-time (or when looking at source code) whether a
> name is a variable, or a function, class, module, named constant and so on.
>
> If you need a variable-function, then you just have a variable contain
> the name of a function (ie a reference to it). You can bolt on dynamism
> /when you need it/.
>
> OK, mini-rant over...
>
> >> You're not mistaken. There are no "character constants" in Python.
> >> (Note that the definition would be Unicode codepoints, rather than
> >> ASCII values.) I don't often miss them, though.
>
>> Yes, a complete non-issue.
>
> Really? The issue as I see it is this:
>
> Writing: a=65 generates this byte-code for the right-hand-side:
>
> LOAD_CONST 1 (65) An integer
>
> But writing instead: a=ord('A') generates this:
>
> LOAD_GLOBAL 0 (ord)
> LOAD_CONST 1 ('A') A string
> CALL_FUNCTION 1
>
> You might be right: doing an unnecessary global name lookup and
> executing a function call are unlikely to have any impact on performance...
>
Function calls are hugely expensive in Python.
--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.
Mark Lawrence
More information about the Python-list
mailing list