Hello all,

I've put together a set of slides for a 90-minute lecture/demo on "Why I Still Use Smalltalk" to be given to a colloquium of graduate media arts and technology students at UCSB (where I taught from 1996-2010). I up-loaded the slides for your comments; there's a 19-page PDF file (6 slides per page) at,

http://HeavenEverywhere.com/STP_ST80_Talk_Slides.pdf

Your comments/questions are welcome...

(The demo at the start will be using VisualWorks to build the canonical up/down counter.)

(Slide 12 is me and the head of the composition department at UCSB, both in 1984, for context.)

stp


--

  Stephen Travis Pope   Santa Barbara, California, USA    http://HeavenEverywhere.com
  


Begin forwarded message:

From: Stephen Travis Pope <stephen@heaveneverywhere.com>

Date: October 26, 2012 12:47:55 PM PDT

To: vwnc <vwnc@cs.uiuc.edu>

Cc: Stephen Travis Pope <stephen@heaveneverywhere.com>

Subject: Outline of a talk on "Why I Still Use Smalltalk" for comments



Hello all,

I'm planning to give a colloquium called "Why I Still Use Smalltalk" for the graduate students at UCSB, and wanted to solicit your comments on the outline.

stp

--------------------

Why I Still Use Smalltalk

Graduate Colloquium
UCSB Graduate Program in Media Arts and Technology
November, 2012
Stephen Travis Pope, stephen@FASTLabInc.com

--------------------

Proposal

Title: Why I Still Use Smalltalk

Abstract

The Smalltalk-80 programming system is celebrating its 30th birthday this year (Smalltalk-80 version 2 was released and documented in a series of books in 1982). The system was the first popular software development tool that incorporated a number of features we take for granted today, including an object-oriented programming language, a comprehensive open-source class library, an integrated window-based development environment, and a cross-platform virtual-machine-based delivery system. Nevertheless, Smalltalk has nowhere near the installed base or the mindshare of lesser peers such as C++ or Java, or more modern descendants such as Python or Ruby. This talk will introduce the Smalltalk system's language, libraries and tools, outline its history, and discuss the reasons why it is not more widely used. Several aspects of the Smalltalk system make it especially good for developing multimedia applications, and these will be introduced with examples from the last 30 years. The presenter was among the very first to use Smalltalk for real-world applications, and worked on the Smalltalk team at Xerox PARC and their spin-off ParcPlace Systems from 1986-94. He still uses Smalltalk (now available in both commercial and free versions) for his day-to-day work.

Presenter

Stephen Travis Pope is a software engineer and composer based in Santa Barbara. He taught at UCSB (in the departments of Music and Computer Science, and the Graduate Program in Media Arts and Technology) from 1996-2010, and is now known as FASTLabInc.com (for multimedia software) and HeavenEverywhere.com (for music and film).

----------------------------

Outline
Introduction
Demo
What Is Smalltalk?
The Language
The Libraries
The Environment
A Brief History
Smalltalk Leaves PARC
C++, ObjectiveC and Java
Smalltalk Today
Why I Still Use Smalltalk

Introduction
Overview
My background in 1981

Demo
Counter Example with GUI

What Is Smalltalk?
Language
Libraries
Tools, IDE
Methodology
Note: "OO is not Enough!"

The Language
Terse, expressive, readable
Everything is an Object (really, everything)
All activity is message-passing
Trivial syntax, no reserved words
true, false, nil, self, super, thisContext
Control structures written in Smalltalk
Messages to Booleans, Blocks, etc.
Means they're extensible (!)
aCollection do: [ :item | Transcript show: item printString]
Keyword syntax - messages with > 1 argument alternate keyword/argument�
anArray at: 1  (getter)
anArray at: 1 put: 'hello'  (setter)
r := Rectangle top: 1 left: 1 width: 10 height: 10
Fully Reflective
(isKindOf:, understands:, �)
Compiles to a virtual machine language (normally)

The Libraries
Everything is an Object
Polymorphism (heavily used)
E.g., many implementations of at:put: or +
OO Design Patterns
Composite, Adaptor, Singleton, MVC, Visitor, �
Magnitudes, Collections and Streams
Graphics and Windows
All classes are extensible (!)
Example: aString asPath: sepChar
Try this in C++ or ObjC...

The Methodology
OO A/D Methods (OBA)
OO Design Patterns
Domain-specific Languages

The Tools
Window-based GUI and Tools
Multi-desktop (Projects)
Browsers, Inspectors and Editors
Rules of Reuse (Programmer as Reader project)
Pluggable look-and-feel
Code-sharing tools: change-lists, Envy
Open-source Tools (!!)

Tool Demo
Browsers
Code in DB package, class, category, method
Compile 1 method at a time
"Programmer as Reader" facilities
Senders, implementors, class/variable references
Flavors of browsers: protocol, hierarchy, namespace, etc.
Debugger
Just like the browser(!!!)
Fix and continue
CASE Tools
Change lists, packages, projects

