README.md in celluloid-0.18.0.pre2 vs README.md in celluloid-0.18.0

- old
+ new

@@ -2,106 +2,44 @@ [![Gem Version][gem-image]][gem-link] [![MIT licensed][license-image]][license-link] [![Build Status][build-image]][build-link] [![Maintained: no][maintained-image]][maintained-link] +[![Gitter Chat][gitter-image]][gitter-link] [celluloid-logo-image-raw]: https://raw.github.com/celluloid/celluloid-logos/master/celluloid/celluloid.png [gem-image]: https://badge.fury.io/rb/celluloid.svg [gem-link]: http://rubygems.org/gems/celluloid [build-image]: https://secure.travis-ci.org/celluloid/celluloid.svg?branch=master [build-link]: http://travis-ci.org/celluloid/celluloid [license-image]: https://img.shields.io/badge/license-MIT-blue.svg [license-link]: https://github.com/celluloid/celluloid/blob/master/LICENSE.txt [maintained-image]: https://img.shields.io/maintenance/no/2016.svg [maintained-link]: https://github.com/celluloid/celluloid/issues/779 +[gitter-image]: https://badges.gitter.im/badge.svg +[gitter-link]: https://gitter.im/celluloid/celluloid -_NOTE: This is the 0.18.x **development** branch of Celluloid. For the 0.17.x -**stable** branch, please see:_ +Celluloid is a framework for building asynchronous and multithreaded Ruby +programs using object-oriented concepts. -https://github.com/celluloid/celluloid/tree/0-17-stable +## Revival Process Underway -> "I thought of objects being like biological cells and/or individual -> computers on a network, only able to communicate with messages" -> _--Alan Kay, creator of Smalltalk, on the meaning of "object oriented programming"_ +`Celluloid` is in the process of being refactored and released back into the wild during `Google Summer of Code`. The next era will not have one individual active maintainer, but a team of collaborators. Going forward, previously dormant maintainer [Donovan Keme](https://github.com/digitalextremist) is returning to support future primary maintainer [Emese Padányi](https://github.com/emesepadanyi) during `GSoC 2020`. Her plan extends past the Summer program, and aims to revive the community and codebase of `Celluloid` together. Backing this process are [Harsh Deep](https://github.com/harsh183) and `GSoC` alumni [Dilum Navanjana](https://github.com/dilumn). We welcome your collaboration and contributions in this massive work. -Celluloid provides a simple and natural way to build fault-tolerant concurrent -programs in Ruby. With Celluloid, you can build systems out of concurrent -objects just as easily as you build sequential programs out of regular objects. -Recommended for any developer, including novices, Celluloid should help ease -your worries about building multithreaded Ruby programs. +The codebase is being refactored to pursue a stable release with no deprecation warnings, and with this cleaned up: -## Motivation +# ![Diagram][celluloid-diagram] +*Diagram meticulously developed by [Emese Padányi](https://github.com/emesepadanyi)* -Much of the difficulty with building concurrent programs in Ruby arises because -the object-oriented mechanisms for structuring code, such as classes and -inheritance, are separate from the concurrency mechanisms, such as threads and -locks. Celluloid combines these into a single structure, an active object -running within a thread, called an "actor", or in Celluloid vernacular, a "cell". +[celluloid-diagram]: https://raw.githubusercontent.com/celluloid/celluloid/master/documentation/ClassDiagram-class_diagram.png -By combining concurrency with object oriented programming, Celluloid frees you -up from worry about where to use threads and locks. Celluloid combines them -together into a single concurrent object oriented programming model, -encapsulating state in concurrent objects and thus avoiding many of the -problems associated with multithreaded programming. Celluloid provides many -features which make concurrent programming simple, easy, and fun: +### Proudly supported by the best cloud infrastructure provider in the world: [`DigitalOcean`](https://digitalocean.com) -* __Automatic "deadlock-free" synchronization:__ Celluloid uses a concurrent - object model which combines method dispatch and thread synchronization. - Each actor is a concurrent object running in its own thread, and every method - invocation is wrapped in a fiber that can be suspended whenever it calls - out to other actors, and resumed when the response is available. This means - methods which are waiting for responses from other actors, external messages, - or other system events (including I/O with Celluloid::IO) can be suspended - and will never block other methods that are ready to run. This won't prevent - bugs in Celluloid, bugs in other thread-safe libraries you use, and even - certain "dangerous" features of Celluloid from causing your program to - deadlock, but in general, programs built with Celluloid will be naturally - immune to deadlocks. - -* __Fault-tolerance:__ Celluloid has taken to heart many of Erlang's ideas - about fault-tolerance in order to enable self-healing applications. - The central idea: have you tried turning it off and on again? Celluloid - takes care of rebooting subcomponents of your application when they crash, - whether it's a single actor, or large (potentially multi-tiered) groups of - actors that are all interdependent. This means rather than worrying about - rescuing every last exception, you can just sit back, relax, and let parts - of your program crash, knowing Celluloid will automatically reboot them in - a clean state. Celluloid provides its own implementation of the core - fault-tolerance concepts in Erlang including [linking](https://github.com/celluloid/celluloid/wiki/Linking), - [supervisors](https://github.com/celluloid/celluloid/wiki/Supervisors), - and [supervision groups](https://github.com/celluloid/celluloid/wiki/Supervision-Groups). - -* __[Futures](https://github.com/celluloid/celluloid/wiki/futures):__ - Ever wanted to call a method "in the background" and retrieve the - value it returns later? Celluloid futures do just that. It's like - calling ahead to a restaurant to place an order, so they can work - on preparing your food while you're on your way to pick it up. - When you ask for a method's return value, it's returned immediately - if the method has already completed, or otherwise the current method is - suspended until the value becomes available. - -You can also build distributed systems with Celluloid using its -[sister project DCell](https://github.com/celluloid/dcell). Evented IO similar -to EventMachine (with a synchronous API instead of callback/deferrable soup) -is available through the [Celluloid::IO](https://github.com/celluloid/celluloid-io) -library. - -### Is it any good? - -[Yes](http://news.ycombinator.com/item?id=3067434) - -### Is It "Production Ready™"? - -Yes, many users are now running Celluloid in production. - -* **See:** [Projects Using Celluloid](https://github.com/celluloid/celluloid/wiki/Projects-Using-Celluloid) - ## Discussion -Like Celluloid? [Join the mailing list/Google Group](http://groups.google.com/group/celluloid-ruby) -or visit us on IRC at #celluloid on freenode +- [Gitter Chat][gitter-link] +- [Google Group](https://groups.google.com/group/celluloid-ruby) ## Documentation [Please see the Celluloid Wiki](https://github.com/celluloid/celluloid/wiki) for more detailed documentation and usage notes. @@ -113,92 +51,39 @@ * [Celluloid class methods](http://rubydoc.info/gems/celluloid/Celluloid/ClassMethods) * [All Celluloid classes](http://rubydoc.info/gems/celluloid/index) ## Related Projects -Celluloid is the parent project of a related ecosystem of other projects. If you -like Celluloid we definitely recommend you check them out: +See also: [Projects Using Celluloid](https://github.com/celluloid/celluloid/wiki/Projects-Using-Celluloid) * [Reel][reel]: An "evented" web server based on `Celluloid::IO` * [DCell][dcell]: The Celluloid actor protocol distributed over 0MQ * [ECell][ecell]: Mesh strategies for `Celluloid` actors distributed over 0MQ * [Celluloid::IO][celluloid-io]: "Evented" IO support for `Celluloid` actors * [Celluloid::ZMQ][celluloid-zmq]: "Evented" 0MQ support for `Celluloid` actors * [Celluloid::DNS][celluloid-dns]: An "evented" DNS server based on `Celluloid::IO` * [Celluloid::SMTP][celluloid-smtp]: An "evented" SMTP server based on `Celluloid::IO` -* [Lattice][lattice]: A concurrent realtime web framework based on `Celluloid::IO` * [nio4r][nio4r]: "New IO for Ruby": high performance IO selectors * [Timers][timers]: A generic Ruby timer library for event-based systems [reel]: https://github.com/celluloid/reel/ [dcell]: https://github.com/celluloid/dcell/ -[ecell]: https://github.com/celluloid/ecell/ +[ecell]: https://github.com/abstractive/ecell/ [celluloid-io]: https://github.com/celluloid/celluloid-io/ [celluloid-zmq]: https://github.com/celluloid/celluloid-zmq/ [celluloid-dns]: https://github.com/celluloid/celluloid-dns/ -[celluloid-smtp]: https://github.com/celluloid/celluloid-smtp/ -[lattice]: https://github.com/celluloid/lattice/ +[celluloid-smtp]: https://github.com/abstractive/celluloid-smtp/ [nio4r]: https://github.com/celluloid/nio4r/ [timers]: https://github.com/celluloid/timers/ -## Installation - -Add this line to your application's Gemfile: - - gem 'celluloid' - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install celluloid - -Require Celluloid with: - - require 'celluloid' - -## Supported Platforms - -This library aims to support and is [tested against][travis] the following Ruby -versions: - -* Ruby 2.2.6+ -* Ruby 2.3.0+ -* JRuby 9.1.6.0+ - -If something doesn't work on one of these versions, it's a bug. - -This library may inadvertently work (or seem to work) on other Ruby versions, -however support will only be provided for the versions listed above. - -If you would like this library to support another Ruby version or -implementation, you may volunteer to be a maintainer. Being a maintainer -entails making sure all tests run and pass on that implementation. When -something breaks on your implementation, you will be responsible for providing -patches in a timely fashion. If critical issues for a particular implementation -exist at the time of a major release, support for that Ruby version may be -dropped. - -[travis]: http://travis-ci.org/celluloid/celluloid/ - -## Additional Reading - -* [Concurrent Object-Oriented Programming in Python with ATOM][ATOM] - a similar system to Celluloid written in Python - -[ATOM]: http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=11A3EACE78AAFF6D6D62A64118AFCA7C?doi=10.1.1.47.5074&rep=rep1&type=pdf - ## Contributing to Celluloid -* Fork this repository on github -* Make your changes and send us a pull request -* If we like them we'll merge them -* If we've accepted a patch, feel free to ask for commit access +- Fork this repository on github +- Make your changes and send us a pull request +- Pull requests will be reviewed for inclusion in the project ## License -Copyright (c) 2011-2016 Tony Arcieri, Donovan Keme. +Copyright (c) 2011-2018 Tony Arcieri, Donovan Keme. Distributed under the MIT License. See [LICENSE.txt](https://github.com/celluloid/celluloid/blob/master/LICENSE.txt) for further details.