On Mar 21, 4:34 pm, Steven D'Aprano <steve +comp.lang.pyt...@pearwood.info> wrote: > On Wed, 21 Mar 2012 11:22:01 -0500, Evan Driscoll wrote: > > On 01/-10/-28163 01:59 PM, Steve Howell wrote: > >> Code shouldn't necessarily follow the example of English prose, but it > >> seems that English has had some influence: > > >> 1 push(stack, item) # Push on the stack the item > >> 2 push(item, stack) # Push the item on the stack > >> 3 stack.push(item) # On the stack, push the item > >> 4 stack item push # On the stack, take the item and push it > >> 5 item stack push # Take the item and on the stack, push the > >> former. > >> 6 item push stack # Take the item; push it on the stack. > > >> The first three ways are the most common ways of arranging the grammar > >> in mainstream programming languages, and they are also the three most > >> natural ways in English (no pronouns required). > > >> #1/2 are imperative. #3 is OO. > > > In my opinion, people who make statements such as "#1/2 are imperative, > > #3 is OO" are missing pretty much the entire point of what OO is. > > > OO is much more about semantics and the way code is structured. The > > difference between #1/2 (especially #1, of course) and #3 is > > surface-level syntax only. > > +1000 > > I like to talk about "object oriented SYNTAX" (emphasis added) to > distinguish the typical OO dotted syntax obj.attr (or obj->attr) from > other syntax varieties. But this must be understood as mere convention. > One could invent an OO language which used syntax "push(stack, item)" or > even something exotic like "item!push~stack" and it would remain OO, only > with unusual syntax. >
Sorry if I caused confusion here. When I labelled certain syntaxes as "imperative" and certain syntaxes as "object-oriented," I never meant to imply anything about the semantic layer. (I think Evan misread my post a bit, and then went a little overboard with his comment that people like me "are missing the entire point of OO.") Clearly, I get the fact that there can be multiple valid syntaxes to express the same underlying operation, as evidenced by my presenting six permutations of stack/push/item. The discussion that I thought would be interesting is this--given six seemingly arbitrary ways of expressing the same idea, how do you decide? My hypothesis is that we all have prior conditioning such that the arrangement of words actually *does* matter. And the conditioning comes from multiple realms--we speak natural languages, we have familiarity with arithmetic notation, and we have traditions from programming itself. The place where token arrangement resonates best with me is arithmetic. I can deal with all of the expressions on a semantic level: 5 + 3 5 3 + + 5 3 On a purely theoretical level, the choice of syntax doesn't really matter (it's just a convention), but the convention is so strong, it matters on a readability level. Even though I can grok prefix/ postfix, I feel uncomfortable in programming languages that don't have "infix" sugar. Imagine if Python didn't support infix sugar. No semantic change, right? But it would still matter for some... -- http://mail.python.org/mailman/listinfo/python-list