[Pharo-project] Slides for a talk on "Why I Still Use Smalltalk" for comments
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
participants (1)
-
Stephen Travis Pope