SK8 (programming language)

Last updated
SK8
SK8 IDE icon.png
Paradigm Object-oriented
Developer Apple Computer
First appearedMid-1990s
Stable release
0.9 / 1997
Typing discipline Strong, dynamic
OS Mac OS
License open source
Major implementations
Macintosh Common Lisp
Influenced
AppleScript

SK8 (pronounced "skate") was a multimedia authoring environment developed in Apple's Advanced Technology Group from 1988 until 1997. It was described as "HyperCard on steroids", [1] combining a version of HyperCard's HyperTalk programming language with a modern object-oriented application platform. The project's goal was to allow creative designers to create complex, stand-alone applications. The main components of SK8 included the object system, the programming language, the graphics and components libraries, and the Project Builder, an integrated development environment.

Contents

For much of its history, SK8 remained a research project, and inspired a number of other Apple projects like AppleScript, as well as seeing use as a prototyping platform. Although around 1993 a team was assigned by the Apple Product Division to release a SK8 runtime, the limitation of the Mac's capabilities as well as the shift to the PowerPC chip made such a large project intractable. With the bulk of the original vision completed and no easy path to release as part of MacOS, active development ended in 1996–1997, and the Macintosh Common Lisp source code for the entire project was released to the public in 1997.

History

The SK8 project was created by Ruben Kleiman when he joined Apple in 1987. He had come to Apple to develop a flexible, object-oriented user interface and multimedia development environment. [2] The name of the project derived from his interest in skateboarding. [3] Coincidentally, at this time the HyperCard, with its direct manipulation interface and scripting language, was about to ship. While HyperCard was great for simple applications it used a limited interaction model – the "stacks" of cards" – that limited its potential applicability. SK8 attempted to extend these benefits to a wider programming role. [2]

Early work on what would become SK8 focused on infrastructure rather than visual programming. Kleiman's first effort was a dynamic, prototype-based object system, MacFrames, a frame [lower-alpha 1] /object system with plug-ins for inference engines. Through preferences settings, MacFrames was used to emulate a large variety of object systems, including IntelliCorp's KEE. This research, in concert with users developing actual applications and prototypes at Apple, yielded the object model used in SK8. [2] MacFrames was developed in Coral Lisp, which was acquired by Apple and became Macintosh Common Lisp.

The Macintosh at that time had no generalized inter-process communication (IPC) system. Kleiman created an IPC init for the Mac to allow MacFrames to communicate with other processes, in particular, HyperCard. This allowed HyperCard to be used as a visual programming front-end for MacFrames. Another goal of MacFrames was to build distributed processing right into the object system. Instead of using an RPC API, one simply set the object's property with the desired value and callback for the results. MacFrames was used by Apple's QA group to create an automated black-box testing system.

The SK8 Project Builder was created to provide a rich set of direct manipulation tools, including tools for building interactive controls and general but non-invasive glueing. [2] The builder's objective was to provide a visual/direct manipulation interface for building visual development environments. That is, the system could be used to develop completely different development environments tailored to different tasks. The first version of the SK8 graphics system was designed to extend HyperCard, allowing cards to have multiple layers rather than a single "background" template.

The SK8 system was initially programmed in Lisp. This was considered too arcane for general use. Additionally, there was growing concern about the number of different languages in use at Apple. As part of a wider effort to modernize the MacOS, a new unified scripting language was desired. In 1989 Kleiman joined David Canfield Smith and Larry Tesler to design and implement the first version of AppleScript. This version of AppleScript used SK8 objects, and two later the Apple Product Division re-implemented AppleScript using AppleEvents as the glue for communicating with AppleScript objects. The original prototype was then renamed SK8Script, and was itself re-implemented in assembler in 1992.

A number of researchers in the Advanced Technology Group began to use SK8 for their projects. Certain universities and corporations also began to participate. [2] The system was used to develop prototypes for Newton, QuickTime interfaces, interprocess communication, and was used to prototype many titles, including Stagecraft, a learning tool for children.

For performance reasons, in 1992 and 1993 SK8 was re-implemented from the ground up. Working at Apple's Cambridge Research Center, the Macintosh Common Lisp object store was isolated and directly hooked into SK8's store. The SK8Script debugger was re-implemented at the assembler language level (previously in Lisp) and the compiler and runtime performance improved.

Description

The SK8 system includes the object system, the graphics and component objects, the SK8Script language, and the Project Builder environment.

Object System

