Pharo version 1.0
Pharo 1.0 was released on April 15, 2010. This is the first official release since starting the project in May 2008. Pharo 1.0 is just a milestone on our journey, and development of the next version, providing many improvements and speed, is well underway.
Summary of the work done in 1.0
Community, infrastructure and processes
Pharo 1.0 is a product of our growing community. We have established clear processes to track bugs, integrate changes, and manage a release. We have put the following infrastructure in place:
* A clean and up-to-date website (www.pharo-project.org)
* Google code project for tracking issues and a wiki for developers
* SqueakSource for MC source code management
* Inria server infrastructure for web downloads and mailing lists
* A test suite with over 9000 tests (100% pass)
We have put significant effort into making Pharo completely license clean. Pharo is now MIT licensed with parts under the Apache License. This is great news! Code that was not MIT licensed was removed from the system and where necessary rewritten from scratch. From the beginning of Pharo we have maintained a strict rule that every contributor has to sign our license agreement.
Improved look and feel
The overall look and feel as well as new widgets (e.g., toolbar, merge tool) have been introduced from the Polymorph project. UIBuilder is improved and there is a new theme system. Menus are reorganized and cleaned, making them much more usable.
We have a new set of subpixel anti-aliased Deja Vu bitmap fonts. In addition, we have integrated Freetype font support, which allows you to use any font installed on your machine.
We have closed over 1000 issues in our bug tracker. You can find the details here: http://code.google.com/p/pharo/issues/list
Major system cleanup
An incredible amount of dead and duplicated code is removed or cleaned up, for instance:
* Underscores and hidden character usage in source code
* Fileout code (removed all HTML logic)
* Utilities, PackageOrganizer, and MappedCollection
* ReadOnly binding experiments
Morphic speedup and MVC removal
* Various optimizations and speedup of Morphic applied
* Most historic MVC code, including isMorphic tests, are removed
Cleaner package structure
* Lots of package dependency cycles are removed.
* Class extensions are added in the right places.
* Package naming conventions
* MorphicExamples is extracted into an external package
* The sound system is modular and put into an external package
* SqueakMap is unloaded
* Many broken, unused, and obsolete preferences are removed
* In addition, many references to preferences caused tangled dependencies. Packages are now ready for Preference removal.
Nebraska and Etoy code has been removed. This task is complex and a work in progress.
* The Tiling system, colored streams and related stack-oriented experiments are also removed.
* The UniClasses logic is removed. PasteUpMorph and Morph have also received a lot of cleaning.
* Improved and simplified Traits implementation.
* Compiled methods are not shared anymore.
* A test suite with over 9000 tests (100% pass)
* Collection library is cleaned up and a large test suite applied
* Significant test coverage for streams
* All tests can be unloaded for smaller production configurations
By cleaning unused objects and code, the memory footprint is significantly reduced. The size of a PharoCore 1.0 image file on disk is about 11MB; and one that is stripped for production is 8MB.
Core class improvements
* Collection and Number (faster printing, more robust reader)
* Faster collections (avoid intermediate collections when iterating)
* Dramatically improved performance of file operations (by generalizing the trick from ByteString>>#squeakToUtf8)
New or improved
* Process-specific variables are now supported
* SplitJoin methods are integrated
* [Multi]CanvasCharacterScanner fixed
* Better doesNotUnderstand: logic
* Stream fixes (e.g., back, ensures) and use of MultiByteStream
* Better handling of crlf
* More polymorphic CompiledMethod/MethodReference interfaces
* Implementations introduced for Float predecessor, successor, ...
* Updates to the compact class indexes of large integer classes
* Float changes are made to convey their approximate nature
New infrastructural packages added to the core system
* Regular Expressions
* MD5 and SHA1 secure hash algorithms
* Support for literal ByteArray syntax is added. Byte arrays can now be written as #[1 2 3] instead of #(1 2 3) asByteArray avoiding the need for conversion and a more compact default representation.
* Compiler now throws an exception rather than returning an instance of StringMorph as its SyntaxError.
New Event Logic
* The old polling event logic is replaced with a new event framework. The polling logic has not yet been removed from the core system for backwards compatibility.
Full block closure support
Pharo now supports full block closure semantics. With full closures you can finally use recursive blocks. Blocks now close over temps correctly. We no longer require the use of #fixTemps. We especially thank Teleplace for funding Eliot Miranda's work and releasing it to the community.
Improved developer tools
A lot of work has been performed on the developer tools
* Syntax highlighting
* Faster and thread safe Transcript
* Better profiler (aka. message tally)
* A new inspector tool
* A new diff tool
* Refactoring engine cleaned with a new test suite
* OmniBrowser now has all its tests passing and has a lot of fixes
* OmniPackageBrowser has been separated from OmniBrowser and supports package browsing and traits definition.
* SUnit GUI is improved, e.g., with test coverage computation
Source code management
Monticello is improved. Various load-order issues are fixed, making loading of packages more robust. Monticello and PackageInfo are now faster in several areas making browsing of large repositories significantly faster.
Gofer, a new tool to script Monticello package loading, is part of Pharo now. Gofer is the foundation for Metacello, the new package management system.
Run the executable after unzipping – no installation required!
Follow the integrated, interactive tutorial
This is a production release. Please report any bugs you may encounter.
This release is maintained. Critical patches are going to be applied in subsequent versions 1.0.* (at least until version 1.1 is released).
We thank all the contributors (in alphabetical order): Adrian Lienhard, Alain Plantec, Alexandre Bergel, Andrew Black, Andrew Tween, Bart Gauquie, Cesar Rabak, Cyrille Delaunay, Dale Henrichs, Damien Cassou, Damien Pollet, Dan Corneanu, David Roethlisberger, Douglas Brebner, Esteban Lorenzano, Elliot Miranda, Fabrizio Perin, Fernando Olivero, Gabriel Calero, George Herolyants, Giovanni Corriga, Gwenael Casaccio, Henrik Sperre Johansen, Hernan Wilkinson, James Foster, Jannik Laval, Jean-Baptiste Arnaud, John McIntosh, Johan Brichau, Jorge Ressia, Julian Fitzell, Laurent Laffont, Luc Fabresse, Lukas Renggli, Marcus Denker, Mariano Martinez Peck, Martin McClure, Matthew Fulmer, Matthias Berth, Michael Rueger, Miguel Coba, Mike Roberts, Nicolas Cellier, Niko Schwarz, Norbert Hartl, Noury Bouraqadi, Oscar Nierstrasz, Peter Hugosson Miller, Philipp Marshall, Rob Rothwell, Serge Stinckwich, Sergio Del Franco, Sheridan Mahoney, Simon Denier, Stephane Ducasse, Stephan Eggermont, Torsten Bergmann, Yann Monclair
Thanks also to the people and companies supporting external projects from which we integrate code: Cog (full block closure support), Cuis (font support), Polymorph (GUI), Squeak (various changes and fixes)