Changes between Version 2 and Version 3 of soc/2007/SignalNetwork


Ignore:
Timestamp:
May 29, 2007, 11:33:14 PM (15 years ago)
Author:
Stjepan Rajko
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • soc/2007/SignalNetwork

    v2 v3  
    6060
    6161{{{
     62#!cpp
    6263// connect the generator to filter1
    6364generator.default_signal().connect(boost::bind(&signal_filter1::operator(), boost::ref(filter1)));
     
    7475
    7576{{{
     77#!cpp
    7678// connect (>>=) generator to filter1,
    7779// branch (|) from filter1 to both display1 and filter2,
     
    9799
    98100{{{
     101#!cpp
    99102// switch to the other signal generator:
    100103generator.default_signal().disconnect_all_slots();
     
    116119
    117120{{{
     121#!cpp
    118122// introduce a selector into the network
    119123signal_selector selector;
     
    146150The Signal Network library would provide a set of such commonly needed components,
    147151such as templates for signal generators, collectors, threading components, etc.
     152
     153== Interest ==
     154The interest for a library such as the Signal Network library was queried in the boost developers mailing list
     155message [http://lists.boost.org/Archives/boost/2007/02/116869.php [boost] interest in a "signal flow" library?]
     156
     157The community reported interest ranging from very interested through conditionally interested
     158(this would be interesting if...) to the opinion that using boost::Signals directly would
     159be more dependable and readable. Some of the suggestions are summarized in the
     160[http://dancinghacker.com/code/signet/ prototype documentation].
     161
     162Also, there were several mentions of similar "home-brewed" libraries that were in ways similar to the proposed
     163Signal Network library, indicating that including a well designed library of this type
     164in Boost would be useful to the community.
     165
     166== Relationships with other libraries ==
     167
     168The Signal Network library is based directly on Boost.Signals, and throughout the development I plan to maintain
     169compatilibility with both the original Boost.Signals library by Doug Gregor and the thread_safe_signals version
     170under implementation by Frank Mori Hess (which is geared to replace Boost.Signals).  Most of the tests written
     171for the current prototype version of the library work without problems with both base signal implementations.
     172
     173The library also makes use of Boost.Preprocessor, Boost.!TypeTraits, Boost.Utility
     174(call traits and enable_if).  Some parts of the library also use Boost.Threads (for components that are related to threading),
     175and Boost.Asio combined with Boost.Serialization (for components that can transmit / receive serializable signals
     176through Boost.Asio).
     177
     178A possible relationship / overlap with
     179[http://home.comcast.net/~jturkanis/iostreams/libs/iostreams/doc/home.html Boost.Iostreams] was indicated by Jeff Garland.
     180According to its website, Boost.Iostreams serves two main purposes:
     181 * To allow the easy creation of standard C++ stream and stream buffer classes for new data sources and sinks.
     182 * To provide a convenient interface for defining i/o filters and attaching them to standard streams and stream buffers.
     183
     184Hence, Boost.Iostreams has similar goals for streams as the Signal Network library has for signals.  The difference is that
     185signal networks offer more permanent channels of communication (connecting a signal to a slot makes a lasting
     186connection - everything coming out of the signal will be received by the slot until the connection is destroyed),
     187while streams offer more of a momentary transfer of information (stream << data makes no permanent connection).
     188Boost.Iostreams does allow permanent insertion of filters into a stream, but this does not seem to be intended for more complicated
     189network topologies.
     190
     191Also, [http://channel.sourceforge.net Channel] by Yigong Liu covers a lot of concepts that I hope
     192to address in the Signal Network library.  In particular, this library inspired
     193designing components that would allow signal
     194networks to be constructed accross multiple computers (using Boost.Asio and Boost.Serialization).
     195
     196== Google Summer of Code Scope ==
     197
     198Even though a signal network library such as the one proposed above can grow in many directions,
     199there is a core functionality requested by the community that can be completed
     200as a part of Google Summer of Code.
     201
     202In particular, the operator-based connection syntax, the development of flow control components,
     203the development of signal storage and threading components, and documentation of each are
     204feasible for me to complete as a part of Google Summer of Code.
     205
     206== Download ==
     207
     208Please see the [http://dancinghacker.com/code/signet/ prototype documentation].
     209
     210== Acknowledgements ==
     211
     212Thanks to the [http://ame.asu.edu Arts, Media and Engineering Program] at Arizona State Unversity
     213for their support in developing and releasing the prototype Signal Network library code.
     214
     215Thanks to the Boost community for their valuable suggestions and feedback:
     216 * Tobias Schwinger indicated that the library could be used for pulling rather than pushing data.
     217 * James Jones suggested that a {{{||}}}-like operator could be used for branching.
     218 * Paolo Coletta suggested a "video_generator >>= ( effect1 && effect2 ) >>= image_sum" - like syntax that would allow
     219   parallel processing of signals (identified as the "join" pattern by Yigong Liu).
     220 * Yigong Liu suggested enhanced support for common network topologies, such as mesh.
     221 * Braddock Gaskill pointed out the relationship with the "pipes and filters" pattern, and suggested
     222   the possibility of using functions as filters.  He also suggested the library would be more useful
     223   if different functions executed in parallel threads, or were queued to specific worker threads,
     224   if the library would provide functionality to control and schedule the execution of the invoked functions,
     225   or traverse the call graph.
     226
     227== Copyright ==
     228
     229The Signal Network library is copyright Stjepan Rajko 2007. Use, modification and
     230distribution is subject to the Boost Software License, Version
     2311.0. (See copy at
     232http://www.boost.org/LICENSE_1_0.txt)
     233