Evolution of Operating Systems Designs/Languages as Operating Systems
Up until the advent of VLSI, there were basically two different types of computers, General Character based computers, and Large word Number Crunchers. But when VLSI brought the unit cost of computing down low enough, people began to think in terms of specialized computers, designed and built to do one thing well. One group of people, decided to design a personal computer, something that could be used by novices, and would work just as well as a more complex computer. Another group wanted to transfer artificial intelligence programs to more compact robots instead of hooking up the robot to a mainframe. Rather than install a program with thousands of lines of code on these machines they wanted to keep the complexity and cost of their systems down. Of course by now, we are seeing computers being integrated into our phones, but the designers still want to keep their costs down.
One way of keeping the cost down, was to integrate a few basic operating system commands into an interpreted language. Languages where this was successfully done include: BASIC, Lisp, Smalltalk, and Java.
The first known case of this happening was the Altair kit computer, which was programmed by Microsoft with a program called "Stand Alone Basic". Essentially, Stand Alone Basic was a basic interpreter with operating system commands integrated into the language so that you didn't need a separate operating system. Although I haven't seen this version, I did see a similar program on the Commodore 64, which integrated a number of commands such as Load, Run, Continue, Stop and Reset, as well as Peek and Poke. Essentially, BASIC assumes that anything loaded into it is a BASIC program unless it is loaded using the load absolute variation of the load command. It automatically goes through a lexical analysis, converting each command into a token, and warning the operator if it can't translate a particular command. When the program has been successfully loaded, in token form, it waits for the run command to start. When it is run, it starts at the start of the tokenized program and interprets each token in turn. By promoting some of the commands to keys on the keyboard, it becomes possible to load a program into the computer and run it.
Very soon after Microsoft's success at producing a stand-alone basic program, some A.I. Researchers decided to do a similar thing with LISP. By creating a custom chip, that favored some of the stages in lisp interpretation, they were able to reduce the size of a Lisp based robot significantly. To this day Lisp is used in A.I. programming because as a list processing language, it speeds the processing of list based devices such as rule-bases and expert systems.
Smalltalk has the cachet of having an extremely small interpreter. Based on the concept of Object oriented programming it is a very effective language on which to base a dedicated computer. However, Object oriented programming is difficult to learn conceptually, and so Smalltalk computers have never had a large market segment.
Perhaps the most successful interpreted language as an operating system is Java. This language is meant to capture the benefits of both C and Smalltalk in a single language. It is based on a Virtual Machine which can be written to run in machine language as easily as in C. By installing the Java language right onto silicon, it makes possible sophisticated processing and network services on a very compact unit. In fact, Java has been used in smartphones to provide an internet interface to a relatively inexpensive cellular phone circuit.
The following was left in this file by the original author. Possibly as a way of organizing his thoughts about java. I am considering removing it, because it goes into too much detail about Java, and not enough about operating systems.
Introduction to Programming Using Java, Third Edition Table of Contents
THIS IS THE FULL TABLE OF CONTENTS for an on-line introductory programming textbook that uses Java as the language of instruction. For more information about the text, please see its front page. The text is available on-line at http://math.hws.edu/javanotes/.
Preface to the Second Edition
Chapter 1: Overview: The Mental Landscape
Section 1: The Fetch-and-Execute Cycle: Machine Language Section 2: Asynchronous Events: Polling Loops and Interrupts Section 3: The Java Virtual Machine Section 4: Fundamental Building Blocks of Programs Section 5: Objects and Object-oriented Programming Section 6: The Modern User Interface Section 7: The Internet and World-Wide Web Quiz on this Chapter Chapter 2: Programming in the Small I: Names and Things
Section 1: The Basic Java Application Section 2: Variables and the Primitive Types Section 3: Strings, Objects, and Subroutines Section 4: Text Input and Output Section 5: Details of Expressions Programming Exercises Quiz on this Chapter Chapter 3: Programming in the Small II: Control
Section 1: Blocks, Loops, and Branches Section 2: Algorithm Development Section 3: The while and do..while Statements Section 4: The for Statement Section 5: The if Statement Section 6: The switch Statement Section 7: Introduction to Applets and Graphics Programming Exercises Quiz on this Chapter Chapter 4: Programming in the Large I: Subroutines
Section 1: Black Boxes Section 2: Static Subroutines and Static Variables Section 3: Parameters Section 4: Return Values Section 5: Toolboxes, API's, and Packages Section 6: More on Program Design Section 7: The Truth about Declarations Programming Exercises Quiz on this Chapter Chapter 5: Programming in the Large II: Objects and Classes
Section 1: Objects, Instance Variables, and Instance Methods Section 2: Constructors and Object Initialization Section 3: Programming with Objects Section 4: Inheritance, Polymorphism, and Abstract Classes Section 5: More Details of Classes Programming Exercises Quiz on this Chapter Chapter 6: Applets, HTML, and GUI's
Section 1: The Basic Java Applet Section 2: HTML Basics and the Web Section 3: Graphics and the Paint Method Section 4: Mouse Events Section 5: Keyboard Events Section 6: Introduction to Layouts and Components Section 7: Looking Back: The Java 1.0 Event Model Programming Exercises Quiz on this Chapter Chapter 7: Advanced GUI Programming
Section 1: More about Graphics Section 2: More about Layouts and Components Section 3: Standard Components and Their Events Section 4: Programming with Components Section 5: Threads, Synchronization, and Animation Section 6: Nested Classes and Adapter Classes Section 7: Frames and Dialogs Section 8: Looking Forward: Swing and Java 2.0 Programming Exercises Quiz on this Chapter Chapter 8: Arrays
Section 1: Creating and Using Arrays Section 2: Programming with Arrays Section 3: Vectors and Dynamic Arrays Section 4: Searching and Sorting Section 5: Multi-Dimensional Arrays Programming Exercises Quiz on this Chapter Chapter 9: Correctness and Robustness
Section 1: Introduction to Correctness and Robustness Section 2: Writing Correct Programs Section 3: Exceptions and the try...catch Statement Section 4: Programming with Exceptions Programming Exercises Quiz on this Chapter Chapter 10: Advanced Input/Output
Section 1: Streams, Readers, and Writers Section 2: Files Section 3: Programming with Files Section 4: Networking Section 5: Programming Networked Applications Programming Exercises Quiz on this Chapter Chapter 11: Linked Data Structures and Recursion
Section 1: Recursion Section 2: Linking Objects Section 3: Stacks and Queues Section 4: Binary Trees Section 5: A Simple Recursive-descent Parser Programming Exercises Quiz on this Chapter Appendix 1: From Java to C++
Section 1: C++ Programming Fundamentals Section 2: Pointers and Arrays in C++ Section 3: Classes and Objects in C++ Appendix 2: Some Notes on Java Programming Environments
Appendix 3: Source code for all examples in the text
News and Errata
David J. Eck (firstname.lastname@example.org), May 2000