The SK8 object system was, like JavaScript, prototype-based, but unlike JavaScript, object properties were themselves objects. Hence, properties were not simply names that acted as keys to set or retrieve values, but in addition possessed arbitrary behavior. This allowed properties to have intelligent behavior (e.g., trigger an inference engine or serve as endpoints in RPC networking); one could think of them as "smart properties". The idea was to allow application programmers to focus on the manipulating objects rather than having to learn APIs—which would be built into the objects. Not implemented was a hierarchical namespace managing property names.

SK8Script

Until 1989, SK8's scripting language was Lisp. This changed to SK8Script, which was heavily influenced by HyperTalk (HT). Many of the differences between SK8Script and HyperTalk can be considered to be generalization of HT concepts, removing tight integration with particular objects in the HyperCard universe and replacing them with generalized syntax that could interact with any object.

Like HT, a core concept of the SK8Script system are the "containers", which roughly equate to objects in conventional systems, and the "chunking" system that allowed those containers to be identified and enumerated. HT had introduced the idea of offering multiple ways to address objects and collections, allowing the programmer to select whatever syntax seemed most natural in context, and then use an entirely different syntax somewhere else. SK8Script offered a similar system.

Graphics and Component Objects

SK8's universe was made up of a multimedia-oriented system using Actors on a Stage. Actors were any objects that were based on the prototype Actor object, which contained the basic framework needed to provide 2D graphics support - the location and size of the object for instance. Actors became visible when they were placed upon the Stage, an invisible background object that captured user events to provide interactivity. In SK8, a traditional window was an object like any other graphics object. When an Actor was on the Stage, it could behave as a window-like object. [4] It was easy to design complex objects that behaved like windows (e.g., a donut-shaped window; its hole's opacity 0%, with content being a text object scrolling around or perhaps a movie playing within its frame). An object known as the "halo" provided resize handles and other widgets for manipulation in a visual development environment. [5]

All SK8 Actors could contain other actors. [6] The hierarchy could be navigated using the chunking expressions, so one could set the visible of the first Rectangle in CoolOval to true. The objects could then be made visible in the UI by moving them onto the Stage using the insert command, like insert CoolOval into the stage, which would make both the oval and rectangle appear. [7]

GUIs were constructed solely from Actors. A window-like object could be built out of an opaque rectangle containing other objects (e.g., close buttons, widgets). [8] Every Actor's drawing style was controlled by a Renderer, which aided the GUI building process. For instance, the BevelRenderer could be used to bevel the edges around an Actor, producing an effect like Windows 3.x controls or the title bar in NeXTSTEP. Other renderers included color and image fills, gradients, tiles and blends. [9] Although there was no difference in programming terms, basic objects like rectangles were classified as "geometry actors" while more traditional GUI elements like buttons were known as "interface actors". [10]

The Stage captured user-generated events like mouse-down clicks and key presses and sent them to the Actors. The visual hierarchy determined which object would receive the message first - the Stage was Z-ordered and objects closer to the front got the messages first. Messages could be passed up the class/prototype hierarchy with the do inherited command. [11]

Project Builder

SK8's Project Builder used custom windows and widgets, and did not look like any other IDE. SK8 startup state.png
SK8's Project Builder used custom windows and widgets, and did not look like any other IDE.

Project Builder was an environment for building visual development environments. It provided code editing, debugging, graphics and smart component library, runtime targeting support and a direct manipulation graphical interface builder system. A key element of the Builder system was the "Overviewer" panel, which held a categorized list of all of the objects in the currently opened project. These include libraries, user-created functions and methods, variables, and so forth. [12] These could be examined and edited by double-clicking on them, or by clicking in an associated pop-up menu that appeared on the object when it was selected in the GUI builder. [8] The Object Editor that appeared listed the object's "properties" (instance and class variables) in one pane, and its "handlers" (methods) in another. [13]

The GUI builder included a drag-and-drop based system for constructing visual objects. [14] SK8 did not have traditional "screens"; it used an invisible "Stage" object that served as the background for managing events and visual objects. One interesting aspect was that no windows, in the traditional sense, were needed or expected to display anything. In fact, any visual object could have window-like behavior (through its drag-and-drop and other smart properties). SK8 did, however, include a system for editing and programming complete menu bars, a feature that HyperCard lacked. Another oft-requested feature from HyperCard was a media editor, which allowed Macintosh resources to be moved in and out of the project. SK8 built this functionality into the IDE. Other components of the system included an online documentation system, lists of systemwide objects and commands, and the code editor and debugger windows. [15]

