Part 2:  Basic Concepts and Structures

This part of the manual describes the logical structures that are visible to system programmers and to user programmers who choose to code in SL. Although SL is the machine language for AFS, its concepts reflect the structures of compilers, and operating systems much more than details of typical von Neumann machines. Three characteristics distinguish the following presentation from the principles of operation of other machines: the absence of bit representations, a theoretical style of definitions and theorems, and the basic assumption that traditional software functions of storage allocation and process dispatching are performed at the engineering level.

Chapter 2.1 begins with a discussion of objects: their residence in storage cells and their nature as processes. All the objects in the system make up the object base in which three directed graphs embody all interrelationships: the accessibility graph, which includes all possible paths for accessing one object from another; the environment tree, which defines paths for symbol resolution; and the dependency graph, which includes all outstanding requests by objects for services by other objects. Further discussion shows how these graphs interact with various types of objects, program structure, and resource management. The final chapter in this part discusses the built-in functions provided with the system.

2.1 Object Base

2.1.1 Storage
2.1.2 Processes
2.1.3 Objects
2.1.4 Access Machines
2.1.5 Accessibility Graph
2.1.6 Manipulating Storage Cells
2.1.7 Structures

2.2 Program Structure and Interpretation

2.2.1 Key Concepts
2.2.2 Internal Program Representation
2.2.3 Syntactic Form of Program Text
2.2.4 Activating a Function
2.2.5 Expression Interpretation
2.2.6 Sequential and Parallel Execution
2.2.7 The Apply Function
2.2.8 Selective and Repetitive Control

2.3 Environment

2.3.1 Phases of Program Execution
2.3.2 Local Symbol Resolution
2.3.3 Context for Free Symbols
2.3.4 Alternate Rules for Free Symbol Resolution
2.3.5 Modifying Attributes and Vaules
2.3.6 Review of Program and Data Structure

2.4 Multiple Control Structures

2.4.1 Exceptions and Synchronous Interrupts
2.4.2 Changing Sequential Flow
2.4.3 Processes and Monitors
2.4.4 Asynchronous Interrupts
2.4.5 The Data Structure of Control

2.5 Resource Management

2.5.1 Summary of the Problems
2.5.2 Classes of Resources
2.5.3 Subsystems
2.5.4 Resource Management in AFS

2.6 Function Set

2.6.0 Introduction
2.6.1 Program Structuring Operators
2.6.2 Object Composition
2.6.3 Structure and Index Operators
2.6.4 Operators for Modifying Objects
2.6.5 Control of Function Distribution
2.6.6 Element and Pattern Searching
2.6.7 Computational Operators
2.6.8 Selection Operators
2.6.9 Control Operators
2.6.10 Resource Coordination
2.6.11 Edit and Search

[Note:  These chapters have been reformatted, some of the original punctuation has been changed, and some typos have been corrected. None of the original content has been deleted or modified. All editorial additions, comments, or clarifications, such as this one, are enclosed in square brackets.

John Sowa was the primary author of Chapter 2.1, and Steve Zilles was the primary author of Chapter 2.2. The remaining chapters of Part 2 are much less complete than 2.1 and 2.2. Phil Benkard, an advocate of 0-origin indexing, was the primary author of Chapter 2.6.]