MUMPS Technial Information

Acknowledgement

A modified form of the pattern match code from FreeMUMPS is now used in this implementation - many thanks to the FreeMUMPS people.

Policy

This release is provided free of charge to anyone who wants it (via the net).

Technical Stuff


We felt that a freely available MUMPS implementation was required to keep the language alive and develop the MUMPS language as a tool in its own right.

The environment is implemented as a p-code compiler and interpreter. At this stage, the compiler efficiency and runtime speed leave a bit to be desired. They are, however, quite quick enough for small to medium sized systems.

Variable, routine and tag names are significant only in the first eight bytes.

Local variable string length maximum is 32767 bytes. Global variable string length maximum is the blocksize (less block overhead of 20 to 30 bytes) or 32767 whichever is the lesser. Maximum number of globals per uci is about block size divided by 20.

The maximum size of a compiled routine or a routine source line is the same as the global variable string length maximum. Therefore, if you need large routines, use a large block size. The maximum number of tags in a routine is 255.

Routines are run from a common shared memory area to optimize memory usage and speed in multi user environemnts. The -r switch at environemnt initialization specifies the number of mb of memory to reserve for this use. Should there be insufficient memory to load a routine into the shared memory area, an error is returned to the application.

Although the database design is based on B trees, it is nothing like any existing MUMPS implementations. We hope that the future will show this design to be quite fast.

Database block size is specified at database creation time and is from 4 to 256 kb. Database size is specified at create time. The minimum size is 100 blocks and the maximum size is 2147483647 blocks (ie. with 256kb blocks, about 500 terrabytes - if the O/S and hardware can handle it).
The maximum size to which a database can be expanded is map block size in bytes minus 1024 times 8 blocks (MBB-1024*8 blocks). Database integrity checking is implemented (see $&%IC() and routine ^IC).

As networking has become such an important part of the computing environment, we have attempted to make the tcp/ip interface as usefull as possible. We do, however, realise, that there is more work to do in this area.

Enjoy - the MUMPS development Team.