Interviews: Guido van Rossum Answers Your Questions 169
Last week you had a chance to ask Guido van Rossum, Python's BDFL (Benevolent Dictator For Life), about all things Python and his move to Dropbox. Guido wasted no time answering your questions and you'll find his responses below.
From Google to Dropbox by nurhussein
Hi, What prompted the move from Google to Dropbox? What did you do at Google, and what are you going to do at Dropbox?
Guido: After seven years at Google I was just ready for some change in environment, and then the Dropbox offer came along. At a high level, my job hasn't changed much: I still
- spend 50% of my time on whatever I want to do for Python in my BDFL role
- am a regular engineer in the organization (not a manager or even TL)
- do a lot of code reviews, architecture and design work
- handle a lot of email
- do a lot of actual coding for my job, in Python
The specifics differ of course. I really did only two things at Google: the first two years I worked on one of the first online code review tools Mondrian, which itself was never open-sourced but begat Rietveld, which did, and is used amongst others, by the Python, Go and Chromium communities. After that I joined Google App Engine where I did a lot of different things, almost all of them in Python. My last big project there was a new Python database API, NDB.
I've been at Dropbox for 7 months and my main project has been the design of the Dropbox Datastore API . It's ironic but not my fault that this also uses the "datastore" moniker -- there's little overlap between Dropbox Datastores and the Google App Engine Datastore.
What's even more ironic is that even though I did much of the design, and wrote two prototypes in Python, the SDKs we released last month only support Java, Objective-C and JavaScript. But I am working on a fix, this interview is just slowing me down. :-)
Why did Python avoid some common "OO" idioms?
by i_ate_god
Interfaces, abstract classes, private members, etc... Why did python avoid all this?
Guido: I can think of two reasons: (a) you don't really need them, and (b) they are hard to do if you have no compile-time type checking. Python started out as a skunkworks project (not endorsed or encouraged by management but not actively prevented), and I wanted results quickly. This led me to remove features that weren't actually needed or urgent; it also led me to do all type checking at run time, which gave me natural constraints on what features Python could support. I also had no religious OO ax to grind -- I just wanted an easy language, and it became OO more or less by accident.
In modern Python there are rough equivalents for all of these, but they don't necessarily work all that well, or they cause a lot of execution overhead, so they are often avoided, but they have their uses and their fans.
functional programming
by ebno-10db
Some people claim that Python is, at least partly, a functional language. You disagree, as do I. Simply having a few map and filter type functions does not make for a functional language. As I understand it those functions were added to the libraries by a homesick Lisper, and that several times you've been tempted to eliminate them. In general it seems you're not a fan of functional programming, at least for Python.
Question: do you feel that the functional programming approach is not very useful in general, or simply that it's not appropriate for Python? It would be nice to hear your reasons either way.
Guido: I'm not a fan of religiously taking some idea to the extreme, and I try to be pragmatic in my design choices (but not *too* pragmatic, see the start of this sentence :-). I value readability and usefulness for real code. There are some places where map() and filter() make sense, and for other places Python has list comprehensions. I ended up hating reduce() because it was almost exclusively used (a) to implement sum(), or (b) to write unreadable code. So we added builtin sum() at the same time we demoted reduce() from a builtin to something in functools (which is a dumping ground for stuff I don't really care about :-).
If I think of functional programming, I mostly think of languages that have incredibly powerful compilers, like Haskell. For such a compiler, the functional paradigm is useful because it opens up a vast array of possible transformations, including parallelization. But Python's compiler has no idea what your code means, and that's useful too. So, mostly I don't think it makes much sense to try to add "functional" primitives to Python, because the reason those primitives work well in functional languages don't apply to Python, and they make the code pretty unreadable for people who aren't used to functional languages (which means most programmers).
I also don't think that the current crop of functional languages is ready for mainstream. Admittedly I don't know much about the field besides Haskell, but any language *less* popular than Haskell surely has very little practical value, and I haven't heard of functional languages *more* popular than Haskell. As for Haskell, I think it's a great proving ground for all sorts of ideas about compiler technology, but I think its "purity" will always remain in the way of adoption. Having to come to grips with Monads just isn't worth it for most people.
(A similar comment applies to Scala. It may be the best you can do trying to combine functional and OO paradigms in one language, but the result isn't all that easy to use unless you're really smart.)
Multi-line lambdas
by NeverWorker1
One of the most common complaints about Python is the limitations of its lambdas, namely being one line only without the ability to do assignments. Obviously, Python's whitespace treatment is a major part of that (and, IIRC, I've read comments from you to that effect). I've spent quite a bit of time thinking about possible syntax for a multi-line lambda, and the best I've come up with is trying to shoehorn some unused (or little used) symbol into a C-style curly brace, but that's messy at best. Is there a better way, and do you see this functionality ever being added?
Guido: Really? I almost never hear that complaint except from people who submit questions to Slashdot interviews. :-)
There is indeed a better way, and that is using the 'def' keyword to define a regular function in a local scope. The defined function object becomes a local variable that has exactly the same semantics as a lambda except that it is bound to a local variable, and it doesn't have any of the syntactic constraints. For example, there is *no* semantic difference between
def make_adder(n):
__def adder(x):
____return x + n
__return adder
and this equivalent using lambda:
def make_adder(n):
__return lambda x: x + n
(except that when you introspect the lambda asking for its name, it will say '' instead of 'adder').
Andrew Koenig once pointed out to me that there's one pattern where lambdas are really much more convenient, and that is if you have a long list or dict (perhaps some kind of switching definition) containing lots of lambdas, since if you wanted to do that without lambda you'd end up first having to define lots of little functions, giving them all names, and then referencing them all by name from inside the list or dict. But in that pattern the lambdas are usually simple enough to be lambdas, and if you have a few exceptions, using 'def' before starting the list or dict is a fine compromise.
PyPy
by Btrot69
Do you see PyPy as the future? Or do you remain unconvinced, and -- if so -- why ?
Guido: I'm still unconvinced, for two reasons: (a) they don't support Python 3 (well) yet, and (b) there are lots of extension modules (both third party and in the standard library) that they don't support well. But I hope they'll fix those issues. I think it's competition from projects like PyPy, Jython and IronPython that keeps the CPython project honest and on its toes.
Python in the browser ?
by Btrot69
Over the years, there have been several attempts to create a sandboxed version of python that will safely run in a web browser.Mostly this was because of problems with Javascript. Now that Javascript works -- and we have nice things like CoffeeScript -- is it time to give up on python in the browser ?
Guido: I gave up on it in 1995, so yes. And please don't try to compile Python to JavaScript. The semantics are so different that you end up writing most of a Python runtime in JavaScript, which slows things down too much. (CoffeScript's strength is that it is designed to map cleanly to JavaScript, and the two are now co-evolving to make the mapping even cleaner.)
Python 3
by MetalliQaZ
How do you feel about the current state of the migration to Python 3 (Py3k)? From a user perspective it seems that the conversion of popular libraries has lagged far behind, which has impeded the transition. In my professional capacity, nearly every single system I use lacks an installed 3.x interpreter. In fact, 2.7 is a rarity. I'd like to get your thoughts.
Guido: Curious where you work. I agree that Python 3 migration will still take a long time, but if your systems don't come with Python 2.7 they must be pretty ancient! When I left Google they were about done with the internal transition to Python 2.7 (having successfully migrated from 2.4 to 2.6 over the past few years) and here at Dropbox both the client and the server are using Python 2.7. Both companies are already thinking about Python 3 too.
Back to Python 3 migration, I am actually pretty optimistic. Lots of popular libraries have a working port or are working on one. (The Python Software Foundation also occasionally funds projects to port libraries that are widely used but don't have enough of a community to do a port.) It will take a long time, but I see a lot of progress, and in a few years I expect most new code will be written in Python 3. Totally eradicating Python 2 usage will probably take much longer, but then again, Windows XP isn't quite dead yet either. :-)
Key question for any language designer
by dkleinsc
Have the prospects of Python in any way improved since you grew a beard? To what degree does language success correlate to beard length?
Guido: It is absolutely essential. Just look at Perl's fate -- Larry Wall is just too clean-shaven. :-)
Broaden your functional horizons, Guido! (Score:4, Interesting)
There is this language called Lisp. Might have heard of it before.
Erlang, also.
I understand the kiddies are feeling the Clojure love these days as well (although I suppose that just ends up categorized as a Lisp subset)
C'mon Guido, you're smarter than this...
Re:Broaden your functional horizons, Guido! (Score:5, Insightful)
I wish Lisp and Clojure were more prevalent. Most of my work experience is with Java, and now that I've become comfortable with Lisp and Clojure in my spare time I'm chafing at the tools I have to use for work. There just aren't that many jobs around, at least outside Silicon Valley, that use either language. So I'm trying to do useful Clojure stuff in my spare time in order to have a portfolio I can show off for a Clojure shop.
But to your point, I think Guido is safe to dismiss Lisp - it's a spectacular functional language, it's one of the most well known functional languages, and at least in original and Common Lisp form it just can't get traction in the mainstream.
Re: (Score:2)
Lisp doesn't work well without a good IDE...and I don't count EMACS.
Racket would be ok. It has a decent IDE. But it doesn't do multi-processing, even though it has the appropriate language features.
I don't know Clojure well enough. The last time I tried it (over a year ago) the install instructions produced an only-partially-working result. This is probably NetBeans fault rather than Clojure, but I didn't follow this up. I never got as far as checking how it did on parallel processing.
Most Scheme's and
Re: (Score:2)
Re: (Score:2)
D's basic language, and standard library, are excellent and solid. But they don't cover enough. This is probably inevitable, but it *IS* a real problem. The obvious way to solve it is to wrap C libraries with D code, and include them. This, however, takes the time and effort of skilled people.
E.g.: Sqlite3 wrappers are currently included, but they are so thin that calling them wrappers is almost a misnomer. There have been several attempts to wrap Sqlite3 in the past, but they've all been completed, u
Re:Broaden your functional horizons, Guido! (Score:5, Insightful)
If you're going to depend on a set of public libraries instead of an included set, they you had better verify them for quality. This is why Python's "batteries included" stance is so good. You can depend on the basic libraries.
Ironically, that's actually one of my biggest concerns about using Python. IME, the included batteries aren't very good, once you get past the first few parts of the library reference that everyone uses all the time. A lot of the later parts -- things like file and directory manipulation, data formats and compression tools, process control, networking, even some of the date/time functionality -- have elements that are horribly slow, platform-dependent, or simply too bug-ridden to trust in production.
It's unfortunate that package management in Python is such a mess, mostly for historical reasons. There's quite a bit of good stuff on PyPI these days, and if we were starting over, I think we'd do better to limit the standard library to a much smaller set of essential foundations, and to promote the best libraries from outside sources via the standardised package repository and tools.
Re: (Score:2)
OK. I've never encountered that problem. Did you inform them of your problem? Ask about it on the list?
Re: (Score:2)
Assuming you're talking about the standard library rather than package management, unfortunately it's not just one problem. I'd estimate that I've found 20-25 significant library issues over the past few years of using Python on various projects.
Most of these issues aren't really bugs in the sense that the output is objectively wrong, though. It's more things like OS differences not quite being abstracted away completely so that sometimes running another process needs slightly different presentation of argu
Re: (Score:3)
Even though I have mixed feelings about the Lisp family of languages, I wish they would become more popular. I've never been convinced that it's the One True Approach, but for some things they're great.
Unfortunately, much of the Lisp(s) community is the biggest enemy of the broader adoption of Lisp(s). Part of the problem is that one has to refer to Lisp(s) in the plural. Common Lisp is clearly the most powerful variant, but it's byzantine in its (unnecessary) complexity and redundant features, as well as
Re: (Score:2)
1. Variables are immutable by default, though there are mechanisms for traditional mutable variables you have one extra step to use them. That makes it easier to reason about your code, without forcing every variable to be immutable like Haskell.
2. It's interoperable with Java, so aside from the relatively small Clojure standard library your extended "standa
Re: (Score:2)
I agree points 2 and 3 are important. As for point 1, I didn't say that Clojure was a bad language (I don't even know it), just that it was YALV. Even if it's superior to other Lisp(s), it's still another step in the balkanization that has helped keep Lisp(s) in a niche.
Having many standards is the same as having no standard, and often even a mediocre standard is better than no standard at all.
Re: (Score:3)
So the best possible solution, weak though it may be, is to create something new that just borrows strengths from Lisp but is intentionally different. Clojure is that kind of attempt at a fresh start, and it breaks some Lisp syntax (using square brackets in some cases) and in
Re: (Score:3)
No matter how effective a tool is, if it's not in mainstream use that's a significant mark against its practicality. Four decent Lisp developers might be able to build a particular piece of business software faster and with fewer errors than fifteen decent Python developers - but if I can't find four decent Lisp developers in the local market, I'm stil
Re: (Score:2)
It sounds like you're equating "traction in the mainstream" or "used in as much as 10% of the software created in any given year" with Guido's "very little practical value."
I think that's nutty. Practical value and mainstream acceptance don't correlate much. There are impractical things in the mainstream, and practical things outside of it.
No, he's just using a different sense on the word "practical" from the one you're thinking of. You're thinking "practicality", as in "facilty, ease-of-use, utility and efficiency." Guido, on the other hand means "in practice, in the status quo". It's of little value in the real world if the work isn't there.
Re: (Score:3)
Incidentally, currently my favorite part of Lisp that I wish was in other languages is the way the variable binding allows for easy dependency injection, even in places where it wasn't originally designed that way. It makes unit testing a lot easier.
Re: (Score:1)
Guido, you're smarter than this...
No, he isn't.
If he was, Python would not rely on whitespace for scoping.
Re: (Score:2)
Actually, if other language designers were smarter, other languages would use indenting for blocks.* Eliminating redundancy is a general aim in computing. Languages that use curly brackets or other delimiters for blocks are unreadable unless they also use indenting. And once you have the redundancy of both delimiters AND whitespace you have the danger that the two may not be in agreement. Which is compounded by the one that the compiler relies on (delimiters) not being the same as the one that stands out
Re: (Score:3)
Actually, if other language designers were smarter, other languages would use indenting for blocks.* Eliminating redundancy is a general aim in computing. Languages that use curly brackets or other delimiters for blocks are unreadable unless they also use indenting. And once you have the redundancy of both delimiters AND whitespace you have the danger that the two may not be in agreement. Which is compounded by the one that the compiler relies on (delimiters) not being the same as the one that stands out most to the human (indenting.)
Using indents for blocks has a drawback in that standard text editors aren't good at matching the indent level when cutting and pasting. But that simply means that only Python aware editors should be used for python code. Not difficult when most programmers use IDEs.
* (Which is what you actually mean. Scope relies on more than whitespace.)
You have almost achieved enlightment, grasshopper, but you have yet to catch that fly with your chopsticks...
Q: Why is (for example) C reliant on human intervention for both curly-bracing and indentation? A: Because coders have a fetish for "human-readable" source code that can be used in a "dumb" text editor.
Now, you state that the solution to the Python copy-and-paste problem is a "Python-aware" editor... so why shouldn't the solution to the braces/indentation redundancy in C, Java etc. be a C-/Java-awar
Re: (Score:2)
The "redundancy" is because we want human-readable source code, as you state.
But it's not really redundant, because it (should) just be ADDITIONAL information.
BTW, I like and use Python, but would pay money for a way I could turn off intent == scope *in a way that would work in every Python interpreter I'm likely to find*. (i.e. not a hack I have to add on and build my own interpreter)
Copy-paste is one example that often wrecks code. Also, simply wanting to turn off a conditional check to debug something
Re: (Score:2)
+1, I'm a big python fan, but I think the whitespace is a mistake, for a number of reasons:
1) a snippet of whitespace-blocked code has an absolute indentation level; while a piece of curly bracket style code has relative levels. This makes copy paste and refactoring clumsy. A 'python aware editor' does not really solve this since there is not 'end of block' mark except for the indentation
2) the python whitespace system is redundant in itself by requiring both a colon and a increase-indent token as a block s
Re: (Score:2)
You have almost achieved enlightment, grasshopper
Yeah. That tactic only really works when you are addressing someone with a higher UID than you.
"Fetish" is a strange choice of word for humans being more efficient at maintaining easy to read code than hard to read code. And indenting blocks is near the top of the list of most significant aids for readability.
so why shouldn't the solution to the braces/indentation redundancy in C, Java etc. be a C-/Java-aware editor?
It might be a help. But the fact it hasn't become a common feature in IDEs raises some question marks. (Note to others, there are plenty of IDEs that indent after a curly brace. But few if any that alw
Re: (Score:2)
Lips is a multi paradigm language, you hardly can call it functional. (Hint: is Lisp more popular than Haskel anyway?)
Erlang certainly is far less used than Haskel, so his point is very valid.
Re: (Score:2)
eh, the functional guys scream and yell when you call lisp or erlang functional. I mean, they have side effects! No, you have to program in lambda calculus or some other gimped language that's not actually capable of doing anything useful.
I think you mean "not actually capable of doing everything useful." Functional programming is a wonderful paradigm for handling a whole lot of serious numerical data. It is clean to the point of being almost bomb-proof. Yes, real user-space applications has interaction as its main goal, so FP's term "side-effect" seems almost insulting.
So no, you can't write a whole software package functionally, but if FP was integrated properly into multi-paradigm programming, it would simplify debugging no end. What do I
He did answer one question (Score:3, Funny)
He did answer one question once and for all. The smiley closes the bracket.
https://xkcd.com/541/ [xkcd.com] All hail the BDFL
Summary (Score:1)
"Guido wasted not time answering your questions and you'll find his responses below."
Just like editor wasted not time editing/checking the summary before posting.
Zep--
Re: (Score:2)
"Wasted not" is synonymous with "did not waste". It sounds pretentiously archaic, but it is correct. On the other hand, borking up the whitespace in a Python code sample? That ain't OK at all.
Re: (Score:2)
On the other hand, borking up the whitespace in a Python code sample? That ain't OK at all.
Which is borked with respect to the whitespace, the example or Python? Obviously both and I submit that the latter enables the former which is why it's a horrible language "feature." [ Flame me if you want Python fans, but you know in your hearts I'm right. :-) ] [ And, *that*, Randall (https://xkcd.com/541/) is how you terminate a parenthetical with an emoticon :-) ]
Re: (Score:2)
Both, of course.
My point was that removing indents is never OK, with any language, since it makes the code unreadable. In this case, it also made the code uncompilable, but that's just a secondary offense.
Re: (Score:2)
This. Though I have to admit, I've often been tempted to insert meaningful whitespace [wikipedia.org] in there.
Maybe someday when I submit to the temptation to play with https://github.com/mame/quine-relay [github.com]
Re: (Score:2)
Flamebait, but I'll bite.
The thing that got me interested in Python at the very beginning was its use of whitespace. So no, in my heart, I don't think you are right (I was a big fan of Occam). For me, it is clearly the way a programming language should be designed. I understand that it doesn't suit others; but, interestingly, that feature is one of the key (and overlooked) reasons why Python has become so prevalent.
There is clearly a (sufficiently) large subset of the programming community that strongly
Re: (Score:2)
Default to whitespace == scope, fine. But give a #define or option to turn it off/go back to {} or BEGIN/END or whatever instead...
Re: (Score:2)
by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious wa
Re: (Score:2)
I did learn something new, I learned Python..and for the most part, I like it.. It's more readable (as in sourcecode, not as in indentation) than Perl.
It's mostly the indent==scope that's so annoying. There's a couple of other things, like seemingly unnecessary colons in a few places, but those are VERY VERY minor compared to the huge issue that is indentation == scope.
But I still use Python. Can't you see that liking something, despite greatly disliking one of its huge distinguishing features, is actuall
Re: (Score:3)
borking up the whitespace in a Python code sample? That ain't OK at all.
It may have to do with a sloppy HTML conversion by Slashdot or something, but it is ironic.
P.S. I'm actually a fan of the Python/Haskell whitespace approach.
whitespace (Score:3, Interesting)
Re:whitespace (Score:5, Insightful)
What do you mean, too easy? That's exactly what's wrong with making indentation part of the syntax. It's too easy to break. It's only fitting that code given by the head honcho of Python falls victim to reformatting. It is literally his own fault.
Re:whitespace (Score:4, Insightful)
I have found that everyone who complains about The Python Whitespace Thing are people who have convinced themselves that they are special little snowflakes and therefore any attempt to limit their creative output on whitespace use must be some kind of crime against humanity. Any time I get code in a free-whitespace language from someone like that, I need to run it through a code formatter before it's readable.
You are not special. Your unique ideas about how to indent code are not special, so fucking indent your code according to the standard. The fact that Python mandates proper indentation is a feature, not a bug. The fact that C lets you throw the whole program on one line is a bug, not a feature.
Re:whitespace (Score:5, Insightful)
You can run my code through a code formatter if you don't like my choice of coding convention. You can not fix the broken code from the story by running it through a code formatter, because the inadvertent reformatting destroyed its meaning.
Re: (Score:2)
You can run my code through a code formatter if you don't like my choice of coding convention.
Sure you can, as long as you promise to convert it back again perfectly before you commit, so anyone looking at the diffs later doesn't have to wade through 657 whitespace-related changes to spot the one line where you changes some behaviour.
Languages with syntactic whitespace are vulnerable to misrepresentation, but in practice 99% of that misrepresentation happens under exactly one condition: the code is being presented on a web page by someone who either doesn't know basic HTML or uses a crappy CMS that
Re: (Score:2)
Re: (Score:2)
I agree with you, but...
diff --ignore-space-change
Re: (Score:2)
... also, they're probably butthurt from their python tweaks not compiling because they don't know how to configure their editor to replace tabs with [248] spaces
Re: (Score:2)
I have found that everyone who complains about The Python Whitespace Thing are people who have convinced themselves that they are special little snowflakes and therefore any attempt to limit their creative output on whitespace use must be some kind of crime against humanity.
I'm not special, and I don't use whitespace creatively. I can't STAND it when code isn't indented properly. And yet I still think Python's whitespace is awful, and it is what makes Python a toy language. For one thing, I had having to visually see my whitespace, yet if you don't, you might accidentally mix tabs and spaces and Python gets unhappy.
Re:whitespace (Score:5, Insightful)
Re: (Score:1)
The answer to your question was in your parent post, did you not see it?
Re: (Score:2)
Re: (Score:2)
A website is a proper means of code sharing. If your language has issues with it, your language is broken and unusable. There is no excuse for not supporting the most popular method of idea exchange in the last 20 years.
Re: (Score:2)
The fault here is the misuse of HTML, not the language with significant whitespace. After all, any other language would also lose it's indentation in such a situation, which is still not an acceptable representation of the code, regardless of whether it will compile. Code put on web pages are normally snippets used for learning from, not compiling from, and therefore loss of readability is the major problem, and affects all languages.
Note that Slashdot is also horrendously broken in many other formatting re
Re: (Score:1)
See, Guido is wrong again. Shouldn't have used Slashdot.
Re: (Score:2)
Slashdot is fine, though not ideal, for posting code stuff, since you have some HTML tags available, such as <pre> :
def make_adder(n):
def adder(x):
return x + n
return adder
def make_adder(n):
return lambda x: x + n
The full list of HTML that's not filtered out is supposedly somewhere on the http://slashdot.org/faq [slashdot.org] , but I can't find it right now.
Re: (Score:2)
Re: (Score:2)
Funny- I've lost weeks of my life tracking down python indentation errors, and I've only used it sporadically. I've used C and C like languages for almost 2 decades and I've lost maybe 2-3 days of my life total on missing }. It almost never happens, and never happens with a good IDE. Whereas spacing issues happen whenever you copy paste from a website.
Guido made 1 major mistake. It actually wasn't using whitespacing- it was in not forcing a specific amount of whitespace. If the language had enforced
Re: (Score:3)
Re: (Score:3)
If you have to follow a style guide to get compiling code, your language is broken. If you have to know of the existence of a one off tool to get compiling code, your language is broken. The fact that tool even needs to exist is proof of my point.
Re: (Score:2)
Funny- I've lost weeks of my life tracking down python indentation errors, and I've only used it sporadically.
What's your problem? Are you perhaps trying to use a text editor that doesn't understand python for editing python code?
Whereas spacing issues happen whenever you copy paste from a website.
No it doesn't. Look at stack overflow for example. Any code there will copy'n'paste to a text editor with the indents intact. Any properly written website will be the same. And any website that specializes in coding should work properly in this respect. It's scandalous that slashdot still doesn't.
Note Slashdot breaks HTML code even worse than it does Python. (In both cases unless you make
Re: (Score:2)
It doesn't matter how nicely the website renders it- if it was written with an indent of 3 spaces and you dump it into code with an indent of 4 or tabs, you're going to have problems.
Re: (Score:2)
It doesn't matter how nicely the website renders it- if it was written with an indent of 3 spaces and you dump it into code with an indent of 4 or tabs, you're going to have problems.
Yes. I did a supplementary post to the effect that I agree with this part. And personally I believe the one true indent should have been tabs, such that everyone can have the indent size they want in their text editor, without having to reformat the source. But any single standard for what an indent is would be better than the "anything goes" we have.
Re: (Score:2)
And if this was enforced by the compiler as a rule of the language, I might find it silly but I'd be ok with it. Trying to enforce it by style guides and hoping that the developers know of the existence of a random tool is idiotic.
Re: (Score:2)
Guido made 1 major mistake. It actually wasn't using whitespacing- it was in not forcing a specific amount of whitespace. If the language had enforced that every indent must be exactly 4 spaces, it wouldn't be an issue. The fact that 4 spaces or 3 spaces or a tab all work is what causes it to break horribly
That part I agree with.
Re: (Score:1)
This is a Python article! Of course somebody has to complain about whitespace! When did you ever know a Python article to not start an argument about whitespace?
Re: (Score:2)
Indeed. It's a bit like the same as people starting iPhone articles with a complaint about the supposed patenting of rounded corners.
Re: (Score:2)
I do a fair bit of programming in Python and curly-bracket languages (C, C++, JavaScript, PHP, etc.) and interestingly, a forgotten/misplaced curly bracket in any of those various curly-bracket languages seem to break my code vastly more often than indentation issues do.
How often does that really happen? Because it's been a long time since I've had a problem with curly brackets. Or with indentation, for that matter. Is either one worth worrying about? Arguing about the topic is silly.
There are multiple solutions to the problem of 'block delineation,' and both of these work fine.
Re:whitespace (Score:4, Interesting)
I do a fair bit of programming in Python and curly-bracket languages (C, C++, JavaScript, PHP, etc.) and interestingly, a forgotten/misplaced curly bracket in any of those various curly-bracket languages seem to break my code vastly more often than indentation issues do.
Yes, but there's a rather huge difference: when you forget to close a block in C, your compiler completely flakes out as your {s and }s don't match. Your procedures don't close -- syntax error and fall over. However, if I forget to close a block in Python, this results not in a syntax error, but a logical error that the interpreter is not aware of. The block will be closed, even if only when I define my next class or procedure.
So you've got to weigh up frequency-of-occurrence against cost-of-incident....
Re: (Score:2)
Re: (Score:2)
I do a fair bit of programming in Python and curly-bracket languages (C, C++, JavaScript, PHP, etc.) and interestingly, a forgotten/misplaced curly bracket in any of those various curly-bracket languages seem to break my code vastly more often than indentation issues do.
Your IDE/editor should have an auto-format feature: use it. If your IDE/editor doesn't have that feature, use better tools. This will result in code formatted correctly for virtually no effort (a key press or two).
Re: (Score:2)
Yeah, I don't really have a problem with whitespace as syntax, either.
What I don't get is that there aren't more people complaining about the syntax for functions like range(), where the lower limit is inclusive, but the upper limit is exclusive. Can anyone explain to me how that makes sense?
Re: (Score:2)
Re: (Score:2)
Same with space. Personally I don't prefer it, but it's just syntax. There are a hundred other things that are more important about a programming language than block delineation.
Re: (Score:2)
With the broken indentation, would braces really have made it any easier to read? Barely.
Whether it was C code, bash, or Lisp, the editors should have used CODE blocks. That's the problem, not Python.
Re: (Score:2)
I find that copy and paste in Python is very easy to do in any editor that lets you block indent (most do). I've also seen lots of C++ and Java recently that have been cut & pasted with little regard to indentation which makes reading it misleading to say the least. I'm not saying that one syntax (with curly braces or without) is better than another, but curly braces are no panacea. I've uncovered a LOT of bugs in C++ caused by cut & paste with sloppy and wrong attempts to re-balance the braces. I'v
To answer GvR's question (Score:4, Informative)
I asked the Python 3 question and to answer Guido's question of me; I work at a large conglomerate that does a lot of defense contracting. In my area we deal with aerospace applications and so our linux systems are not Internet-facing. They are real-time systems that run simulations and data-acquisition. As you might expect, they only get upgraded when they really need it. We had a PDP-11 down in the lab until 2010.
I'm not sure why I mentioned my workplace other to demonstrate how distant Py3k can seem to be. My main concern was the apparent lack of 3.x support in the big libraries out there. PIL is a great example. Also PyPy. It seems to me that there are many users that will only upgrade when the 3rd party libraries require it.
Re: To answer GvR's question (Score:1)
You can use Pillow to replace PIL on python 3. Works on python 2 as well.
Re: (Score:3, Informative)
Just to add my input, in the CS department at my university, the Linux that is currently in use is RHEL, the latest version of which (RHEL6) ships with 2.6.6.
Now that said, we also have several other Python installations available from nonstandard locations, and a [i]python[/i] shell alias for me runs 2.7.3 and [i]python3[/i] runs 3.2. (Huh, 3.3 is available. I should update that.)
Also, the Python project that I use that it'd be nice to see support Python 3 is SCons, and there's some talk of that going on a
Re:To answer GvR's question (Score:5, Informative)
I was a little surprised by GvR's answer to this. RHEL 6 ships with Python 2.6, last I checked, and we don't normally deviate from Red Hat packages without good reason. Getting the masses off pre-2.7 versions of Python will also entail releasing newer OS distributions and retiring older ones, both of which happen slowly.
Not everyone can keep up with the latest/greatest versions out there, especially when they have hundreds of servers and big legacy applications to support.
Re: (Score:2)
you can get python 2.7 from redhat for RHEL6 now.
Re: (Score:2)
Is python really that slow? I never do anything with Python that has made me notice a slowdown.
One of the nice things about Python is the really well supported interface for C. If you have a problem that requires a computationally intensive solution, then you can put the worker code in C and wrap it in Python for the I/O and UI and glue logic.
Re: (Score:1)
CPython is... really quite slow. You [i]do[/i] have to do something computationally intensive to notice, of course.
That point and your parent's question are actually related to the PyPy question in the interview actually. PyPy is a JIT for Python that is able to get significant speedups for computationally-bound code. They run 20 benchmarks comparing PyPy and CPython, they are faster on all 20, and see speedups ranging from about a 27% improvement to a ~30x improvement, on average running 6.2 times faster.
Re: (Score:2)
It all depends on your frame of reference. CPython is a blurry rocket of speed when compared with Jython. And in theory you can write all the compute-expensive routines in C++.
Re: (Score:1)
Is Jython an order of magnitude slower than CPython? Because that's my rule of thumb for CPython vs C. (Actually the programming language shootout [debian.org]'s numbers are more like 30-40x slower than C, though that needn't be representative.)
Sure, but then that's not Python being fast, it's C++ being fast. "You could write the expensive parts in C or C++" can be said of nearly any langua
Re: (Score:3)
And in theory you can write all the compute-expensive routines in C++.
Sure, but then that's not Python being fast, it's C++ being fast. "You could write the expensive parts in C or C++" can be said of nearly any language. :-)
Not quite. In java and most other languages I know, you would have to make quite some changes to the rest of the code to get it to communicate with something written in C.
In CPython, you can replace a module and the rest of the code won't notice, e.g. in
mymodule can be a python module or a c module and you really don't need to know or care. You can build the prototype in python and later replace it with a C module, and unittest and benchmark both. You ca
Re: (Score:2)
Shoot, I did my master's thesis in python. Using the psyco JIT engine (sorry, 32-bit only for old python), my stuff ran ~10 - 100x faster by just including one import statement.
I'll play with running it under PyPy and see how it does nowadays. But yeah, I find stuff like PyPy essential for a lot of the stuff I like doing.
Smileys and parenthesis (Score:1)
Interesting interview. Surely there were more important topics but if nothing else this interview was useful in that it taught me it's okay to use the parenthesis at the end of a smiley to serve double duty as the end of a parenthetical statement (kind of like this one :-). At least when your smiley is left in plain text, that is.
Re: (Score:2, Troll)
Or maybe someone should consider such silliness when they make a new language.
Re: (Score:2)
Someone should consider what a posting to slashdot would look like when they make a new language...?
Re: (Score:2)
Yeah, I was going for funny but I guess no one got that.
I dislike whitespace having meaning, but was just trying to make a joke. As you noticed the idea was ridiculous, thus the joke.
Re: (Score:1)
Well, leaving aside the fact that neither of them will compile because of lack of whitespace. Editors, you might want to think about when use of the <pre> tag is appropriate.
I still wish the parrot project took off and combined with Perl. Just imagine the poor joy using Lambda's combined with Perl and white spaces? Sounds like a pure paradise.
Re: (Score:2)
What is not appropriate is for a language to rely on whitespace.
Whitespace in Python (Score:2)
Luckily, both of your opinions on whitespace were not, and are not, either significant or involved in Python's design.
And that's why you two don't have to be dead to me. :)
Plus, you can keep working with whatever it is that you DO like. Imagine that!
Re: (Score:2)
What makes the one line lambda worse is the fact that in Python, not everything is an expression. That one change would clean up so much bullshit in the language.
Or perhaps it makes the one-line lambda better...? As per Guido's own example, lambda's are essentially redundant, as you can achieve the same results with a locally-defined function. The one real difference is that certain things aren't permitted in a lambda, because they're not expressions... which makes a lambda an approximation of a true function, rather than a procedure (Python's "functions" are in reality "procedures")....
Re: (Score:3)
But sure, just carry on 'dissing functional programming and alienate some more of your core users.
After that post, I seriously doubt you are a core user.....
Re: (Score:2)
Re: (Score:3)
Did you read what he said? He wasn't dissing functional programming. His point was that FP features require powerful compilers. Python doesn't have that kind of compiler. Therefore the features don't have much use to Python.
By the way, I don't believe they made the print function to be intuitive. They made it because print had no reason to be a statement. Also who said that tuples are more important than arrays? Arrays are really a concept for lower-level languages. Tuples, lists, and dictionaries a
Re: (Score:2)
Re: (Score:2)
Let's start with the (obvious) statement that you don't use a high-level language for its efficiency -- as a C developer you's be appalled at how slow my Python program runs! You use arrays of various dimensionalities to represent cartesian cordinates, vectors, and transformation matrices, because it is a computationally cheaper than using custom datatypes.
The whole point of high-level languages is to abstract things out to make it easier for the designer to express their thoughts more easily, and to reduce
Re: (Score:2)
Correct and correct. Never do the compute-intensive stuff in native Python + compute-intensive stuff (eg image manipulation) needs arrays = Python doesn't need arrays.
Python's lists are a perfectly adequate replacement for a small 1-dimensional array when needed on an ad hoc basis.
Re: (Score:2)
How about being unable to create a 2D array without jumping through hoops (backwards, on fire, and without your pants)?
Re: (Score:2)
Create a 2D array, like you would do in C? That's not pythonic. If you want C, then use C.
In Python you don't have to define memory before you can fill it with stuff. You plan your data structures and the interpreter manages memory. If you need default data then just go straight to writing the initializer function. Otherwise use higher level functions like append() or extend() while creating your data.
Re: (Score:2)
it's trivial in python. It's an incredible hoop jump in perl.
Re: (Score:2)
perl. Go ahead, show me a reasonable 2d (or more) array in perl, lol. I don't think you can do it.
in python, there's nothing to it, trivial to do and trivial to access. Not in perl, or at least, it hasn't been.
Re: (Score:2)
yes, wasn't talking about python. Was talking about perl.