[Tutor] Are you allowed to shoot camels? [kinda OT]

Max Noel maxnoel_fr at yahoo.fr
Thu Feb 3 02:49:22 CET 2005


On Feb 3, 2005, at 00:42, Liam Clarke wrote:

>> I don't find it that bad. Ruby does it as well, and it's perfectly
> readable. It's more or less equivalent as if condition: and
> if(condition): both being valid in Python.
>
> Yeah, but you'd never call a function foo like this-
>
>  x = foo
>
> in Python. It's just good to be able to say that a function always has
> <some rule here>.
> That improves readability (imao).

	Yes. That, and the fact that you can use function pointers very easily 
that way. For example,
x = foo
x()
will call foo. Which is cool.

	I do prefer the Python style as well. Just like variable naming 
conventions should tell you something about their nature, function 
calls should have something that explicitly gives them away as such.

MyClass
MY_CONSTANT
myVariable
myFunctionCall()

> @mod = (1,2,3)
> $mod = 3
> $mod[0] = 1
>
> Is inconsistent. Or at least, the logic behind this is not immediately
> apparent to me. I'm always open to illumination on these things
> however.

	Yeah. As with most things in Perl, there is no way to guess it. This 
is actually what I hate the most about that language, and what makes it 
write-only.

>>> if ( not $d eq "a" && not $d eq "c") = False for $d = "b"
>>> if ($d ne "a" && $d ne "c") = True
>
>> This probably has to do with operator precedence. It's been lifted
> from C, so chances are that && has a higher precedence than eq. Use
> parentheses.
>
> Ah... Ironic, I got misled by TMTOWTDI. I figured that if not x=="a"
> and not x == "c" evaled as True in Python, and "if (not $d eq "a")"
> evaled as True in Perl, that
> if ( not $d eq "a" && not $d eq "c") would also eval as true.
> Of course, what's even weirder to me is that
> if ($d ne "a" && $d ne "c") does eval as True, as far as I can see,
>
> '$d ne "a"' is the same as d != "a" in Python, which is the same as
> 'if not d == "a"', which, logically, would mean that $d ne "a" is the
> same as 'if(not $d eq "a") in which case both tests should handle the
> addition of an AND the same.

	Again, no, because IIRC (it's been a while since I last used Perl) eq 
and ne are the Perl operators with the lowest precedence. In effect, 
your last statement is evaluated as if((not $d) eq "a").
	Use == and !=, they work on strings as well. Or (and?) use parens.
	Also, don't forget that Perl, like Python, uses lazy evaluation.

> Once again, illumination is welcomed, as I have a finally that some
> subtlety of Boolean logic is eluding me, and a 'x != a' test is
> different to 'if not x == a' in a small but significant way.
>
> Max - the foo > std.txt thing explains it, but what about @dude =
> <FILE>, where do the brackets originate from?

	I have no idea. Somehow I think it makes sense. It's one of the few 
things that I think make sense in Perl. Couldn't tell you why I think 
so, though :p

> This is another issue I'm having with Perl as opposed to Python - Perl
> is very much written by *nix users for *nix users, it's implementation
> of *nix conventions shows, including the
> `` things. Whereas (correct me if I'm wrong), but Python was written
> by *nix users for everyone. Python seems very non-OS-denominational in
> it's current incarnation, it may have been very *nix orientated prior.

	Not really. The thing is, Python in itself does very little. You have 
to import modules whenever you want to do something that involves the 
system (aside from file operations). That's an advantage IMO, since the 
default modules are quite good and allow for some nice cross-platform 
capabilities.
	However, if the redirection operators and pipes are what make you 
think that way, you should know that MS-DOS (and WinNT's DOS shell) 
does handle pipes and redirection. Perhaps not as powerfully as *NIX, 
but it does.

(however, I would appreciate it if the Python standard distribution 
came with a "real" XML parser, 'cause DOM and SAX just plain suck -- by 
the way, thanks guys, I tried dom4j on my Java project and it changed 
my life)

> So here comes me, the guy who installed Linux once, failed to see the
> big deal and uninstalled it. Up until 3 months ago, my comp was used
> for gaming, pure and simple, me being a certified Day of Defeat freak,
> and so Windows has always best served my purpose.
>
> Now, I want to programme, so I have to learn Unix conventions to use a
> crossplatform language!  It's like asking *nix users to sign a
> Microsoft EULA!! (Well, not as bad, but still as anathemic.)

	Well, in Perl's defense, Windows does implement a fairly large part of 
the POSIX standard.
	And believe me. I'm a UNIX user (Mac OS X is my primary OS, but I also 
use Windows and Linux on a fairly regular basis). Perl doesn't make any 
more sense to me than when I was still a Windows-only guy.

> How's Ruby? I bookmarked the homepage, but never got around to looking 
> at it.

	Very, very nice. Cleanest object-orientedness I ever saw in a language 
(not that I have that much experience -- people like Alan would 
probably be better judges than me on this).
	I find it more elegant than Python, however I end up using Python 
anyway because Ruby has a huge flaw: it's Japanese (AFAIK it's also the 
only "Made in Japan" programming language, apart from stuff like ASM 
68K), and so is a large part of its community. As such, English 
language documentation is flaky at best.
	And as far as I know there is no tutor at ruby-lang.org. Which, as you 
will probably agree, sucks.

> Oh, and I will say this - Perl > Java (and that's an inequality test,
> not a redirection of output)

	I'll have to disagree with you there, unless vi/emacs is the only IDE 
you have access to (did I ever tell you about Eclipse?), and perhaps 
even then.
	From what I remember, if you're programming in an object-oriented 
style (which I now tend do by default unless there is a painfully 
obvious and optimal solution in procedural style), Perl is the ugliest 
thing ever created since Visual Basic. Last time I checked, its OOness 
was frighteningly ugly. Java was built as an OO language from the 
ground up, if you except the presence of the basic C types. As such, it 
is very clean, although it clearly lacks the elegance of Python (then 
again, what to say of Perl?).
	Java code always makes sense when you read it (and in the worst-case, 
when you have access to the API documentation, which is available as 
long as you have Internet access). Sure, it requires a lot of typing 
(in both meanings of the word), but it's rarely -- if ever -- 
ambiguous.

	Also, Java has the added advantage of being very easy to learn: I 
learned it in 1 week 4 months ago (doesn't beat Python's record, 
though: I was doing useful stuff with it within 24 hours of learning 
about its existence), and now feel confident enough with it to do just 
about anything. Of course, my C/C++ programming experience probably 
helped me a lot with this.
	In my opinion, Java has only 2 big flaws:
1) The Java Virtual Machine is a horrible resource hog. Sure, your 
program runs quite fast, but unless you've got multiple CPUs the 
responsiveness of your machine goes *down* (especially noticeable on 
machines with slow CPUs such as the G4 867 with which I'm typing this 
right now).
2) Sun didn't ever encourage anyone to write [insert language 
here] compilers that compiled to JVM bytecode. The JVM was supposed to 
run Java code and nothing else. That's stupid. Microsoft got it right 
with .NET; Sun should have thought of it at least 5 years ago.


-- Max
maxnoel_fr at yahoo dot fr -- ICQ #85274019
"Look at you hacker... A pathetic creature of meat and bone, panting 
and sweating as you run through my corridors... How can you challenge a 
perfect, immortal machine?"



More information about the Tutor mailing list