Subject: Experiences with the MOO language

From: Amit Jayant Patel <[email-masked]>
Date: Thu, 28 Oct 1993 10:22:01 -0700

[I'm not sure if this is an appropriate question to ask here]

For those of you who know both MOO and another programming language,
do you think that MOO can be used as a general purpose language?  If
not, what features are missing?  If so, would you use it over other
languages?

For those of you who know only MOO -- do you consider it to be an easy
programming language?

I'm not asking as a study or anything -- I'm just curious to know what
people think of this language.

		- Amit

---

From: "Jacqueline D. Hamilton" <[email-masked]>
Date: Thu, 28 Oct 1993 12:37:17 -0700

> not, what features are missing?  If so, would you use it over other

Do you mean MU* languages or "real" languages?

I can't begin to say how much I wished for a MOO-like programming
language "on the outside", or maybe a scripting language, like perl...
sure MOO is alot like C but without the evil pointers... its also nice
to not have to declare variables...  *shrug*  you could also call
me lazy for not learning C (actually I've tried, but me and pointers
can't cooperate)... perl is nice too but I miss MOO lists, and 
sometimes perl ends up looking like so much line noise...

As for missing stuff, file handling :)  But I doubt you'll see that
written into a MOO server... dangerous stuff.

If it were a "real" language tho... hell yes.  I'd throw out all my
other programming books and write MOO all the time.

> For those of you who know only MOO -- do you consider it to be an easy

Yeah.  Its nice.  But, I may be a little biased. :)  Its not especially
easy to learn... but once you've got the basics it is simple.

-j.
Kira@Harper's Tale MOO (netman.widener.edu 8888)

---

From: Greg Hudson <[email-masked]>
Date: Thu, 28 Oct 1993 13:16:46 -0700

> not, what features are missing?  If so, would you use it over other

Before I answer this, I should note while I'm more or less familiar
with MOO, I haven't spent very much time writing MOO code.  I'm
interested in it primarily from a theoretical point of view.

First, there are the capabilities issues: MOO as a program has a
certain restricted interface to its language, which makes it
inappropriate for tasks other than a moo.  You can't access the file
system, you can't draw windows on the screen or move the cursor
around, etc.

In a somewhat different sense of "capability", I could complain that
MOO's implementation makes it impossible to carry out most good
algorithms with optimal order.  For instance, I recently implemented a
timer queue in Cold World (in C--) using a heap, which had the
property that insertions and extractions of the minimum element both
took O(lg(n)) time.  As far as I know, there's no way to do this in
MOO, since (correct me if I'm wrong) you can't modify a list stored in
a variable without copying it.  (This is NOT a result of data being
conceptually immutable; C-- data is also immutable, but I have
internal optimizations for common cases of modifying data in a
variable and assigning the result back to the variable.)

But none of these issues are very important, since they could be
changed without changing very much about the language.  Some of them
are, of course, deliberate decisions; allowing MOO programmers general
access to the file system would create the potential for awful
security holes, for instance.

Second, there are software engineering issues.  This is where I find
the most room for improvement in MOO.

I don't like MOO's system of encapsulation.  As far as I can tell,
verbs on an object have no particular privilege over verbs on other
objects when it comes to access to variables, so you have (and this is
a trait of many modern languages, not just MOO) an "object-oriented"
system which considers inheritance more important than encapsulation.

The only way to build lightweight structured data types on top of the
base types in MOO is through lists, where you keep track of slots by
numbers.  This makes it difficult to understand what code is doing,
and also makes maintaining code difficult if you, say, decide that
some element of a type is unnecessary and want to get rid of it.

Error handling is somewhat lacking: when an error occurs, either your
verb bombs the task completely (eschewing any cleanup the calling
verbs might have wanted to perform) and displays a stack trace which
points out where the error occured and which of a dozen or so
categories it falls into, or it is ignored completely.  The only way
to anticipate an exception is to ignore all exceptions anywhere in
that verb.

Type assertions are also missing, although you can do them by hand.
Because you don't have encapsulation, however, there's no way to
guarantee that the data in an object variable is always of the right
type.  (Even if you consider such checks too expensive, consider that
they can be enabled only during debugging, to find out when corruption
takes place.)

I think that covers most of my general objections to MOO as a
general-purpose programming language.  To be fair, I still think MOO
the best production-quality server around at the moment in all
respects but resource consumption.

--GBH

---

From: Arthur Chandler <[email-masked]>
Date: Thu, 28 Oct 1993 14:57:08 -0700

Does anyone out here know if there are good MOO-coding tutorials -- 
either FTPable or available on-site at MOOs? I'm looking for beginning, 
intermediate, advanced, or comprehensive tutorials. So far, I have only 
found these:
   1) The Wind-Up Duck tutorial
   2) "Coding with cdr" (on MediaMOO and BayMOO)

  Any others?

---

From: Loyd Blankenship <[email-masked]>
Date: Thu, 28 Oct 1993 18:33:36 -0700

Part one of my tutorial is available on parcftp; it's an introductory
text. Part two will be available real soon now.

Look in /pub/MOO/contrib/docs for mootutor1.txt.

Loyd

* Loyd Blankenship        [email-masked]                  ^              *
* Steve Jackson Games     CI$: [73407,515]              / \             *
* PO Box 18957            GEnie: SJGAMES               / O \            *
* Austin, TX  78760       512/447-7866                /_____\           *