ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> boost
boost
[boost] Re: Library Proposal: Event-Driven Values
by Roland Richter other posts by this author
Jun 7 2003 2:35PM messages near this date
[boost] Library Proposal: Event-Driven Values | [boost] Re: Library Proposal: Event-Driven Values
Dear Nicolas,

  sorry for the late reply. Some other projects try to keep me busy.

  First, I'd like to mention that in German-speaking countries, EDV
  is a very common acronym for "Elektronische Datenverarbeitung"
  ("electronic data processing"), hence the library name might be
  somewhat confusing.

  I think that your ideas lead into two rather different directions,
  depending on whether these "event-driven" values
    (a) actively update their related values whenever changed, or
    (b) are passive and do nothing until their value is fetched.

  Let me explain this point using your "sum" example:

    concrete_value<int>  i(4), j(6);
    sum_value<int>  sum(i, j);  // sum now equal to 10

    i = 6;  // sum now equal to 12

  Yeah, right, sum is 12 now - but who cares? It might be 13 or 14
  or 2893457923 - you wouldn't notice the difference only until the
  value of sum is actually fetched. Oh wait, somebody did just that
  some lines later:

    sumsum = 2 * sum;

  Only here the value of sum gets visible to the outer world, and only
  here there is any need to re-calculate its value - a technique called
  "lazy evaluation" (for obvious reasons).

  If you intend to follow that path - lazy evaluated values - what
  you are really doing is symbolic math: forming expressions out
  of operators (+, -, ==) and variables (i, j, sum) which might or
  might *not* represent a numeric value.

  Most major mathematical software distributions work in just that
  way and allow you to do something like this:

    sum = i + j;  // sum evaluates to i + j, because neither i nor j are
                  //     yet bound to a numerical value

    i = 6;        // sum evaluates to 6 + j
    j = pi;       // sum evaluates to 6 + pi, or 9.14159.

  For a symbolic math package in C++, I'd point you to http://www.ginac.de


  I guess, however, that your main interest lies in variant (a),
  "event-driven" (opposed to "lazy evaluated") values, that is, in
  implementing some special form of the Subject/Observer pattern,
  based on boost::signals.

  For reasons I pointed out above, this would just make sense if your
  main focus is *not* on updating other values, but on triggering some
  action, like this:

    void print_me( int i )
    {
      std::cout << i << std::endl;
    }

    value<int>  i( 6, print_me );
    i = 42;  // Prints 42 to stdout.

  In other words, value<Type>  would be some type where construction,
  assignment, and maybe destruction would call some signals. This might
  include, but is not limited to, updating other values.

  Such a class might indeed be helpful, because notifications often occur
  if a value has changed; so this would simplify things. However, I doubt
  whether it pays off to invent all those sum_, diff_, sync_, and_so_on_value's
  in an "event-triggers-update-of-values" way.


  - Roland


_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Thread:
Nicolas Fleury
Roland Richter
Nicolas Fleury

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved