The computing world has changed significantly since Objective-C was created and even more since Smalltalk was released into the wild. Unix workstations are not just ubiquitous, we now carry them around in our pockets. The web happened, conceived in Objective-C and born on a NeXT computer.

Objective-Smalltalk was created specifically to solve practical problems that have been encountered in 25 years of Objective-C and Smalltalk use, but with a theoretical framework that solves many of these problems elegantly and minimally, rather than by bolting on special feature after special feature.


Objective-Smalltalk starts off with Smalltalk syntax, which is arguably still the simplest and most elegant programming language syntax around.

It adds angle brackets for type annotations, both for optional static type checking and to designate C types such as <int> or <double> for interoperating with C and Objective-C. Generic raw pointers are not supported, wrapper objects and bulk collections are preferred.

The other syntactic addition to Smalltalk is that identifiers are generalized to URIs. This addresses interoperability with the Unix filesystem and Web Resources, as well as subsuming Objective-C properties and Keyed Value Coding and making keyed storage such as dictionaries much less necessary and visible.


Objective-Smalltalk is built on top of the Objective-C runtime, as a peer to Objective-C, and uses the host platform's C ABI and calling conventions, thus being fully integrated (e.g. callable) from other peers on the platform. It does not require a VM or an image.

Where Objective-C is C with Smalltalk extensions, Objective-Smalltalk is Smalltalk with C extensions and the (Objective-)C runtime model.

Software Architecture

The basic elements in Objective-Smalltalk are components and connectors, so a message is just a specialization of a connector, as is an assignment.

The basic idea is for custom or higher level connectors to be integrated as peers to the built in connectors, instead of having to implement such mechanisms "on top" as is usual. This should make it possible to express higher level architectures directly in and as code.

At present, these features are at very early stages.

Another aspect of software architectural support that is more advanced are the scripting facilities. Scripting is closely related to architectural configuration, for example the Unix shell has been described as the first architectural description language (ADL).

Copyright (c) 2012-2014 Marcel Weiher