python vs d
Chris via Digitalmars-d
digitalmars-d at puremagic.com
Thu May 1 02:18:27 PDT 2014
On Thursday, 1 May 2014 at 06:04:57 UTC, Russel Winder via
Digitalmars-d wrote:
> On Wed, 2014-04-30 at 15:21 -0400, Nick Sabalausky via
> Digitalmars-d
> wrote:
> […]
>> I've heard this a lot, but I've yet to hear anyone explain
>> concretely how this "dynamic mindset" causes the lack of
>> things like static code checks and low-overhead primitives
>> from being actual drawbacks. Maybe it really is a case of me
>> not "getting it", but it always sounds to me like this
>> "dynamic mindset" gets around these issues simply by ignoring
>> them. Since I don't personally do heavy development in dynamic
>> languages, I'd be interested in a strong rebuttal to this.
>
> The best way of approaching this is not to try and attempt a
> long
> theoretical essay, but to try (a possibly lengthy exchange of
> question
> and answer accompanied by actually writing code in both Python
> and D.
> Also looking at things like Rosettacode and all Bearophile and
> others'
> work there.
>
> There are two questions above to kick start things, let's take
> the
> second first:
>
> Low-overhead primitives: This immediately implies you are
> looking for
> raw CPU-bound performance or you are undertaking premature
> optimization.
> Python has no direct "play" in this game. If a Python code
> requires out
> and out CPU-bound performance, you profile to find the small
> bit of the
> total code that is performance critical. If it is not already a
> function
> you extract it as a function, put it in it's own module and
> Cythonize it
> (*). Still Python code but with a few judicious extra
> annotations so as
> to enable Cython to generate C which is then compiled to native
> code.
In my experience the problems with this approach are as follows:
1. The workflow: you write Python code, then profile it, extract
the bottlenecks and then compile them to native code. A lot of
overhead.
2. It can soon become messy when the code is changed, and there's
a mess of different technologies applied over the years (Swig,
Cython and whatnot).
In my opinion it's cleaner to write a project in D (C/C++). Code
> native, in one go. I always feel uneasy, when I have to bring
in third party software (i.e. a blackbox) to boost the
performance of my code. I accept that, if you already have a
substantial code base in Python, technologies like Cython are the
way to go. But when I start a new project, why on earth should I
go down that rocky path again?
> Static code checks: The object (aka data) model, and variable
> model of
> Python (and indeed other dynamic languages) means there cannot
> be any
> static code checks. At this point, I have to yield (in this
> co-routine
> exchange :-) with a question: what is it about static code
> checks that
> you feel you have to have in order to be able to program?
>
>
> (*) There are other techniques, but this is the lowest overhead
> in terms
> of programmer time, and it gives excellent runtime speed-up.
More information about the Digitalmars-d
mailing list