Interacting with the System

SK8Script offered a system for calling in and out of operating system functions, allowing it to more directly interact with the Macintosh Toolbox. In HyperCard, interacting with arbitrary Toolbox code was handled through custom code resources known as XCMDs and XFCNs which encapsulated the functionality in a black box. These were called and returned in a single operation, with the internal operations invisible. Under SK8, SK8Script could interact directly with the encapsulated code, setting variables, calling functions and returning results. External code could also call into SK8Script, examining and setting variables, or calling functions. [16]

Related Research Articles

<span class="mw-page-title-main">Graphical user interface</span> User interface allowing interaction through graphical icons and visual indicators

A graphical user interface, or GUI, is a form of user interface that allows users to interact with electronic devices through graphical icons and visual indicators such as secondary notation. In many applications, GUIs are used instead of text-based UIs, which are based on typed command labels or text navigation. GUIs were introduced in reaction to the perceived steep learning curve of command-line interfaces (CLIs), which require commands to be typed on a computer keyboard.

<span class="mw-page-title-main">HyperCard</span> Hypermedia system for Apple Macintosh and Apple IIGS computers

HyperCard is a software application and development kit for Apple Macintosh and Apple IIGS computers. It is among the first successful hypermedia systems predating the World Wide Web.

<span class="mw-page-title-main">History of the graphical user interface</span>

The history of the graphical user interface, understood as the use of graphic icons and a pointing device to control a computer, covers a five-decade span of incremental refinements, built on some constant core principles. Several vendors have created their own windowing systems based on independent code, but with basic elements in common that define the WIMP "window, icon, menu and pointing device" paradigm.

An integrated development environment (IDE) is a software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, and a debugger. Some IDEs, such as IntelliJ IDEA, Eclipse and Lazarus contain the necessary compiler, interpreter or both; others, such as SharpDevelop, NetBeans do not.

<span class="mw-page-title-main">GNUstep</span> Open source widget toolkit and application development tools

GNUstep is a free software implementation of the Cocoa Objective-C frameworks, widget toolkit, and application development tools for Unix-like operating systems and Microsoft Windows. It is part of the GNU Project.

NewtonScript is a prototype-based programming language created to write programs for the Newton platform. It is heavily influenced by the Self programming language, but modified to be more suited to needs of mobile and embedded devices.

<span class="mw-page-title-main">Genera (operating system)</span> Symbolics operating system based on Lisp

Genera is a commercial operating system and integrated development environment for Lisp machines created by Symbolics. It is essentially a fork of an earlier operating system originating on the Massachusetts Institute of Technology (MIT) AI Lab's Lisp machines which Symbolics had used in common with Lisp Machines, Inc. (LMI), and Texas Instruments (TI). Genera was also sold by Symbolics as Open Genera, which runs Genera on computers based on a Digital Equipment Corporation (DEC) Alpha processor using Tru64 UNIX. In 2021 a new version was released as Portable Genera which runs on DEC Alpha, Tru64 UNIX, x86-64 and Arm64 Linux, x86-64 and Apple Silicon M Series macOS. It is released and licensed as proprietary software.

HyperTalk is a discontinued high-level, procedural programming language created in 1987 by Dan Winkler and used in conjunction with Apple Computer's HyperCard hypermedia program by Bill Atkinson. Because the main target audience of HyperTalk was beginning programmers, HyperTalk programmers were usually called "authors" and the process of writing programs was known as "scripting". HyperTalk scripts resembled written English and used a logical structure similar to that of the Pascal programming language.

AppleScript is a scripting language created by Apple Inc. that facilitates automated control over scriptable Mac applications. First introduced in System 7, it is currently included in all versions of macOS as part of a package of system automation tools. The term "AppleScript" may refer to the language itself, to an individual script written in the language, or, informally, to the macOS Open Scripting Architecture that underlies the language.

<span class="mw-page-title-main">Visual programming language</span> Programming language written graphically by a user

In computing, a visual programming language or block coding is a programming language that lets users create programs by manipulating program elements graphically rather than by specifying them textually. A VPL allows programming with visual expressions, spatial arrangements of text and graphic symbols, used either as elements of syntax or secondary notation. For example, many VPLs are based on the idea of "boxes and arrows", where boxes or other screen objects are treated as entities, connected by arrows, lines or arcs which represent relations.

