Message passing syntax for objects | OOPv2

Chris Angelico rosuav at gmail.com
Thu May 9 19:05:15 EDT 2013


On Fri, May 10, 2013 at 8:30 AM, Ian Kelly <ian.g.kelly at gmail.com> wrote:
> On Thu, May 9, 2013 at 3:51 PM, Mark Janssen <dreamingforward at gmail.com> wrote:
>> the community stays fractured.
>
> The open source community seems pretty healthy to me.  What is the
> basis of your claim that it is "fractured"?

The carpentry community is fractured. There are people who use
screwdrivers, and there are people who use hammers! Screws and nails
are such completely different things that we shouldn't try to use the
same language to discuss them.

>> Language "expressivity" can be measured.
>
> And the measurements can be endlessly debated.  Expressivity is not
> the sole measure of a programming language, though.

Every programming language can encode every program. It's fairly
straightforward to prove that a Python interpreter can be written in
Ruby, or a C interpreter in Lua; so there is no program that can be
expressed in one language and not in another (there will be apparent
exceptions, eg web-browser JavaScript cannot call on arbitrary C-level
functionality, but if the entirety of program code were written in C,
then it could all be interpreted by one C interpreter).

Larry Wall of Perl put it this way, in a State of the Onion address:

http://www.perl.com/pub/2007/12/06/soto-11.html
"""... Human languages are Turing complete, as it were.

Human languages therefore differ not so much in what you can say but
in what you must say. In English, you are forced to differentiate
singular from plural. In Japanese, you don't have to distinguish
singular from plural, but you do have to pick a specific level of
politeness, taking into account not only your degree of respect for
the person you're talking to, but also your degree of respect for the
person or thing you're talking about.

So languages differ in what you're forced to say. Obviously, if your
language forces you to say something, you can't be concise in that
particular dimension using your language. Which brings us back to
scripting.

How many ways are there for different scripting languages to be concise?
"""

In C, for example, you are forced to write explicit notation
representing {blocks; of; code;} and explicit characters separating;
statements;. In Python, on the other hand, you have to write out your
indentation. In Java, you state what exceptions you might throw. REXX
mandates that you annotate procedures with their list of exposed names
(effectively, non-local and global variables). So the expressivity of
a language can't be defined in terms of how many programs can be
written in it, but in how concisely they can be written - and that's
something that depends on specific design choices and how they align
with the code you're trying to write.

Compare these two snippets:

#!/bin/sh
pg_dumpall | gzip | ssh user at host 'gzip -d|psql'

#!/usr/bin/env python
words=input("Enter words, blank delimited: ")
lengths=[len(x) for x in words.split(" ")]
print("Average word length: %d"%int(sum(lengths)/len(lengths)))

Could you write each in the other's language? Sure! But it won't be as
concise. (The Python version of the shell script could cheat and just
call on the shell to do the work, but even that would add the
expressive overhead of "os.system".) This is why there are so many
languages: because each is good at something different.

ChrisA



More information about the Python-list mailing list