SIMSCRIPT
SIMSCRIPT is the discrete-event simulation language conceived by Harry Markowitz, Bernard Hausner and Herbert Karr at the RAND Corporation in 1962 - the language that gave programming the entity-attribute-set world view, taught Kristen Nygaard's group about pointers on the way to Simula, and still runs the U.S. military's theater-level wargames six decades later
Created by Harry M. Markowitz, Bernard Hausner and Herbert W. Karr at the RAND Corporation, working on Project RAND for the U.S. Air Force. Markowitz supplied the entity-attribute-set world view, Hausner wrote the implementation, and Karr wrote the manual and the teaching material. Later generations were the work of Philip J. Kiviat, Richard Villanueva and Markowitz at RAND (SIMSCRIPT II) and of CACI Products Company, where Ana Marjanski headed the SIMSCRIPT III project with Stephen V. Rice, Markowitz and Stephen M. Bailey
SIMSCRIPT is a discrete-event simulation language, conceived in 1962 by Harry Markowitz and Bernard Hausner at the RAND Corporation, with Herbert Karr writing the manuals that taught people to use it. It is one of the oldest programming languages still in production use, and almost certainly the oldest one whose surviving production users are wargames.
Its central contribution is not a syntax but a way of describing the world. Before you write a line of executable SIMSCRIPT you write a preamble declaring what exists: entities (things), their attributes (properties), and sets (collections that entities own and belong to). The passage of time is handled by events - instantaneous occurrences, each with a routine that updates the state of the system - which the language’s built-in scheduler holds in a future events set and fires in timestamp order. Simulated time jumps from event to event rather than ticking. That triple of entity, attribute and set, together with an automatic timing routine, was the language’s whole argument, and it turned out to be durable enough that the September 2025 edition of the JTLS-GO Executive Overview still explains it to new users almost word for word as Markowitz did.
History and origins
Markowitz came to RAND in the 1950s having already written the paper on portfolio selection that would eventually win him a Nobel Memorial Prize. At RAND he worked on large-scale simulations - manufacturing, logistics, military operations - and ran into the problem that motivated the language. Simulations of even moderate complexity took months to program in FORTRAN, and the whole point of a simulation study is that you change the model repeatedly as the preliminary results come in. RAND’s own abstract for RM-3310 puts it in exactly those terms: SIMSCRIPT “reduces the time needed to program simulations of even moderate complexity and provides increased flexibility in modifying such models in accordance with the findings of preliminary analysis and other circumstances.”
The division of labour was clean. Markowitz supplied the world view - entities, attributes, sets, events. Hausner, a RAND programmer, built the implementation: a preprocessor that read SIMSCRIPT and emitted FORTRAN for the IBM 7090. Karr, a friend Markowitz brought in, wrote the manual. The result was published in 1962 as RAND Research Memorandum RM-3310-PR, with a companion technical appendix as RM-3813, and as a Prentice-Hall book the following year.
SIMSCRIPT I is also where the buddy memory allocation algorithm came from: Markowitz devised it to manage the language’s dynamically created and destroyed temporary entities, and it went on to become a textbook allocator in its own right.
Because the work was done under an Air Force contract, the language went into the public domain. In July 1962 Karr and Markowitz left RAND and founded California Analysis Center, Inc. in Santa Monica - a company whose first office, in CACI’s telling, was a phone booth and a park bench - to sell training and support for a language nobody owned. The name became Consolidated Analysis Centers, Inc. in 1967, and CACI outright in 1973; the company that started as a SIMSCRIPT consultancy is now a multibillion-dollar defense contractor. In 1965 CACI released SIMSCRIPT I.5, a real compiler for the IBM 7090/7094 rather than a FORTRAN preprocessor, which by CACI’s account made it one of the earliest independent companies to develop and sell proprietary software.
The Simula connection
The most consequential thing SIMSCRIPT did in its first decade happened by accident. In the summer of 1963 Bernard Hausner was employed by the Norwegian Computing Center, where Kristen Nygaard and Ole-Johan Dahl were working on Simula. Their 1978 history of the Simula languages records what came of it:
“Hausner was one of the fathers of SIMSCRIPT (Markowitz, Hausner, Karr 1963), and through him we got to know the SIMSCRIPT language and its implementation rather well. This was our first encounter with the pointer concept in a high level language. To some extent, however, our reaction to SIMSCRIPT can best be described as that of a ‘cultural clash’. It helped to make an important design goal conscious and explicit.”
The clash was over safety. SIMSCRIPT’s pointers were raw machine addresses in a language with no type discipline over them; Nygaard and Dahl decided their language had to offer the “security” of ALGOL 60, where an erroneous program is caught by the compiler or at run time rather than quietly corrupting memory. That decision - typed, checked references instead of untyped pointers - is one of the things that made Simula’s classes into the ancestor of object-oriented programming rather than a curiosity. SIMSCRIPT’s influence on Simula is thus partly by imitation and partly by reaction.
Elsewhere the design was adapted directly: F. M. Tonge and co-authors published QUIKSCRIPT, “A Simscript-like Language for the G-20”, in Communications of the ACM in June 1965.
SIMSCRIPT II and the level structure
The 1968 redesign, published by RAND as R-460-PR under the names of Philip J. Kiviat, Richard Villanueva and Markowitz, is the version that established SIMSCRIPT’s characteristic look. Gone were the punched definition forms of SIMSCRIPT I; in came free-form, deliberately English-like source text in which let X = 10 can be written X = 10, incrementing is add 1 to X, and an if block is terminated not by end if or fi but by the word always:
define J as an integer variable
read J
if 1 <= J <= dim.f(Y)
write Y(J) as "The value is ", d(7,2), /
else ''invalid entry
write as "The index is out of bounds!", /
always
Two details in that fragment are pure SIMSCRIPT. The chained comparison 1 <= J <= dim.f(Y) is an abbreviation for the conjunction; the reference grammar allows a relational operator to be repeated across a chain of expressions. And ''invalid entry is a comment: per the reference syntax, comments are enclosed in quotation marks “formed by two consecutive apostrophes”, and the closing pair may be omitted if the comment is the last item on the line. A variable name is any sequence of letters, digits and periods that does not form a number, and - remarkably - SIMSCRIPT II.5 has no reserved words at all: CACI’s manual notes that the keywords “are not reserved words and thus may be used as variable names”, while advising against it because it produces unreadable programs. Combined with the absence of an explicit statement delimiter, that is also why the compiler’s error recovery can cascade.
The other structural idea of SIMSCRIPT II was that the language was organised in ascending levels, so that it could be taught and adopted incrementally:
| Level | Contents |
|---|---|
| 1-3 | General-purpose programming: variables, arrays, expressions, control flow, routines, I/O |
| 4 | The entity-attribute-set world view; event notices and event routines |
| 5 | The simulation machinery proper: the timing routine, random number generation and statistics |
A programmer could use levels 1 to 3 and have an ordinary if idiosyncratic procedural language; the simulation content only arrived at levels 4 and 5. A version of SIMSCRIPT written in PL/I, based on the public-domain RAND release, was developed around 1968-1969 and is recorded in the Encyclopedia of Computer Science and Technology.
SIMSCRIPT II.5, introduced by CACI in 1971, is the version that mattered commercially and the one practitioners generally mean when they say “SIMSCRIPT”. Its main addition was the process interaction world view layered on top of the event world view: a process is a collection of related events separated in time, written as straight-line code that can work for a duration, request and relinquish resources, and be suspended and resumed by the scheduler. The classic textbook example, from Edward Russell’s CACI manual Building Simulation Models with SIMSCRIPT II.5, is an aircraft:
process AIRPLANE
call TOWER giving GATE yielding RUNWAY
work TAXI.TIME (GATE, RUNWAY) minutes
request 1 RUNWAY
work TAKEOFF.TIME (AIRPLANE) minutes
relinquish 1 RUNWAY
end '' process AIRPLANE
Over the following decades CACI ported SIMSCRIPT II.5 from mainframes down through minicomputers to the PC, added the SIMGRAPHICS graphical subsystem (presented at the 1988 Winter Simulation Conference), a database interface, and an integrated development environment - and built packaged simulators on top of it, including SIMFACTORY II.5 for manufacturing, NETWORK II.5 for computer systems and COMNET II.5 for communications networks.
SIMSCRIPT III
By the early 2000s the problem was that SIMSCRIPT’s world view had been overtaken by the vocabulary it had helped create. Markowitz recalled telling Ana Marjanski, who headed the SIMSCRIPT III project at CACI, that SIMSCRIPT already had entities, attributes and sets - and being told that the clients wanted objects.
SIMSCRIPT III, presented at the 2004 and 2005 Winter Simulation Conferences by Stephen V. Rice, Ana Marjanski, Markowitz and Stephen M. Bailey, is a strict superset of SIMSCRIPT II.5 that adds:
- Classes and objects, with multiple inheritance, and methods including process methods - object activities that occupy simulated time
- Modularity: modules and packages that are imported by name, with public interfaces separated from private implementations
- Stronger typing: type checking across module boundaries and far more extensive compile-time error reporting, in place of II.5’s generic untyped
pointermode - 64-bit support, giving the large address spaces that high-fidelity theater-level scenarios need
The authors were explicit that the object-oriented features “were influenced by C++, Eiffel, Java, MODSIM, and SIMULA” - which closes the loop rather neatly, given where Simula’s designers first saw a pointer. Implementation-wise, SIMSCRIPT III is a translator to C: the JTLS documentation refers to it plainly as the “SIMSCRIPT III (SIMSCRIPT to C) translator/compiler”, which is why CACI’s Windows editions listed a specific Microsoft Visual Studio version as a prerequisite.
CACI dated the release of SIMSCRIPT III to 2007 on its own history page. Its archived platform tables for the Release 4.0 era listed 32-bit Windows XP/Vista/7 with Visual Studio 2005/2008/2010, 32-bit Sun SPARC under Solaris 8 or later, 32-bit Linux on Red Hat Enterprise 4, 64-bit Linux on Red Hat Enterprise 4 through 5.5 for AMD64, and 64-bit Windows 7; by the Release 5 era the offering had narrowed to 64-bit Windows 7/10 with Visual Studio 2015-2017 and 64-bit Red Hat Enterprise Linux 7.4 or higher. The final publicly announced version, Release 5.1, added SimEclipse, an Eclipse-based development environment with on-the-fly syntax and semantic error highlighting, content assist, class-hierarchy and call-hierarchy views and integrated graphics editors, together with a business-rules interpreter and a checkpoint/restart facility aimed squarely at live training exercises.
Current status
SIMSCRIPT’s status is genuinely split, and it is worth being precise about it.
The vendor is gone from the web. CACI’s SIMSCRIPT product site was still serving product and download pages when its mirror at simscript.net was archived in April 2021; simscript.com itself was last archived serving pages in early 2020, resolves today to a parking address that does not answer, and simscript.net now redirects to a domain-parking lander. caciasl.com, the site of CACI’s Advanced Simulation Lab in San Diego, was erroring on 14 April 2021 and had been re-registered by an unrelated party as a Norwegian WordPress site by June 2021, running consumer-lending content from that August. The pages carried CACI copyright footers that were never brought past 2019, and some sections were still stamped “Copyright 1995-2011” as late as 2017. No release after 5.1 has been publicly announced, and there is no public issue tracker, package repository, mailing list or open-source implementation to look at instead. On the ordinary measures of language liveness, SIMSCRIPT is dormant.
The code is still running. JTLS-GO, the theater-level wargame used by U.S. and allied commands, is SIMSCRIPT: version 6.4.0.0 was delivered on 30 June 2025, its August 2025 Version Description Document lists the SIMSCRIPT III translator among the tools a government organisation needs in order to recompile from source, and version 7.0 was planned for August 2026. Its September 2025 Executive Overview still contains a section headed “Why SIMSCRIPT?”, giving two reasons for choosing an event-driven simulation: that “the key processes of theater-level, air-sea-land battle are most easily visualized as collections of discrete events”, and that “event-driven simulations are relatively fast which makes efficient use of computing resources” - a comparative claim the document makes without benchmark figures. That is not a legacy footnote; it is a design rationale being restated to new users sixty-three years after RM-3310.
This is an unusual failure mode for a language: the compiler is effectively unobtainable to the general public while the models written with it are actively maintained, because the population that needs the compiler - U.S. government organisations holding the source - is small, well-defined, and served by other channels.
Why it matters
Three things.
First, SIMSCRIPT invented the vocabulary that discrete-event simulation still uses. Entities with attributes, sets that entities own and belong to, event notices scheduled into a future events list, simulated time that advances event to event rather than by fixed increments - all of that is standard equipment now - in SimPy, in Arena, in AnyLogic, and in every hand-rolled event loop in a simulation textbook. It was not standard equipment in 1962.
Second, it is a load-bearing part of the prehistory of object-oriented programming. Simula’s designers learned about heap-allocated, dynamically created objects reached by pointers from Hausner and SIMSCRIPT, and defined their own language partly in opposition to what they found there. Markowitz’s account of being told that “the clients want objects” fifty years later is the same story from the other end.
Third, it is the best available evidence that a well-chosen domain abstraction outlives almost everything else about a language. SIMSCRIPT’s syntax is dated, its tooling is a decade behind, its vendor has vanished from the internet, and it has no community in the modern sense. What it has is a world view that fits the problem so exactly that the organisations who depend on it have found it cheaper to keep a 1971-vintage language alive than to re-express their models in anything newer.
Markowitz won a Nobel Memorial Prize for portfolio theory, but the John von Neumann Theory Prize he received the year before, in 1989, cited three bodies of work: portfolio theory, sparse matrix methods, and simulation language programming. SIMSCRIPT is the third one.
Timeline
Notable Uses & Legacy
JTLS-GO, the Joint Theater Level Simulation
JTLS is a multi-sided, interactive theater-level wargame modelling air, ground, naval, special-forces, intelligence and logistics operations. Development began in 1983 with funding from U.S. Readiness Command, the U.S. Army Concepts Analysis Agency and the U.S. Army War College, and it remains in service: version 6.4.0.0 was delivered on 30 June 2025 and, as of September 2026, the JTLS-GO site still lists version 7.0 as under development and planned for release in August 2026. Its combat engine is SIMSCRIPT code - the published Version Description Documents list the SIMSCRIPT III translator as a build requirement and note that shipped executables are statically linked against the SIMSCRIPT libraries - and its Executive Overview explains the game's units and orders directly in terms of SIMSCRIPT entities, attributes, sets and the Future Events Set. A 2020 survey paper quotes the JTLS authors as saying that 'the only reason JTLS was up and running long before other models that started around the same time was because of the SIMSCRIPT language'
Corps Battle Simulation (CBS)
The U.S. Army's corps-level training simulation, developed over more than a decade at Lawrence Livermore National Laboratory and described at the 1997 Winter Simulation Conference. CBS is written in SIMSCRIPT II.5, with its network, workstation and graphics software written in C. In 1991 it was linked to the U.S. Air Force's AWSIM in the community experiment that grew into the Aggregate Level Simulation Protocol, making SIMSCRIPT code one endpoint of the first large-scale distributed constructive simulations
CACI's packaged simulators
Rather than sell only a compiler, CACI built turnkey simulation products on top of its own language and sold those. SIMFACTORY II.5 - described in Winter Simulation Conference tutorials from 1989 onward as 'a factory simulator written in SIMSCRIPT II.5' that let users build a plant model through a mouse-driven graphical interface without programming - was joined by NETWORK II.5 for computer-system performance and COMNET II.5 for communications networks. CACI marketed the whole family on the strength of its own language, and its product literature claimed simulation solutions worldwide built on a SIMSCRIPT base
U.S. Air Force logistics and force-employment studies at RAND
SIMSCRIPT existed in the first place because Project RAND analysts needed to build large logistics and force-employment models for the Air Force and were losing months to hand-coded FORTRAN. RM-3310 and its companion RM-3813, the 'Technical Appendix on the SIMSCRIPT Simulation Programming Language', were written to make that work repeatable, and both SIMSCRIPT I and SIMSCRIPT II were produced under Air Force funding at RAND before being handed to industry
Military simulation more broadly
A 2020 survey of the language in the Journal of Physics: Conference Series, written from the perspective of a military modeler, lists the Tactical Air-Land Operations Model (COMMANDER) alongside JTLS and CBS as world-famous simulation programs built in SIMSCRIPT, and argues that the entity-attribute-set world view is what makes combat at theater, corps, division and battalion level tractable to describe. It notes that when practitioners say SIMSCRIPT they usually mean SIMSCRIPT II.5