<span class="mw-page-title-main">Macintosh Programmer's Workshop</span> Software development package for the Classic Mac OS

Macintosh Programmer's Workshop (MPW) is a software development environment for the Classic Mac OS operating system, written by Apple Computer. For Macintosh developers, it was one of the primary tools for building applications for System 7.x and Mac OS 8.x and 9.x. Initially MPW was available for purchase as part of Apple's professional developers program, but Apple made it a free download after it was superseded by CodeWarrior. On Mac OS X it was replaced by the Project Builder IDE, which eventually became Xcode.

Object Pascal is an extension to the programming language Pascal that provides object-oriented programming (OOP) features such as classes and methods.

<span class="mw-page-title-main">SuperCard</span>

SuperCard is a high-level development environment that runs on Macintosh computers, under OS 8 and 9, and OS X. It is inspired by HyperCard, but includes a richer language, a full GUI toolkit, and native color.

WinPlus, originally Plus, was a cross-platform clone of the HyperCard application that enabled users to run HyperCard stacks on Apple Macintosh, Microsoft Windows and OS/2 Presentation Manager.

<span class="mw-page-title-main">Kaleida Labs</span> Defunct American software company (1991–1996)

Kaleida Labs formed in 1991 to produce the multimedia cross-platform Kaleida Media Player and the object oriented scripting language ScriptX that was used to program its behavior. The system was aimed at the production of interactive CD ROM titles, an area of major effort in the early 1990s. When the system was delivered in 1994, it had relatively high system requirements and memory footprint, and lacked a native PowerPC version on the Mac platform. Around the same time, rapid changes in the market, especially the expansion of the World Wide Web and the Java programming language, pushed the interactive CD market into a niche role. The Kaleida platform failed to gain significant traction and the company was closed in 1996.

<span class="mw-page-title-main">Interface Builder</span> Developer Application for MacOS

Interface Builder is a software development application for Apple's macOS operating system. It is part of Xcode, the Apple Developer developer's toolset. Interface Builder allows Cocoa and Carbon developers to create interfaces for applications using a graphical user interface. The resulting interface is stored as a .nib file, short for NeXT Interface Builder, or more recently, as an XML-based .xib file.

Dylan programming language history first introduces the history with a continuous text. The second section gives a timeline overview of the history and present several milestones and watersheds. The third section presents quotations related to the history of the Dylan programming language.

<span class="mw-page-title-main">Common Lisp Interface Manager</span>

The Common Lisp Interface Manager (CLIM) is a Common Lisp-based programming interface for creating user interfaces, i.e., graphical user interfaces (GUIs). It provides an application programming interface (API) to user interface facilities for the programming language Lisp. It is a fully object-oriented programming user interface management system, using the Common Lisp Object System (CLOS) and is based on the mechanism of stream input and output. There are also facilities for output device independence. It is descended from the GUI system Dynamic Windows of Symbolics' Lisp machines between 1988 and 1993.

... you can check out Common Lisp Interface Manager (CLIM). A descendant of the Symbolics Lisp machines GUI framework, CLIM is powerful but complex. Although many commercial Common Lisp implementations actually support it, it doesn't seem to have seen a lot of use. But in the past couple years, an open-source implementation of CLIM, McCLIM – now hosted at Common-Lisp.net – has been picking up steam lately, so we may be on the verge of a CLIM renaissance. – From Practical Common Lisp

Apple Dylan is the original implementation of the programming language Dylan. It was developed by Apple Computer from 1992 to 1995.

<span class="mw-page-title-main">Scripting language</span> Programming language for run-time events

A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled.

References

  1. The Frame language article was substantially re-written with a focus on AI in December 2003, and later merged into another article. The last version more applicable to this context is still available.

Citations

  1. Spohrer 1998, SK8.
  2. 1 2 3 4 5 Apple 1995, SK8 History.
  3. The application splash screen prominently features a skateboard.
  4. User 1994, pp. 211–213.
  5. User 1994, pp. 57–61.
  6. User 1994, pp. 203–204.
  7. User 1994, p. 205.
  8. 1 2 User 1994, p. 12.
  9. User 1994, pp. 76–84.
  10. User 1994, p. 4.
  11. User 1994, p. 26.
  12. User 1994, p. 11.
  13. User 1994, p. 15.
  14. User 1994, p. 20.
  15. User 1994, Chapter 4.
  16. User 1994, Chapter 19.

Bibliography

Further reading