GemStone Update for ESUG 2009
James Foster, GemStone Systems, Inc.
Introductions
James Foster
QA, Seaside, Consulting, Training
Dale Henrichs
Seaside Lead
Martin McClure
GBS Lead
Monty Williams
MagLev, Business Development
4/8/2012 OOPSLA T39 GemStone James Foster 2
Agenda
What is GemStone? Smalltalk Product Releases MagLev (Ruby) Demo Getting Started with GemStone Seaside Metacello Questions
OOPSLA T39 GemStone James Foster 3
4/8/2012
What is GemStone/S?
A Smalltalk environment? A database system?
Two in one!
4/8/2012
OOPSLA T39 GemStone James Foster
GS/S: Smalltalk Environment
Virtual Machine (VM) compiles source code to machine code and executes it using Just-InTime compiler (JIT) Object manager treats entire repository as object space (or image) In-memory garbage collection (GC) reclaims space used by unreferenced new objects
4/8/2012
OOPSLA T39 GemStone James Foster
GS/S: Database System
Transactional persistence Multi-user Multi-machine Garbage collection for persistent objects which are no longer referenced
4/8/2012
OOPSLA T39 GemStone James Foster
Agenda
What is GemStone? Smalltalk Product Releases MagLev (Ruby) Demo Getting Started with GemStone Seaside Metacello Questions
OOPSLA T39 GemStone James Foster 7
4/8/2012
Smalltalk Product Releases
GS/S 6.5.x GS/S 64 Bit 2.3.x GS/S 64 Bit 2.4.0
4/8/2012
OOPSLA T39 GemStone James Foster
GS/S 6.5.x
Performance improvements
Mark/sweep Bitmap operations
Repository >> countInstances: anArray Repository >> listObjectsInSegments: anArray Additional cache statistics Numerous bug fixes
OOPSLA T39 GemStone James Foster 9
4/8/2012
GS/S 64 Bit 2.3.x
Supported Platforms
Solaris (Sparc & x86) HP-UX (PA RISC & Itanium) AIX (RS/6000 with Power5 or Power6) Linux (SuSE Linux ES 10 & Red Hat Linux ES 5.0) Macintosh (Intel OS 10.5.5)
4/8/2012
OOPSLA T39 GemStone James Foster
10
GS/S 64 Bit 2.3.x
Improved Performance
Mark/sweep Direct I/O (AIX) Commit record disposal 64% faster UnorderedCollection difference & intersection
4/8/2012
OOPSLA T39 GemStone James Foster
11
GS/S 64 Bit 2.3.x
Extended characters QuadByteString
Character codePoint maximum is 16r7FFFFFFF
UTF8 encoding primitives
String >> encodeAsUTF8 String >> decodeFromUTF8 String >> decodeIntoDoubleByteStringFromUTF8 MultiByteString >> decodeFromUTF8 MultiByteString >> encodeAsUTF8
4/8/2012 OOPSLA T39 GemStone James Foster 12
GS/S 64 Bit 2.3.x
Persistent shared counters (128 64-bit signed) GsFile support for GZIP compressed files ProfMonitor enhancements Repository >> listObjectsInSegments: anArray Repository >> countInstances: anArray Numerous cache statistics added & updated Numerous bug fixes
OOPSLA T39 GemStone James Foster 13
4/8/2012
GS/S 64 Bit 2.4.0 (September)
Performance improvements
Parallel transaction log recovery/restore (5x) Reduced network round trips
During login System class >> currentSessionNames Repository >> fileSizeReport
Parallel index creation
Repository profiling
Class count & size
4/8/2012 OOPSLA T39 GemStone James Foster 14
GS/S 64 Bit 2.4.0 (September)
Various new methods
Rename file Time since stone startup String formatting (centering) ANSI Stream methods Session login and last transaction time
List instances in page order ProfMonitor now has tree output
4/8/2012 OOPSLA T39 GemStone James Foster 15
GS/S 64 Bit 2.4.0 (September)
Extended character set collation support ANSI-compliant Stream position option Reflection API ANSI Exception improvements More statistics Many bug fixes
4/8/2012
OOPSLA T39 GemStone James Foster
16
GS/S 64 Bit 2.4.0 (September)
Seaside 2.8.3 Work on Seaside 2.9
Partial continuations
Metacello
4/8/2012
OOPSLA T39 GemStone James Foster
17
GS/S 64 Bit 3.0 (next year)
Major VM rewrite Significant performance improvements FFI (C callout to DLL) Ruby support Sandbox methods
4/8/2012
OOPSLA T39 GemStone James Foster
18
Agenda
What is GemStone? Smalltalk Product Releases MagLev (Ruby) Demo Getting Started with GemStone Seaside Metacello Questions
OOPSLA T39 GemStone James Foster 19
4/8/2012
MagLev (Ruby) Demo
Simple
Hello World!
More complex
Ruby Gems Rack Sinatra
Martin will discuss technology on Thursday Ask Monty questions about Ruby
4/8/2012 OOPSLA T39 GemStone James Foster 20
Agenda
What is GemStone? Smalltalk Product Releases MagLev (Ruby) Demo Getting Started with GemStone Seaside Metacello Questions
OOPSLA T39 GemStone James Foster 21
4/8/2012
Getting Started with GemStone
VMWare virtual appliance Native Cocoa Application
4/8/2012
OOPSLA T39 GemStone James Foster
22
Virtual Appliance
GLASS
GemStone, Linux, Apache, Seaside, Smalltalk Or: GemStone, Linux, Aida, Scribo, Smalltalk
Virtual Appliance
VMware Server on Windows & Linux Fusion on Macintosh
Demo
4/8/2012
OOPSLA T39 GemStone James Foster
23
Native Install
Linux Macintosh
Demo
4/8/2012
OOPSLA T39 GemStone James Foster
24
Cocoa Application
GemStoneApp.dmg (78 MB disk image) GemStone.app (291 MB)
Manages stone & gems Workspace Start Hyper web server Launch web browser Launch GemTools
Demo
4/8/2012 OOPSLA T39 GemStone James Foster 25
Agenda
What is GemStone? Smalltalk Product Releases MagLev (Ruby) Demo Getting Started with GemStone Seaside Metacello Questions
OOPSLA T39 GemStone James Foster 26
4/8/2012
Seaside
Tutorial
Learning Web Development with Seaside
Scaffolding
Demo
Support 2.9 development
4/8/2012
OOPSLA T39 GemStone James Foster
27
Agenda
What is GemStone? Smalltalk Product Releases MagLev (Ruby) Demo Getting Started with GemStone Seaside Metacello Questions
OOPSLA T39 GemStone James Foster 28
4/8/2012
Metacello
Monticello provides code management
Atomic loading of code in a package Comparison of changes between two packages
Metacello is a package management system
Packages are still Monticello Packages are managed as projects & configurations
4/8/2012
OOPSLA T39 GemStone James Foster
29
Metacello: Declarative Modeling
A Metacello project has named versions consisting of lists of explicit Monticello package versions. Dependencies are explicitly expressed in terms of named versions of required projects. A required project is a reference to another Metacello project.
4/8/2012
OOPSLA T39 GemStone James Foster
30
Metacello: Distributed Repositories
Project metadata is represented as instance methods in a class. Metacello project metadata is just code stored in a Monticello package. As a result, it is easy for distributed groups of developers to collaborate on ad hoc projects.
4/8/2012
OOPSLA T39 GemStone James Foster
31
Metacello: Optimistic Development
With Monticello-based packages, concurrent updates to the project metadata can be easily managed. Parallel versions of the metadata can be merged just like parallel versions of the code base itself.
4/8/2012
OOPSLA T39 GemStone James Foster
32
Metacello: Cross Platform
Metacello must run on all platforms that support Monticello:
Squeak Pharo GemStone ???
4/8/2012
OOPSLA T39 GemStone James Foster
33
Metacello: Conditional Monticello Package Loading
Platform-specific Monticello packages can be conditionally loaded.
#common. Code that is common across all platforms. #squeakCommon. Code that is common to Squeak and Pharo. #squeak. Code that is specific to Squeak. #pharo. Code that is specific to Pharo. #gemstone. Code that is specific to GemStone.
Project-specific attributes (GS 2.x vs. 3.x)
4/8/2012 OOPSLA T39 GemStone James Foster 34
Metacello: Support MC2
It should be possible to manage Metacello projects that are based on alternate Distributed Source Code Management systems like Monticello2.
4/8/2012
OOPSLA T39 GemStone James Foster
35
Metacello: License
MIT
4/8/2012
OOPSLA T39 GemStone James Foster
36
Monticello Package Dependencies
4/8/2012
OOPSLA T39 GemStone James Foster
37
Metacello Project Definition
4/8/2012
OOPSLA T39 GemStone James Foster
38
Metacello VersionSpec
MetacelloProjectTutorial>>#version10
4/8/2012
OOPSLA T39 GemStone James Foster
39
VersionSpec - 1
blessing
A version can be tagged with a blessing like #alpha, #beta, #release, #development (or any other tag that is deemed useful). The blessing is used as a version filter. For example the latest version of a Metacello project is currently defined as the latest version whose blessing is not #development.
4/8/2012
OOPSLA T39 GemStone James Foster
40
VersionSpec - 2
description
Useful information about the version.
packages
A list of Monticello package versions (or project references via required projects) that make up the project.
repositories
A list of Monticello repositories from which the packages can be loaded.
4/8/2012 OOPSLA T39 GemStone James Foster 41
VersionSpec - 3
groups
An alias for a collection of packages.
doits
A collection of blocks associated with a Monticello package that are evaluated before and/or after a package is loaded.
project package
A definition of the Monticello package name and Monticello repository from which the latest project metadata is be loaded.
4/8/2012 OOPSLA T39 GemStone James Foster 42
VersionSpec - 4
required projects
A list of projects that the Metacello project depends upon. A required project spec includes
the version of the project the name of the Metacello project classs the package and repository from which the project metadata is loaded (note the similarity to the project package specification).
4/8/2012
OOPSLA T39 GemStone James Foster
43
VersionSpec - 5
Any one of the versionSpec attributes may be conditionally modified. Heres an example package specification that adds a new Monticello package version for the package Example-Core when the #testPlatform attribute is present:
4/8/2012
OOPSLA T39 GemStone James Foster
44
Integrated Tools - 1
Save Packages
Finds the dirty Monticello packages that are members of the selected version of the Metacello project and saves them, prompting you for version name and commit comment. After the packages are saved you are prompted to Update Package Methods.
4/8/2012
OOPSLA T39 GemStone James Foster
45
Integrated Tools - 2
Update Package Methods
Automatically updates the package spec metadata for the selected version.
Modifies and compiles the methods with the #packages:attribute: pragma for the appropriate version to match the currently loaded Monticello package versions.
After the methods are update you are prompted to Save Project.
4/8/2012
OOPSLA T39 GemStone James Foster
46
Integrated Tools - 3
Update Package Repositories
Updates the repository group for each Monitcello package associated with the selected version of the Metacello project to include the repository for that package as specified in the version spec. Scans every package and adds the project repository to the repositoryGroup for each package, so that one doesnt have to manually do so.
4/8/2012 OOPSLA T39 GemStone James Foster 47
Integrated Tools - 4
Current Project Version
Displays the current version of the selected Metacello project. The version is calculated by comparing the currently loaded Monticello packages to those specified in the version spec. A leading ~ means that the version is partially loaded (i.e., not all of the packages associated with the project have been loaded into the image).
4/8/2012 OOPSLA T39 GemStone James Foster 48
Integrated Tools - 5
Load Project Version
Prompts for the version of the selected Metacello project to be loaded. If there are groups associated with the selected version, you are prompted for the group that you would like loaded. When in doubt choose ALL.
4/8/2012
OOPSLA T39 GemStone James Foster
49
Integrated Tools - 6
Save Project
Saves the selected Metacello project to the repository specified by the project package of the selected version. You are prompted for version name and commit comment.
4/8/2012
OOPSLA T39 GemStone James Foster
50
Integrated Tools - 7
Update Project
Loads the latest Monticello package version from the repository specified in the project package of the selected version of the Metacello project. Remember that you are simply loading the Metacello project metadata, so it doesnt hurt to have the latest metadata loaded. Once the latest version is loaded, you are prompted to Load Project Version.
4/8/2012 OOPSLA T39 GemStone James Foster 51
Metacello Example: Pier - 1
Best of all, it becomes possible to load a project like Pier into a minimal base image (with only Monticello, Metacllo and OB loaded) using something like the following expression:
(GsPierMetacelloProject version: '1.2') load: { 'Pier Core'. 'Pier AddOns'. }
4/8/2012
OOPSLA T39 GemStone James Foster
52
Metacello Example: Pier - 2
Not only does Pier get loaded, but all of the projects that Pier depends upon (i.e., Magritte, Seaside, Scriptaculous, etc.) get loaded along with the projects that they depend upon.
4/8/2012
OOPSLA T39 GemStone James Foster
53
Metacello Example: Pier - 3
Definitions of Pier Core and Pier AddOns GsPierMetacelloProject>>#groups0233
4/8/2012
OOPSLA T39 GemStone James Foster
54
Agenda
What is GemStone? Smalltalk Product Releases MagLev (Ruby) Demo Getting Started with GemStone Seaside Metacello Questions
OOPSLA T39 GemStone James Foster 55
4/8/2012
Conclusion
Resources
http://seaside.gemstone.com/
Questions?
[email protected] http://programminggems.wordpress.com
4/8/2012
OOPSLA T39 GemStone James Foster
56