For those of you that want to know a bit more: 
http://code.google.com/p/pharo/w/edit/ActionsInPharo20


Here is a log of all the actions done in 2.0. The idea is not to replicate the 
bug tracker, as it is easy to get a complete list 
[http://code.google.com/p/pharo/issues/list?can=1&q=milestone%3D2.0 here].
Instead, the idea is to have a list of the major improvements with some 
explanations.

==UI==
We started a long term effort on the Pharo UI.

  * *Spec: a new way to build UI.* We started to rethink the way we build user 
interfaces in Pharo.  Spec has been developed by Benjamin van Ryseghem under 
the guidance of Stéphane Ducasse. Spec is based on a declarative syntax to 
specify user interfaces and on valueHolder port composition. Spec supports 
widgets definition, reuse and composition. New widgets can be created by 
composing existing widgets. Many existing tools have been reimplemented using 
Spec. We wrote a tutorial for Spec. Spec will be used for the UIPainter that we 
will develop for Pharo 3.0. In Pharo 3.0 we  will revisit and improve Spec. One 
of the idea is that Spec should be independent of Morphic so that we can use it 
to build native tools or with Amber. 

   * *Widget enhancements.* Several important widgets were greatly enhanced. 
This effort was led by Benjamin van Ryseghem. For example, multiple selection 
and single selection lists were unified. A new widget list has been developed 
from scratch and it exhibits massive speed improvements. 

   *  *Layout improvements/cleanups.* We improved the protocol used for 
creating LayoutFrame. We cleaned its implementation and simplify clients code. 
Now instance of layoutFrame are systematically well initialized. Clients do not 
need to check against nil values and a new protocol avoids to be forced to 
specify rectangle when only one number is required.

  *  *Keybindings.* Keybindings is a new library developed by Guillermo Polito 
to manage key bindings. We started to use it to define widgets keybinding as 
well as menu shortcut. In Pharo 3.0 we will systematically rewrite all the 
hard-coded bindings with it and write a documentation. It supports: 
    * source code navigation
    * running tests
    * basic refactoring
    * creating classes
    * and many more shortcuts: see "Shortcuts Description" in the window menu 
(triangle on the top right) in Nautilus

  * *New icons (famfam).* Pharo now uses new icons. We are looking for 
designers that could help us to define the UI look of the future Pharo 
versions. 

  * *"Growl" style notifications.* To avoid to get UI blocked by simple 
notifications, Pharo now uses a growl like notification systems. 

  * *Revamp progress bar.*  We started to rewrite the progress bar framework. 
We introduced the Job class and notification to specify progress bar. 

  * *Rectangle intersection improvements.* Rectangle intersection is a central 
part for UI redrawing and invalidating screen regions. Rectangle intersection 
is then an important functionality. We started to address the problem of the 
non-specification of the intersection of non overlapping rectangles. We 
introduced the intersect:ifNone protocol. As a side effect this improves the 
damage recording mechanisms and provide a faster system. 

==Developer tools==

   * *Nautilus browser.* Nautilus, a new code browser has been developed by B. 
van Ryseghem. It supports: in place hierarchy, groups, refactorings, multiple 
views, icon navigation and many other features. Nautilus has a plugin 
infrastructure so everybody can use existing plugin or write new ones. Nautilus 
is fully navigable using shortcut. In Pharo 3.0 we plan to rewrite Nautilus 
using Spec.

   * *Critics browser.* From Pharo 2.0 on we want to systematically run rule 
checking rules. We revisited the SmallLint rules to customize them to Pharo and 
we better documented them. We developed a new browser that will helps you to 
apply SmallLint rules. In particular it supports the notion of todos. We can 
mark an issue as a false positive or as todos and get the bar green. We wrote a 
complete chapter on the Critics Browser. We will start to work on an 
infrastructure to systematically evaluate SmallLint rules on the projects 
published in the Pharo distribution.

   * *Omnipresence of the Refactoring Engine.* We believe that Pharo itself 
should use the best tools it has to change itself. This is why we decided to 
introduce the Refactoring Engine and SmallLint rule checkers. Note that this 
move to integrate extra tool is not against our vision to produce a minimal 
core. Once we have fast fuel based package loading we will be able to remove 
Metacello from the core. 
 
  *  *Improved version diff browsing.* We improved the diff and merging tool.

  *  *Spotlight.* Spotlight is a ubiquitous tool to find classes and methods. 
You can activate it just press shift+enter. 

  * *Revamp E/O Completion and smart chars.* In the past, smart characters 
(automatically closing parenthesis, single quote...) did not play well with 
auto completeion. In addition, they were duplicated functionality between two 
automatic ecompletion algorithms. In Pharo 2.0 we unified the two algorithms 
under a single umbrella and integrate them smoothly with smart-characters. 

  * *Interactive navigation using "ctrl/cmd+click" over classes/methods.* Now 
Pharo supports the interactive navigation of source code using cmd/ctrl-click 
on selectors and class names in the source-code [implementors, senders, users].

  * *Shout themes.* Several syntax highlighting themes have been defined. 

  * *Andreas profiler.* As a tribute to Andreas Raab, we included an alternate 
profiler developed by Andreas.

==Networking==

  * *New version of Zinc.* Zinc is developed by Sven Van Caekenberghe.  New 
versions of Zinc the http client/server library has been integrated.
  
  * *Zodiac (SSL).* Zodiac is an extension of Zinc to support SSL connections.

==System==

  * *System Announcer.* Pharo had a change notification system. A change 
notification system is important because tools can register to events to update 
or react without getting coupled with the system. The problem was that the 
previous change notification broadcasted only symbols and not plain objects. It 
was limiting the power that we can get about first class objects. In addition 
not all the events were raised and competing with Announcements (announcements 
raised plain objects). In Pharo 2.0, we redefined system events as 
Announcements, introduced a System Announcer whose responsibility is to raise 
announcement for all the events and removed the old SystemChangeNotifier. This 
sets up the basis for the future communication between tools. 

  * *RPackage replacing PackageInfo.* PackageInfo is a way to identify if a 
method belongs to a package. The implementation is based on dynamic queries. 
Such queries it leads to problems to produce new generation browser and tools. 
We defined a new implementation of the package management of Pharo. The idea is 
to represent package as real objects. In Pharo3.0 we will continue to remove 
the dependency to PackageInfo.

  * *Manifest: Package metadata.* We introduce the notion of package metadata. 
Package metadata are used   to manage all false positives or todos of SmallLint 
so that you do not have to check all the time rule results. Each package can 
now have a class named ManifestNameOfXPackageNameX. It will be the place to add 
documentation and other information.

  * *Command line tools / Headless mode.* We really want to make sure that 
Pharo can be used in non interactive mode and that we can pass scripts to it on 
the command-line. For this reason we continued to work on making sure that 
Pharo can be used headless. In particular we introduced a new way to handle 
command line parameters. See `pharoVM my.image --help` and `pharoVM my.image 
--list`
    * st Handle .st source files
    * Fuel Handle fuel files
    * config Install and inspect Metacello Configurations from the command line
    * save Rename the image and changes file
    * test Run tests from command line
    * update Load updates
    * printVersion Print image version
    * eval Evaluate directly passed-in one line script

  * *Native boost.*   NativeBoost is a library that generates assembly code on 
the fly. It is used to generate FFI calls. By default 
[http://www.esug.org/wiki/pier/Conferences/2011/Schedule-And-Talks/Native-boost 
NativeBoost] is included mostly for future use. In Pharo3.0 vector graphics 
will be used and Nativeboost will be used to invoke the graphics primitives.

  * *Ring metamodel.* Ring is a new meta model introduced in Pharo 1.4. It is 
used to represent code that is not currently executed. Ring has an API that is 
polymorphic with a subpart of the core executing entities of Pharo (Class and 
CompiledMethod). This has the nice property that the tools that manipulate such 
entities can also manipulate ring objects. Hence Ring supports of image 
browsing. In Pharo 3.0 we will rewrite certain tools to use ring and deprecate 
some abstractions like pseudo-classes and file packages.


  * *Fuel.* Fuel is one of the fastest and versatile object serializer. In 
Pharo 2.0, we decided to use fuel as a default serializer. In particular, on 
error the execution stack is saved now in fuel format. Therefore it is possible 
to reopen a debugger on a similar image for debugging purpose.

  * *Freetype fonts.* We offer now a better handling of freetype fonts and 
their management.

  * *Metacello: a universal package map.* Metacello is a framework to describe 
is included in the default image. In the future Pharo will be managed by 
Metacello. The idea also is that once we have fast fuel based package loading 
we will be able to remove Metacello from the core. 
  

==Kernel==

  *  *New object-oriented and powerful filesystem.* The old library to support 
file was dated and cumbersome to use. This version of Pharo uses FileSystem a 
new framework developed by Colin Putney. We revisited and integrated deeply 
into Pharo core. A full chapter is available in the new book 
http://rmod.lille.inria.fr/pbe2/. The work includes a complete removal of 
FileDirectory. There is a compatibility package to support the transition. 
Enjoy the new and clean API. 

  * *DateAndTime refactoring.*  All the DateAndTime internals are now 
UTC-based. This prevents bugs in certain edge-cases where the image is moved 
through different time-zones, most prominently for daylight saving time.
 
==VM==
  *  Latests cog builds
  *  SSLPlugin
  *  FilePlugin enhancements
  *  SocketPlugin fixes
  *  Included libraries: freetype2, cairo

==Large Cleanups==
  * *FileDirectory removal.* FileDirectory the old file system has been 
removed. It is packaged as a separate package to support migration to Pharo2.0.

  *  *Deprecation of old serialization framework.* *ReferenceStream* and 
*SmartRefStream* are removed. In addition, *DataStream* is cleaned to be only 
used by Monticello. For a general purpose serializer, use 
*[http://rmod.lille.inria.fr/web/pier/software/Fuel Fuel]* instead.

  * *Large amount of bugs fixes.* You already guessed in addition we integrated 
*a lot* of small improvements, cleanups and bug fixes.

==Continuous Integration==
  * *Zeroconf scripts.* Weren't you fed up not be able to install Pharo from a 
single command line or to pass it arguments?  Using a nice debugger and an 
interactive environment development does not mean that Pharo developers do not 
value automatic scripts and love command line. Yes we do and we want the best 
of both worlds! Since Pharo 2.0, Pharo supports a way to define and handle 
command line argument and offer zero conf scripts. We even wrote a chapter on 
them. 
Here is a nice start with a zero-conf bash scripts: `wget --quiet -O - 
http://files.pharo.org/script/ciPharo20PharoVM.sh | bash`
 
  * *CI for everything.* A new infrastructure to support continuous integration 
is now in place. 
       * First new images and vms are mirrored under http://files.pharo.org/
       * Second the key parts of pharo are automatically built on 
[https://ci.inria.fr/pharo/] 
       * Third community project can be hosted at 
[http://ci.inria.fr/pharo-contribution/]

 

Reply via email to