Est. 1962 Intermediate

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

Paradigm Discrete-event simulation, built on an entity-attribute-set world view with an event-driven scheduler and a process interaction layer; otherwise an imperative, procedural, English-like general-purpose language. SIMSCRIPT III adds class-based object orientation with multiple inheritance, process methods and modules with public interfaces and private implementations
Typing Static and declaration-based. Values have a 'mode' - integer, real, double, alpha, text or pointer - fixed by define statements in the preamble or in a routine; SIMSCRIPT III added strong type checking and typed references in place of the untyped pointer
First Appeared 1962, in RAND Research Memorandum RM-3310-PR, 'SIMSCRIPT: A Simulation Programming Language' by Markowitz, Hausner and Karr, carrying a 1962 RAND copyright; the Prentice-Hall book of the same title followed in 1963. The first implementation was a preprocessor that translated SIMSCRIPT into FORTRAN on the IBM 7090
Latest Version SIMSCRIPT III Release 5.1, which CACI Products Company was announcing on its SIMSCRIPT web site by late 2019; no newer release has been publicly announced, and CACI's SIMSCRIPT web presence went dark between 2020 and 2021 - simscript.com no longer responds at all, and caciasl.com was re-registered by an unrelated party in 2021

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:

LevelContents
1-3General-purpose programming: variables, arrays, expressions, control flow, routines, I/O
4The entity-attribute-set world view; event notices and event routines
5The 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 pointer mode
  • 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

1962
The RAND Corporation publishes Research Memorandum RM-3310-PR, 'SIMSCRIPT: A Simulation Programming Language' by Harry Max Markowitz, Bernard Hausner and H. W. Karr, under a 1962 RAND copyright. The work is done for Project RAND, the U.S. Air Force research contract; RAND's abstract makes the pitch that the language 'reduces the time needed to program simulations of even moderate complexity and provides increased flexibility in modifying such models.' The first implementation is a preprocessor that emits FORTRAN for the IBM 7090
1962
In July, Herb Karr and Harry Markowitz leave RAND and found California Analysis Center, Inc. in Santa Monica to support and train users of the newly public-domain language. The company is renamed Consolidated Analysis Centers, Inc. in 1967 and takes the acronym CACI itself as its legal name in 1973; it is now CACI International
1963
Prentice-Hall publishes the Markowitz, Hausner and Karr book 'SIMSCRIPT: A Simulation Programming Language'. Over the summer, Hausner is employed by the Norwegian Computing Center, where Kristen Nygaard and Ole-Johan Dahl are designing Simula. Their 1978 history of Simula records that through Hausner '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' - and that their reaction was a 'cultural clash' that made the Simula design goal of ALGOL-like security conscious and explicit
1965
CACI ships SIMSCRIPT I.5, a compiler rather than a preprocessor, targeting the IBM 7090/7094 - which by CACI's own account made it one of the earliest independent companies to develop and sell proprietary software. In the same year F. M. Tonge and colleagues publish 'Quikscript - A Simscript-like Language for the G-20' in Communications of the ACM 8(6), pages 350-354, adapting the design to the Bendix G-20
1968
RAND publishes SIMSCRIPT II, again for the U.S. Air Force, as R-460-PR by Philip J. Kiviat, Richard Villanueva and Markowitz, with Kiviat and Villanueva's reference manual as RM-5776-PR. The redesign abandons the punched coding forms of SIMSCRIPT I for free-form English-like text and organises the language into five ascending 'levels', from ordinary programming statements up through the entity-attribute-set machinery and the simulation-specific features
1971
CACI introduces SIMSCRIPT II.5, the version that will carry the language for the next fifty years. It adds the process-interaction world view - processes and resources layered on top of the event scheduler - to the original event orientation, and is progressively ported from mainframes down to minicomputers and, in the 1980s, to the PC
1988
SIMGRAPHICS, CACI's integrated graphics and forms subsystem, is presented at the 20th Winter Simulation Conference in the paper 'SIMSCRIPT II.5 and SIMGRAPHICS'. It lets a modeler draw icons, presentation graphs and input forms and bind them to entities, and it is what turns SIMSCRIPT models into animated wargames rather than line-printer output. Around the same time CACI builds a family of packaged simulators on top of the language, among them NETWORK II.5, COMNET II.5 and SIMFACTORY II.5
1989
The Operations Research Society of America awards Markowitz the John von Neumann Theory Prize for contributions in three fields - portfolio theory, sparse matrix methods and simulation language programming, the last of these being SIMSCRIPT. He receives the Nobel Memorial Prize in Economic Sciences the following year, shared with Merton Miller and William Sharpe, for the portfolio work
2005
Stephen V. Rice, Ana Marjanski, Harry M. Markowitz and Stephen M. Bailey present 'The SIMSCRIPT III Programming Language for Modular Object-Oriented Simulation' at the Winter Simulation Conference, following a 2004 WSC paper on how SIMSCRIPT II.5 was extended. SIMSCRIPT III is a superset of II.5 whose object-oriented features, the authors write, 'were influenced by C++, Eiffel, Java, MODSIM, and SIMULA'
2007
CACI's own history page dates the release of SIMSCRIPT III to this year, describing it as adding object orientation and modularity 'along with the capacity to execute on the current 32-bit and the emerging 64-bit processing chips'. It is offered as the migration path for users of CACI's Modula-2-derived MODSIM III, with an automatic language converter
2013
CACI's archived download pages track the SIMSCRIPT III line: Release 3.0 is the current download in late 2013 and still in mid-2016, Release 4.0 by 2018, and by late 2019 the site is announcing Release 5.1 with SimEclipse - an Eclipse-based IDE with on-the-fly syntax and semantic checking, class and call hierarchy views, and integrated graphics editors - plus a business-rules interpreter (which CACI had also advertised with Release 3.0) and a checkpoint/restart facility for war-game scenarios
2021
CACI's SIMSCRIPT web presence disappears. The product site's last archived working capture is of the mirror at simscript.net in April 2021 - simscript.com itself was last archived serving pages in February 2020 - and simscript.net now redirects to a domain-parking lander while simscript.com does not respond at all; caciasl.com, the CACI Advanced Simulation Lab site, is erroring on 14 April 2021 and has been re-registered by an unrelated party as a Norwegian WordPress site by June 2021, carrying consumer-lending content from August 2021 onward. No public successor to Release 5.1 has been announced
2025
SIMSCRIPT is nevertheless still in production. The Version Description Document for JTLS-GO 6.4.1.0, dated August 2025, lists the 'SIMSCRIPT III (SIMSCRIPT to C) translator/compiler' among the tools required to rebuild the simulation from source, and the JTLS-GO Executive Overview of September 2025 devotes a section to explaining the SIMSCRIPT world view to new users. Markowitz himself had died in San Diego on 22 June 2023, aged 95

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

Language Influence

Influenced By

Influenced

Simula QUIKSCRIPT

Running Today

Run examples using the official Docker image:

docker pull
Last updated: