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 SmalltalkGraduate ColloquiumUCSB Graduate Program in Media Arts and TechnologyNovember, 2012Stephen Travis Pope, stephen@FASTLabInc.com--------------------ProposalTitle: Why I Still Use SmalltalkAbstractThe 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.PresenterStephen 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).----------------------------OutlineIntroductionDemoWhat Is Smalltalk?The LanguageThe LibrariesThe EnvironmentA Brief HistorySmalltalk Leaves PARCC++, ObjectiveC and JavaSmalltalk TodayWhy I Still Use SmalltalkIntroductionOverviewMy background in 1981DemoCounter Example with GUIWhat Is Smalltalk?LanguageLibrariesTools, IDEMethodologyNote: "OO is not Enough!"The LanguageTerse, expressive, readableEverything is an Object (really, everything)All activity is message-passingTrivial syntax, no reserved wordstrue, false, nil, self, super, thisContextControl structures written in SmalltalkMessages 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: 10Fully Reflective(isKindOf:, understands:, �)Compiles to a virtual machine language (normally)The LibrariesEverything is an ObjectPolymorphism (heavily used)E.g., many implementations of at:put: or +OO Design PatternsComposite, Adaptor, Singleton, MVC, Visitor, �Magnitudes, Collections and StreamsGraphics and WindowsAll classes are extensible (!)Example: aString asPath: sepCharTry this in C++ or ObjC...The MethodologyOO A/D Methods (OBA)OO Design PatternsDomain-specific LanguagesThe ToolsWindow-based GUI and ToolsMulti-desktop (Projects)Browsers, Inspectors and EditorsRules of Reuse (Programmer as Reader project)Pluggable look-and-feelCode-sharing tools: change-lists, EnvyOpen-source Tools (!!)Tool DemoBrowsersCode in DB package, class, category, methodCompile 1 method at a time"Programmer as Reader" facilitiesSenders, implementors, class/variable referencesFlavors of browsers: protocol, hierarchy, namespace, etc.DebuggerJust like the browser(!!!)Fix and continueCASE ToolsChange lists, packages, projectsThe EnvironmentVI/VM ArchitectureVI like APL workspaces, LISP core filesSnapshot/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 SmalltalkLight-weight processes and scheduler in SmalltalkSimple VM: Byte-code interpreterHigh-performance VM: JIT OptimizingNative code cachesPolymorphic inline cachesOther Novel AspectsOther languages in Smalltalk (Lisp, Prolog, etc.)Compiler frameworksSmalltalk-as-OS (running on naked hardware)OOP and AIFrames/objects, rules, logic, etc.Early "block diagram compilers"Smalltalk and MultimediaEarly Computer GraphicsBitBLT pixel graphicsSPIM and graphics contextsMusic with SmalltalkReal-time FM on the AltoReal-time scheduling for MIDIMusic notations in SmalltalkEarly (1980s) ApplicationsThingLabThinkerToyGraphical programmingAnalystAI, Multimedia, Graphical ProgrammingChinese Temple Design ToolKitModels of processMOBY, DoubleTalkPetri NetsObjectWorks/C++ST-like IDE for C++Early (1980s) Music ApplicationsHyperScore ToolKit/MODEMusic composition and notationsSoundKitMusic signal processingKymaCross-compilation for a DSPHarmonic Analysis ToolChord/Harmony analysis expert systemSmokeFlexible music representation languageThe RisksBreaking the system (really easy)Also easy to recoverVI BloatStrippers, WhittlersIncompatible changesTools for merging packagesA Brief HistoryFlex and Smalltalk-72Simula, Sketchpad, Augment and other precursorsPARC Learning Research GroupSmalltalk-76 and the Xerox AltoMostly ASCIIPersonal Dynamic Media Paper in "Computer" 3/1977Smalltalk-78Browser, NoteTaker projectSmalltalk-80 V13rd complete rewrite before they had an installed user baseLRG now Systems Concepts Lab1981 Byte Magazine Special IssueContext: Xerox Alto, MIT LISP MachinesSmalltalk-80 V2Incorporated feedback from first-round usersMVC used for all GUIsLate-80s changesExceptions and I/OHost window system interfaceDLLCCCompiler FrameworkNamespaces, PackagesANSI Smalltalk (1993-98)Smalltalk Leaves PARCGetting Smalltalk to Users(Porting to non-Xerox hardware)Early licensees: Apple, H-P, TektronixTex 44404 demo - http://www.youtube.com/watch?v=8yxCJfayW-8Berkeley SOAR and SPARC designXSIS and the AnalystParcPlace Systems (spun off in 1988)Digitalk's Smalltalk/V on early PCs (1984)These merge in 1995GNU Smalltalk (free)C++, ObjectiveC and JavaC with Classes - hybrid language; class is like a structObjectiveC - C + Smalltalk in 1 programJava ("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 IssuesVM performance and optimizationGC overhead and generation scavengingPerformance much better on Xerox machinesVM in microcodeTagged architectureNot upward compatible with anything"Everything you know is wrong"C hybrids appeared to get you most of the way there�Smalltalk ImplementationsCincom 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/XVisualAgeDolphinSmalltalk TodayDLLCC and SlangSeaside (for web apps)Gemstone (scalable OODB)STIC/ESUGSqueak communityRelatives/DerivativesObjectiveCSelf (no classes, VM advances)Lively (JavaScript libraries and tools)F-ScriptStrongtalkSuperColliderReasons Why I Still Use Smalltalk3 top reasons: Productivity, productivity and productivityLanguage featuresSimplicity, scalability, stabilityKeyword syntax (!!)Library featuresComprehensive, consistent, stable, extensible (!!)All source close at handPluggable L&FDevelopment EnvironmentOpen tools (!!!)Integrated, cross-platformFix/restart in debugger (!!!)VI/VM architectureCode 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 themselvesLively for JavaScript?? for PythonWhat I do use (other than Smalltalk)C++Standard, fastXCodePythonHybrid languageGood libraries (inconsistent, non-OO)Poor toolsGood integration with C/C++ via ctypesCurse of version 3Octave/MATLABTerse, good matrix supportExtensive code base
--Stephen Travis Pope Santa Barbara, California, USA http://HeavenEverywhere.com