<!-- MHonArc v2.4.4 --> <!--X-Subject: Re: [MUD-Dev] Languages --> <!--X-From-R13: fvybivpNfepr.ue ([vebfyni Evybivp) --> <!--X-Date: from fabius.globecomm.net [207.51.48.6] by mx01.ny.us.ibm.net id 864121638.71383-1 Tue May 20 09:47:18 1997 --> <!--X-Message-Id: 199705200947.LAA05046#regoc,srce.hr --> <!--X-Content-Type: text/plain --> <!--X-Reference: 9705191820.80z9@ami-cg.GraySage.Edmonton.AB.CA --> <!--X-Head-End--> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <title>MUD-Dev message, Re: [MUD-Dev] Languages</title> <!-- meta name="robots" content="noindex,nofollow" --> <link rev="made" href="mailto:silovic#srce,hr"> </head> <body background="/backgrounds/paperback.gif" bgcolor="#ffffff" text="#000000" link="#0000FF" alink="#FF0000" vlink="#006000"> <font size="+4" color="#804040"> <strong><em>MUD-Dev<br>mailing list archive</em></strong> </font> <br> [ <a href="../">Other Periods</a> | <a href="../../">Other mailing lists</a> | <a href="/search.php3">Search</a> ] <br clear=all><hr> <!--X-Body-Begin--> <!--X-User-Header--> <!--X-User-Header-End--> <!--X-TopPNI--> Date: [ <a href="msg00622.html">Previous</a> | <a href="msg00624.html">Next</a> ] Thread: [ <a href="msg00606.html">Previous</a> | <a href="msg00669.html">Next</a> ] Index: [ <A HREF="author.html#00623">Author</A> | <A HREF="#00623">Date</A> | <A HREF="thread.html#00623">Thread</A> ] <!--X-TopPNI-End--> <!--X-MsgBody--> <!--X-Subject-Header-Begin--> <H1>Re: [MUD-Dev] Languages</H1> <HR> <!--X-Subject-Header-End--> <!--X-Head-of-Message--> <UL> <LI><em>To</em>: <A HREF="mailto:mud-dev#null,net">mud-dev#null,net</A></LI> <LI><em>Subject</em>: Re: [MUD-Dev] Languages</LI> <LI><em>From</em>: <A HREF="mailto:silovic#srce,hr">silovic#srce,hr</A> (Miroslav Silovic)</LI> <LI><em>Date</em>: Tue, 20 May 1997 11:47:11 +0200 (MET DST)</LI> </UL> <!--X-Head-of-Message-End--> <!--X-Head-Body-Sep-Begin--> <HR> <!--X-Head-Body-Sep-End--> <!--X-Body-of-Message--> <PRE> > [Miro:] > > :Neat. So what's the type of nil? :) It's obviously not a list. How do > :you declare it? And why is it better than completely generic types (if > :you still have to check whether it's a list or nil in every list > :operation, you could just as well check for all other types)? > > 'nil' is a language construct. It is defined to be equal to no pointer, > and to be such that any pointer can be compared for equality against it, > and such that it can be assigned to any pointer type. I'm not sure where > the concept first originated, but I think AlgolW had one (spelled 'null'), > and I know Algol68 has one. Internally to the parser, it has type > <NIL-TYPE>, and all type-checking code knows about it. Ah, just as I expected... But if you have type checking, you could just as well replace it with true type dispatch and use dynamic types instead? :) (note that if MUD is hard to debug because of no debug support, dynamic typing is not the one to blame. Stack trace is your friend in all dynamic languages, starting with LISP - and it's something that is far harder to program in a static language, although not at all impossible). > To clarify a bit about text output. In the MUD code, you just do something > like Print("This is some text to send to the client.\n"); and the > formatting of it for the client window will be handled by the system. > There was some earlier discussion on this, relating to indentation. Ah, this is actually neat for most purposes. The problem we deal with in Cold was the fact that often a piece of hypertext is dispatched to, say, 200 clients (I've actually been in a scene on a MUSH with 200 players in the same room. I've /ran/ parts of that scene. Don't ask. You really have to /feel/ it for the full experience. :) ). The text also had to propagate (as opposed to /events/, which are far easier to deal with). To illustrate: message originator -> room1 -> player, player, player | V (message gets modified with prefix) room2 -> player, player, player, / telepathic robot mud TV | | V(modification again) V player observers As you can see, the propagation chain gets VERY complicated. The most natural (whatever it means - I'm far for claiming that this is the only way) is to pass the message through object-to-object method calls. But this requires hypertext 'somthing' to be tangible, propagatable object. This is the problem that had to be solved. :) Note that emotes are plain text, and it had to mesh well with messages. > :Err, no, if you said it was safe, I believe you. This is independant > :statement: I don't like thinking about implementation when designing > :the language. It can destroy the design (the problem is called > :'premature optimization'). I'm not saying it did, in your case... > :How about starting serious thread on language design, with concrete > :language proposals? > > OK, thanks. We could try to get a discussion going on MUD languages, but > I'll bet it would be hard to avoid getting trapped into religious issues! > Perhaps the best way to start would be if those with existing languages > could point out where we can find documentation on those languages. I'm > assuming I'm not the only one that's far enough into the cycle to have > such documentation? I just looked, and the two files that are my main > programming docs (not including the builtins) amount to 4600 lines. Too > much to put on this list, but I can make them available for ftp if anyone > wants to get into that much detail. Principal languages that make great reading: <A HREF="http://www.dcs.napier.ac.uk/course-notes/sml/manual.html">http://www.dcs.napier.ac.uk/course-notes/sml/manual.html</A> This is ML specification. ML is very spartan, and is meant as a testing ground for language design concepts. There are some good libraries, so you can still do real work with it. There are both free and commercial compilers. It's statically typed, and *very* clean. For instance, there is no notion of 'pointer', and you don't actually need it. <A HREF="http://www-swiss.ai.mit.edu/scheme-home.html">http://www-swiss.ai.mit.edu/scheme-home.html</A> This is Scheme reference. Scheme is deliberately kept small, and its design phylosophy is 'Most kick per feature'. This means that there are indeed very few features (there is a semi-standard Scheme library, which fixes this) but with them, you can do incredibly powerful stuff (you can implement different object systems, and even a meta-object protocol. You can implement threads, exceptions, co-routines. Lazy evaluation is a built-in feature, allowing you to define infinite datastructures. And so on). You can use it both for exploration and for serious programming. There are free and commercial compilers, some of which produce very efficient code. Oh, it's dynamically typed, but some compilers use type inference to check types at compile time for you (i.e. they figure types of the vars from the expressions they're used in - as it should be done. :) ) The thing to study with Scheme are macros, as Scheme as LISP macros are probably more powerful than in any other language (the cost is syntax, as those languages had to be able to parse themselves). <A HREF="http://www.harlequin.com/books/HyperSpec/">http://www.harlequin.com/books/HyperSpec/</A> This is specification of ANSI Common LISP. Unlike the two above, this is fully featured language, with library standard (it's part of the language, actually. So are basic debugging facility). CL is both statically and dynamically typed - programmer gets to choose. It has object system, tons of builtin datatypes (it uses *huge* hierarchy of types. For instance, it has arrays with unspecified number of dimensions, and unspecified elements. Or two-dimensional arrays of complex numbers. Or two dimensional 5x16 arrays of vectors of uncpecified type. You can even define all objects that satisfy some property to be a new type, and you can give a property through function that checks for it.). And so on and on and on. The text on the URL above is 15 megs, but its well worth at least browsing, as it contains large number of new concepts you'd never think of otherwise. For instance, function calls that look like (function arg arg arg :keyword arg :keyword arg :keyword arg) (and you can specify defaults for arguments that don't appear in the call, and you can even check whether they appeared). As for the MUD languages, the Cold manual is at <A HREF="http://ice.cold.org:1180/bin/help?node=$help_coldc">http://ice.cold.org:1180/bin/help?node=$help_coldc</A> MOO manuals should be easy to find and is a canon example of the server that is secure enough to allow user-level programming (but is too slow for it. ;) ) And reading up on C, C++ and Java goes without saying. :) Miro </PRE> <!--X-Body-of-Message-End--> <!--X-MsgBody-End--> <!--X-Follow-Ups--> <HR> <ul compact><li><strong>Follow-Ups</strong>: <ul> <li><strong><A NAME="00669" HREF="msg00669.html">Re: [MUD-Dev] Languages</A></strong> <ul compact><li><em>From:</em> clawrenc#cup,hp.com</li></ul> </UL></LI></UL> <!--X-Follow-Ups-End--> <!--X-References--> <UL><LI><STRONG>References</STRONG>: <UL> <LI><STRONG><A NAME="00606" HREF="msg00606.html">Re: [MUD-Dev] Languages</A></STRONG> <UL><LI><EM>From:</EM> cg#ami-cg,GraySage.Edmonton.AB.CA (Chris Gray)</LI></UL></LI> </UL></LI></UL> <!--X-References-End--> <!--X-BotPNI--> <UL> <LI>Prev by Date: <STRONG><A HREF="msg00622.html">Re: [MUD-Dev] Re: Administrative notes</A></STRONG> </LI> <LI>Next by Date: <STRONG><A HREF="msg00624.html">Re: [MUD-Dev] Re: Administrative notes</A></STRONG> </LI> <LI>Prev by thread: <STRONG><A HREF="msg00606.html">Re: [MUD-Dev] Languages</A></STRONG> </LI> <LI>Next by thread: <STRONG><A HREF="msg00669.html">Re: [MUD-Dev] Languages</A></STRONG> </LI> <LI>Index(es): <UL> <LI><A HREF="index.html#00623"><STRONG>Date</STRONG></A></LI> <LI><A HREF="thread.html#00623"><STRONG>Thread</STRONG></A></LI> </UL> </LI> </UL> <!--X-BotPNI-End--> <!--X-User-Footer--> <!--X-User-Footer-End--> <ul><li>Thread context: <BLOCKQUOTE><UL> <LI><STRONG>Re: [MUD-Dev] Languages</STRONG>, <EM>(continued)</EM> <ul compact> <ul compact> <ul compact> <LI><strong><A NAME="00648" HREF="msg00648.html">Re: [MUD-Dev] Languages</A></strong>, coder <a href="mailto:coder#ibm,net">coder#ibm,net</a>, Wed 21 May 1997, 12:13 GMT </LI> </ul> <LI><strong><A NAME="00647" HREF="msg00647.html">Re: [MUD-Dev] Languages</A></strong>, clawrenc <a href="mailto:clawrenc#cup,hp.com">clawrenc#cup,hp.com</a>, Wed 21 May 1997, 08:38 GMT </LI> </ul> <LI><strong><A NAME="00603" HREF="msg00603.html">Re: [MUD-Dev] Languages</A></strong>, Chris Gray <a href="mailto:cg#ami-cg,GraySage.Edmonton.AB.CA">cg#ami-cg,GraySage.Edmonton.AB.CA</a>, Tue 20 May 1997, 00:17 GMT </LI> <LI><strong><A NAME="00606" HREF="msg00606.html">Re: [MUD-Dev] Languages</A></strong>, Chris Gray <a href="mailto:cg#ami-cg,GraySage.Edmonton.AB.CA">cg#ami-cg,GraySage.Edmonton.AB.CA</a>, Tue 20 May 1997, 02:12 GMT <UL> <LI><strong><A NAME="00623" HREF="msg00623.html">Re: [MUD-Dev] Languages</A></strong>, Miroslav Silovic <a href="mailto:silovic#srce,hr">silovic#srce,hr</a>, Tue 20 May 1997, 16:47 GMT <UL> <LI><strong><A NAME="00669" HREF="msg00669.html">Re: [MUD-Dev] Languages</A></strong>, clawrenc <a href="mailto:clawrenc#cup,hp.com">clawrenc#cup,hp.com</a>, Thu 22 May 1997, 00:19 GMT </LI> </UL> </LI> </UL> </LI> <LI><strong><A NAME="00616" HREF="msg00616.html">Re: [MUD-Dev] Languages</A></strong>, Jeff Kesselman <a href="mailto:jeffk#tenetwork,com">jeffk#tenetwork,com</a>, Tue 20 May 1997, 11:29 GMT </LI> <LI><strong><A NAME="00618" HREF="msg00618.html">Re: [MUD-Dev] Languages</A></strong>, Jeff Kesselman <a href="mailto:jeffk#tenetwork,com">jeffk#tenetwork,com</a>, Tue 20 May 1997, 11:39 GMT </LI> <LI><strong><A NAME="00627" HREF="msg00627.html">Re: [MUD-Dev] Languages</A></strong>, Chris Gray <a href="mailto:cg#ami-cg,GraySage.Edmonton.AB.CA">cg#ami-cg,GraySage.Edmonton.AB.CA</a>, Tue 20 May 1997, 21:47 GMT </LI> </ul> </LI> </UL></BLOCKQUOTE> </ul> <hr> <center> [ <a href="../">Other Periods</a> | <a href="../../">Other mailing lists</a> | <a href="/search.php3">Search</a> ] </center> <hr> </body> </html>