Jump to content

Message Parsing Interpreter

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 69.11.17.178 (talk) at 01:03, 11 March 2014 (MPI limits). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The Message Parsing Interpreter (MPI for short, not to be confused with the Message Passing Interface) is a Lisp-like programming language based on text replacement that is used on Fuzzball MUCK servers, starting with version 2.2fb5.00. It is generally considered easier to learn and use than MUF, and enjoys a large popularity among Fuzzball MUCK users.

MPI originally stood for "My Personal Insanity" — a temporary project name used by the programmer when it was first implemented during a 3 week coding binge. It was later backronymed to "Message Parsing Interpreter" to keep the acronym, yet sound more respectable.

When online, the command MPI CATEGORY provides a listing of the available MPI topics arranged by function. The most common use for MPI is for report generation and formatting text strings, however it does support the creation of macros, conditional logic, and looping for a limited number of iterations.

Command Structure

MPI could be viewed as a form of markup language as instructions are encapsulated within bracket marks to differentiate them from regular text. The MPI command is specified first, followed by a colon, and then command arguments, separated by commas. If one of the arguments is a string that contains a comma, it is escaped by using a backslash or the {lit:} (for literal) command.

{ command : argument1, argument2 }

Commands can be nested, taking the place of one or more arguments within the parent command to form more complex code:

{tell: {name:me} just looked at {name:this}., {owner:this}}

Hello World

The standard "Hello World" program would look like this:

{tell:Hello World, me}

More complex substitution

More complex code in MPI may become difficult to read. Some examples: This sequence informs the user of the next database save:

Next scheduled save will occur at {convsecs:{add:{prop:_sys/dumpinterval,#0},
{prop:_sys/lastdumptime,#0}}}\, being in {ltimestr:{subt:{add:
{prop:_sys/dumpinterval,#0},{prop:_sys/lastdumptime,#0}},{secs}}} 

Next, a loop of a fixed range of iterations that generates random text. A property named ascii on the same object would need to be loaded with the ASCII characters from the 32-127:

{null:{store:,launchcode,this},{if:{&arg},{store:{min:60,{max:1,{&arg}}},count,this},
{store:{dice:60},count,this}},{while:{not:{eq:-1,{store:{subt:{prop:count,this},1},count,this}}},
{store:{prop:launchcode,this}{midstr:{prop:ascii,this},{store:{dice:94},tempcharval,this},
{prop:tempcharval,this}},launchcode,this}}}

Combining MPI with the MUCK properties system can allow for a loop with an indefinite number of iterations. One might place this inside a property named delayloop and then {eval} it:

{delay:{prop:seconds,this},{lit:Hello World{null:{if:{awake:me},{eval:{prop:delayloop,this}}}}}}

To protect against infinite loops and excessive memory use, MPI code is limited to a very small amount of memory and execution runtime, and a hardwired 26 maximum levels of recursion.

See also

External links