A general-purpose object serialization framework developed in Pharo.
Fuel is developed under the MIT license.
- We don't aspire to have a dialect-interchange format. This enables us to serialize special objects like contexts, block closures, exceptions, compiled methods and classes. Although there are ports to other dialects, Fuel development is Pharo-centric.
- Depending on the context, there could be multiple ways of serializing the same object. For example, a class can be considered either a global or a regular object. In the former case, it will be encoded just its name; in the latter case, the class will be encoded in detail, with its method dictionary, etc.
- We worry about to have the best performance. We developed a complete benchmark suite to help analyse the performance with diverse sample sets, as well as compare against other serializers. Our pickling algorithm allows outstanding materialization performance, as well as very good serialization performance too.
- Object-Oriented Design
- From the beginning it was a constraint to have a good object-oriented design and to do not need any special support from the VM. In addition, Fuel has a complete test suite, with a high coverage. We also worry about writing comments on classes and methods.
- Binary format.
- Object-Oriented design.
- No special VM-support needed.
- Modular (clear division in packages).
- Can serialize/materialize not only plain objects but also classes, traits, methods, closures, contexts, packages, etc.
- Support for global references.
- Very customizable: ignore certain instance variables, substitute objects by others, pre and post serialization and materialization actions, etc.
- Supports class rename and class reshape.
- Good test coverage (almost 600 unit tests).
- Large suite of benchmarks.
- First steps with Fuel.
- Getting Started
- Some examples help to show the basic interface.
- Managing Globals
- What objects are treated as globals is configurable in Fuel. Learn about this with this guide.
- Customizing the Graph
- This guide explains how to store your objects in the right way when default behavior doesn't fit well.
- The list of exceptions thrown during serialization and materialization. We provide also an explanation for them.
- Classes change along time, and you can configure Fuel for loading old instances.
- Format Migration
- Each Fuel version has its own stream format. Furthermore, each version is not compatible with the others. This is a guide useful for upgrading Fuel.
- In this guide we explain about Fuel internals and show some debugging and visualization tools.
- Built-in Header Support
- Add extra objects and actions as the header of the stream.
- Overview of Packages
- A description of available packages that extend the core ones.
- What to do for each Fuel release (internal for developers)
- A guide for releasing a new fuel version.
You can follow us through the official blog.
Software using Fuel
We gather together a list of users in Software using Fuel. If you are a Fuel user we are not aware of, please let us know!
Presentations and publications
These slides show the pickle format and the serialization algorithm main idea with an example.
We presented Fuel at ESUG International Workshop on Smalltalk Technologies 2011. You can watch the presentation either in YouTube or mp4. You can also get the slides either in pdf or slideshare.
In proceedings of the mentioned workshop we published a paper which includes detailed description and benchmarks: Clustered Serialization with Fuel (Martin Dias, Mariano Martinez Peck, Stéphane Ducasse and Gabriela Arévalo)
We also wrote an extended version of the workshop paper and it that was accepted in the journal Software Practice and Experience (under submission process). This paper paper is much better than the previous one. If you are interested in learning about Fuel's internals, its differences with other serializers, etc, we invite you to read it.
In addition, Fuel has received the 1st prize at the ESUG Innovation Technology Awards 2011.
We also presented the project at Smalltalks 2011. You can see the slides.
In 2012, Martin Dias presented his Master thesis based on this project.
At the PharoConf in April 2013 in Bern, Switzerland, Max Leske showed demos of Fuel and Tanker. There is a screencast and a live recording of the demo session.
Fuel was initially inspired on Parcels.
Blog posts, screencasts and videos
Besides from our official Blog, you can read interesting articles about Fuel in Mariano's blog.
We truly appreciate James Robertson's screencast that shows how to download and try Fuel. In addition, James explains in another screencast how to use Fuel Package Loader to export and import all seaside packages.
In this video, Pavel Krivanek shows how he can export PharoCore with Fuel and materialize it in 15 seconds in a PharoKernel image.
- Martin Dias - tinchodias (at) gmail (dot) com (Developer)
- Mariano Martinez Peck - marianopeck (at) gmail (dot) com (Developer)
- Max Leske (Developer)
- Pavel Krivanek (Developer)
- Tristan Bourgois (Past Developer)
- Stephane Ducasse (Promotor and financer)