crash, database files can be recovered from journal files. The database engine also supports transaction processing. So, code such as: TStart () Set ^Capital("France")="Paris" Set ^Country("Paris")="France" TCommit implements an ACID transaction. GT.M uses optimistic concurrency control to manage transactions. A plug-in architecture allows the database to be encrypted in order to protect data at rest. GT.M is distributed with reference plug-in that uses GnuPG. Language subsystem Unlike the database where global variable nodes must fit within a database block, local variable strings can grow to 1MB. The GT.M run-time provides dynamic storage allocation with garbage collection. The number of local variables and the number of nodes in local variables are limited only by storage available to the process. The default scope of a local variable is the lifetime of a process. Local variables created within routines using the New command have more limited scope. GT.M routines are dynamically compiled and linked for execution in the address space of each process. With the exception of the 32-bit implementation of GT.M for the x86 Linux platform, object modules can also be placed in shared libraries with the standard ld command, in which case the memory used is shared. This is important because an application such as VistA has over 20,000 routines whose compiled object code exceeds 200MB. A large hospital running VistA can have thousands of concurrently running user processes. With a couple of small exceptions, GT.M includes a nearly complete implementation of ISO standard M (affectionately known as MUMPS for historical reasons). In GT.M, M code can freely call out to C code (or code in other languages with a C compatible interface), and C code can freely call in to M code (so the top level program can be a C main()). For example, is a GT.M module in CPAN, m_python for access from Python or EGTM binding for Erlang. Web services written in GT.M can be deployed under an Internet super server such as inetd or xinetd. Web-enabled applications can use layered software such as EWD or CFMumps. Platforms GT.M is fully supported on the following platforms: AIX on IBM System p Linux on x86_64 and IA-32 (x86) architectures. The YottaDB fork of GT.M adds support for ARM. GT.M is no longer supported on these platforms: HP-UX as of October 2015 (V6.2-002A) OpenVMS as of December 2014 (V6.2-001) Solaris as of December 2015 (V6.2-002A) The code base for GT.M