The Environment
VI/VM Architecture
VI like APL workspaces, LISP core files
Snapshot/restart (relation to BOSS files)
VM - "cheat but don't get caught"
Thinks it's an operating system
"The OS is only there for all the things you forgot to put in the language"
Scheduler, file system, network drivers, etc. in Smalltalk
Light-weight processes and scheduler in Smalltalk
Simple VM: Byte-code interpreter
High-performance VM: JIT Optimizing
Native code caches
Polymorphic inline caches

Other Novel Aspects
Other languages in Smalltalk (Lisp, Prolog, etc.)
Compiler frameworks
Smalltalk-as-OS (running on naked hardware)
OOP and AI 
Frames/objects, rules, logic, etc.
Early "block diagram compilers"

Smalltalk and Multimedia
Early Computer Graphics
BitBLT pixel graphics
SPIM and graphics contexts
Music with Smalltalk
Real-time FM on the Alto
Real-time scheduling for MIDI
Music notations in Smalltalk

Early (1980s) Applications
ThingLab
ThinkerToy
Graphical programming
Analyst
AI, Multimedia, Graphical Programming
Chinese Temple Design ToolKit
Models of process
MOBY, DoubleTalk
Petri Nets
ObjectWorks/C++
ST-like IDE for C++

Early (1980s) Music Applications
HyperScore ToolKit/MODE
Music composition and notations
SoundKit
Music signal processing
Kyma
Cross-compilation for a DSP
Harmonic Analysis Tool
Chord/Harmony analysis expert system
Smoke
Flexible music representation language

The Risks
Breaking the system (really easy)
Also easy to recover
VI Bloat
Strippers, Whittlers
Incompatible changes
Tools for merging packages

A Brief History
Flex and Smalltalk-72
Simula, Sketchpad, Augment and other precursors
PARC Learning Research Group
Smalltalk-76 and the Xerox Alto
Mostly ASCII
Personal Dynamic Media Paper in "Computer" 3/1977
Smalltalk-78
Browser, NoteTaker project
Smalltalk-80 V1
3rd complete rewrite before they had an installed user base
LRG now Systems Concepts Lab
1981 Byte Magazine Special Issue
Context: Xerox Alto, MIT LISP Machines
Smalltalk-80 V2
Incorporated feedback from first-round users
MVC used for all GUIs
Late-80s changes
Exceptions and I/O
Host window system interface
DLLCC
Compiler Framework
Namespaces, Packages
ANSI Smalltalk (1993-98)

Smalltalk Leaves PARC
Getting Smalltalk to Users
(Porting to non-Xerox hardware)
Early licensees: Apple, H-P, Tektronix
Tex 44404 demo - http://www.youtube.com/watch?v=8yxCJfayW-8
Berkeley SOAR and SPARC design
XSIS and the Analyst
ParcPlace Systems (spun off in 1988)
Digitalk's Smalltalk/V on early PCs (1984)
These merge in 1995
GNU Smalltalk (free)

C++, ObjectiveC and Java
C with Classes - hybrid language; class is like a struct
ObjectiveC - C + Smalltalk in 1 program
Java ("what a shame they didn't copy everything.")

Why it failed (in the 1990s)
Price (relative to what?)
Perception of compute demands (requires graphics and mouse, lots of RAM, �)
Performance Issues
VM performance and optimization
GC overhead and generation scavenging
Performance much better on Xerox machines
VM in microcode
Tagged architecture
Not upward compatible with anything
"Everything you know is wrong"
C hybrids appeared to get you most of the way there�

Smalltalk Implementations
Cincom Smalltalk (commercial)
ObjectStudio (commercial)
Squeak (free, based on Apple V1)
Pharo (stripped Squeak)

Coral (for scripting)
Amber (runs on JavaScript VM)
Bistro (runs on JavaScript VM)
S# (runs with .NET)

Smalltalk/X
VisualAge
Dolphin

Smalltalk Today
DLLCC and Slang
Seaside (for web apps)
Gemstone (scalable OODB)

STIC/ESUG
Smalltalk.org
Squeak community

Relatives/Derivatives
ObjectiveC
Self (no classes, VM advances)
Lively (JavaScript libraries and tools)
F-Script
Strongtalk
SuperCollider

Reasons Why I Still Use Smalltalk
3 top reasons: Productivity, productivity and productivity
Language features
Simplicity, scalability, stability
Keyword syntax (!!)
Library features
Comprehensive, consistent, stable, extensible (!!)
All source close at hand
Pluggable L&F
Development Environment
Open tools (!!!)
Integrated, cross-platform
Fix/restart in debugger (!!!)
VI/VM architecture
Code lives in DB, easy change management, publication, crash recovery, etc. (!)

Why I complain about other languages
"Object-Oriented is not Enough" (Goldberg & Pope 1989 article)
�The Computer Revolution Hasn�t Happened Yet� (A Kay quote)
Issues center on libraries and tools rather than the languages themselves
Lively for JavaScript
?? for Python

What I do use (other than Smalltalk)
C++
Standard, fast
XCode
Python
Hybrid language
Good libraries (inconsistent, non-OO)
Poor tools
Good integration with C/C++ via ctypes
Curse of version 3
Octave/MATLAB
Terse, good matrix support
Extensive code base

--

  Stephen Travis Pope   Santa Barbara, California, USA    http://HeavenEverywhere.com