Python vs C for a mail server

Jens Theisen jth01 at arcor.de
Tue Jan 31 15:35:00 EST 2006


Jay wrote:

> You can do both, but why? *Especially* in a language like C++, where
> thanks to pointers and casting, there really isn't any type safety
> anyway. How much time in your C/C++ code is spent casting and trying to
> trick the compiler into doing something that it thinks you shouldn't be
> doing?

Not much frankly. Though I have no doubt that there is a lot of code that  
does, but more so in older C++ code.

> How does type safety tell you anything about the current usage of your
> program?

Quite a bit; of course, it's doesn't cover everything and clearly testing  
the semantics is still needed, but a lot of what code is used in what way  
is described by the type system. And I admit that I'm used to use the type  
system as documentation of what's going on.

> And unit tests *might* not tell about the current usage, but
> integration tests certainly do.

Of course tests will cover a lot what static typing does and more. I'm  
just claiming that they can support each other.

> I don't think I've ever seen anyone advocating calling a function like
> getattr(obj "foo" + "bar")(). You can do some very powerful things with
> getattr, thanks to Python's dynamic nature, but I don't think anyone is
> recommending calling a function like that.

A lot of people got me wrong on that, please see Paul's postings. I really  
didn't mean that literally.

> And is that fear based simply on "feeling", or on actual experience.

The former, that's why I did start this branch of the thread, though I'm  
already regretting it.

> Because in all of my own industry experience, it's been MUCH easier to
> jump into someone else's Python code than someone else's C++ code (and
> at my last job, I had to do a lot of both). I find Python to be much
> more self-documenting, because there's not so much scaffolding all over
> the place obfuscating the true intention of the code.

That really depends on who's code you're looking at, as in any language. I  
can believe there are more C++ obfuscaters out there than ones for Python.

I usually have little problems jumping into C++ code of other people but  
the principle reason for that will be that the people I'm working with  
have a very clean and expressive coding style.

> You need to look at doctest:
> http://docs.python.org/lib/module-doctest.html
> With doctest, tests are EXACTLY where the code is. I've used doctest
> with incredibly successful results, in industry.

That's indeed a good point for Python.

> Reference counting by itself is not necessarily sufficient (because of
> circular references). That's why even Python, with its reference
> counting based system, has additional capabilities for finding circular
> references.

Whenever I encountered the need for circular references it was because an  
object, that was in some sense owned by another, needed a pointer back to  
it's owner. That solved easily with non-owning C-style pointers or weak  
pointers.

If you have an example where this is not sufficient, I'd be *very* keen on  
hearing it (it may be easy, I don't know).

> I believe that Alex's official job title at Google is "Uber Technical
> Lead". I'm sure I'll quickly be corrected if that's wrong, but trust me
> (and everyone else who's spent significant time reading c.l.p.) that
> Alex Martelli knows what he's talking about.

You seem to be thinking that I was ironic. That was certainly not my  
intention. I was just trying to minimise the amount of flames I'll be  
getting.

> A lot of your arguments are the very typical arguments that people levy
> against Python, when they're first around it. And that's fine, most
> people go through that. They are taught programming in C++ or Java, and
> that that *that* is the way you're supposed to program. Then they see
> that Python does things in different ways, and automatically assume
> that Python is doing it wrong.

I'm sorry to hear this, and whilst I'm certainly lacking experience in  
Python, I'm not one of those people.

> All I can say is that if you spend time with Python (and more
> importantly, read quality, well-established Python code that's already
> out there), you'll see and understand the Python way of doing things.

I will.

Jens





More information about the Python-list mailing list