In a programming language, humans can express a sequence of steps, or instructions, for a computer to follow. This representation is a computer program. It is translated by another computer program, known as a compiler or interpreter, into a form that the computer can understand and carry out or "execute". There are hundreds, if not thousands, of programming languages that have been developed with various features over the past 50 years.
I taught two courses at the University of Mississippi on programming languages for senior-level undergraduates and graduate students. From 2005 to 2007, I taught "Organization of Programming Languages", which surveyed a variety of programming languages and examined their characteristics. From 2004 to 2007, I taught "Compiler Construction", in which students learned about programming language implementation by writing a compiler for a subset of the C programming language. These courses are essential for students embarking on a career in software development. By understanding the design and implementation of programming languages, they become better programmers.
My first experience in computer programming came as an undergraduate at Western Michigan University in the late 1970s. I was exposed to a variety of programming languages there, including BASIC, COBOL, FORTRAN, PASCAL, GPSS, SNOBOL, and ALGOL. (Back then, all-uppercase names were in vogue.) I am concerned that many of today's students are not exposed to a variety of languages. They receive heavy indoctrination in the C/C++/Java idiom, but see few alternatives.
My first use of the C programming language was in 1982 at Oracle. I was immediately struck by its simplicity and elegance. I have written more programs in C in my career than in any other language. My first experience in language translation came in the early 1980s when I developed preprocessors for IBM and Oracle.
At CACI in the late 1980s, I wrote a code generator for the Simscript II.5 compiler and developed a portable version of the Simscript II.5 run-time library. I was one of the designers of Modsim, an object-oriented language for computer simulation, and I wrote the first Modsim compiler. Simscript and Modsim are simulation programming languages and general-purpose programming languages.
Also at CACI, I led the team that created SimGraphics II, a cross-platform software library enabling Simscript and Modsim programs to draw graphs and graphics, animate simulations, and provide graphical user interfaces. The ability to "write once, run anywhere" trumpeted by Java in the mid-1990s, was achieved several years earlier by Simscript and Modsim because of this library.
In 2002, CACI asked me to lead the design of the successor to Simscript II.5. I gladly agreed and the first thing I did was recruit Dr. Harry M. Markowitz to be on the design team. Dr. Markowitz invented Simscript I and Simscript II in the 1960s, and I got to know him when he advised CACI on extensions to Simscript II.5 in the late 1980s. In addition to being a pioneer in computer science, Dr. Markowitz is a Nobel laureate in economics. It has been one of the great privileges of my career to collaborate with Dr. Markowitz on Simscript III.
The Simscript III language emerged by adding object-oriented and other features to the Simscript II.5 language, in a manner not unlike Bjarne Stroustrup's C++ extensions of C. A particularly challenging task was the reengineering of the Simscript II.5 compiler to accommodate the new features. My longtime collaborator Steve Bailey led the implementation. Ana Marjanski of CACI was the manager of the project. The first release of Simscript III occurred in 2005.
The Simscript III language aims for simplicity, expressiveness, and readability. I will illustrate here by showing how to traverse a linked list of objects. Suppose the serviceQueue of a repair shop is a linked list of Car objects waiting for service. The following snippet of Simscript III code writes the model of each car waiting in the queue:
define car as a Car reference variable
for each car in serviceQueue(shop)
write model(car) as t *, /
The same logic expressed in C++ is considerably more complex and less readable:
for (pos = shop->serviceQueue.begin();
pos != shop->serviceQueue.end(); ++pos)
car = *pos;
cout << car->model << endl;
I consider multiple inheritance to be an essential feature of an object-oriented programming language. Both Modsim and Simscript III support multiple inheritance. (I implemented multiple inheritance in Modsim before Stroustrup added the feature to C++.) Multiple inheritance is the feature I would most like to see added to Java.
As a computer science professor at the University of Mississippi, I had the opportunity to work with two talented graduate students, Derek Park and Ben Pharr, interested in programming languages. In Derek's 2006 Master's thesis and conference paper, he well articulates the challenge of correctly freeing all resources acquired by Java programs in the event of unexpected program failure, and he proposes a solution to simplify the process. In Ben's 2007 Master's thesis, he instructively compares and contrasts the features of seven object-oriented programming languages.
D. A. Park and S. V. Rice, "A Framework for Unified Resource Management in Java," in Proceedings of the 4th International Conference on Principles and Practices of Programming in Java, Mannheim, Germany, 2006
S. V. Rice, A. Marjanski, H. M. Markowitz, and S. M. Bailey, "The Simscript III Programming Language for Modular Object-Oriented Simulation," in Proceedings of the 2005 Winter Simulation Conference, Orlando, FL, 2005 (pdf)
S. V. Rice, A. Marjanski, H. M. Markowitz, and S. M. Bailey, "Object-Oriented Simscript," in Proceedings of the 37th Annual Simulation Symposium, Arlington, VA, 2004 (pdf)
R. Belanger, B. Donovan, K. Morse, S. Rice, and D. Rockower, Modsim: A Language for Object-Oriented Simulation, CACI Products Company, La Jolla, CA, 1989