The EtaMOO package

[Tags: bsd3, program]

LambdaMOO is a network-accessible, multi-user, programmable, interactive system well-suited to the construction of text-based adventure games, conferencing systems, and other collaborative software.

EtaMOO is an experimental multithreaded implementation of LambdaMOO in Haskell with LMDB-backed persistence and anticipated ready support for Unicode MOO strings and 64-bit MOO integers. The implementation follows the specifications of the LambdaMOO Programmer's Manual, and should be compatible with most LambdaMOO databases as of about version 1.8.3 of the LambdaMOO server code.

N.B. This software is still under development and not fully complete.


[Skip to ReadMe]

Properties

Versions0.1.0.0, 0.2.0.0, 0.3.0.0
Change logNone available
Dependenciesarray, async, base (>=4.7 && <5), bytestring, case-insensitive, containers (>=0.4), cryptonite, hashable, haskeline, memory, mtl, network, parsec, pipes, pipes-bytestring, pipes-concurrency (>=2.0.3), pipes-network, random, stm, stm-chans, text (>=1.2.1.2), time (>=1.5), transformers, unix, unordered-containers, vcache, vector (>=0.7) [details]
LicenseBSD3
Copyright© 2014–2016 Robert Leslie
AuthorRob Leslie <rob@mars.org>
MaintainerRob Leslie <rob@mars.org>
Stabilityalpha
CategoryNetwork
Home pagehttp://verement.github.io/etamoo
Bug trackerhttps://github.com/verement/etamoo/issues
Source repositoryhead: git clone https://github.com/verement/etamoo.git
Executablesetamoo
UploadedSat Feb 6 09:45:49 UTC 2016 by RobLeslie
Downloads480 total (9 in last 30 days)
Votes
0 []
StatusDocs not available [build log]
Last success reported on 2016-02-11 [all 1 reports]

Flags

NameDescriptionDefaultType
llvmUse GHC's LLVM backend to compile the codeDisabledAutomatic
64bitEnable 64-bit MOO integersDisabledAutomatic
outbound-networkEnable open_network_connection() by defaultDisabledAutomatic

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for EtaMOO-0.3.0.0

Important!

This is experimental software. While it is now mostly functional, it is not yet fully complete.

Until such time as the EtaMOO database format is well tested and considered stable, please make and keep LambdaMOO-format backup copies of your EtaMOO databases.

About

EtaMOO is a new implementation of the LambdaMOO server written in Haskell.

LambdaMOO is a network-accessible, multi-user, programmable, interactive system well-suited to the construction of text-based adventure games, conferencing systems, and other collaborative software.

EtaMOO differs from LambdaMOO in a few significant ways:

The implementation of EtaMOO otherwise closely follows the specifications of the LambdaMOO Programmer's Manual, and should be compatible with most LambdaMOO databases as of about version 1.8.3 of the LambdaMOO server code.

Installing

EtaMOO is built with Cabal, the Haskell package manager. In the simplest case, running:

cabal install EtaMOO

should automatically download, build, and install the etamoo executable after doing the same for all of its Haskell dependencies.

Cabal itself is part of the Haskell Platform which is available for many distributions and platforms.

There are a few options you can give to cabal install to customize your build:

| Option | Feature | | --------------------- | --------------------------------------------- | | -j | Build in parallel using multiple processors | | -f llvm | Use GHC's LLVM backend to compile the code | | -f 64bit | Enable 64-bit MOO integers |

EtaMOO has non-Haskell dependencies on three external libraries: liblmdb for database persistence, libpcre (with UTF-8 support enabled) for regular expression matching, and, possibly, libcrypt (often part of the standard libraries) for the MOO crypt() built-in function. You should ensure you have these available before installing EtaMOO (e.g. on Debian-derived systems, sudo apt-get install liblmdb-dev libpcre3-dev).

Running

etamoo is nearly a drop-in replacement for the LambdaMOO moo executable; the main difference is that etamoo takes a single database path, rather than both input and output paths. You can run etamoo --help for a command-line synopsis.

EtaMOO uses a native binary database format that allows quick loading and checkpointing, and instantaneous crash recovery. You can create a native database from a LambdaMOO-format database by using etamoo --import. You can also go the other way and convert an EtaMOO database back to a LambdaMOO-format database with etamoo --export.

If you don't already have a database, you can find LambdaMOO-format cores for various MOOs online -- for example there is the venerable LambdaCore, or you can request a character on Waterpoint and then perform a live JHCore extraction. (Note that Waterpoint's core extraction process requires running an actual LambdaMOO server executable on the precore database to obtain the final core database; EtaMOO cannot yet do this itself.)

By default, EtaMOO will make use of all available CPUs for maximum parallelism. If you'd rather limit the number of processors EtaMOO uses, you can use the command-line option +RTS -Nn-RTS where n is the number of processors to use.

If you want to enable statistics from the memory_usage() built-in function, you will need to add +RTS -T -RTS to the command line options.

Limitations

The following LambdaMOO features are currently unsupported:

See also the DIFFERENCES.md file for other differences between EtaMOO and LambdaMOO.

Hacking

Documentation is available for the various types, data structures, and functions used internally by EtaMOO.