AnyEvent 6 release candidate available for testing/review/...

Marc Lehmann schmorp at schmorp.de
Sun Aug 21 05:15:38 CEST 2011


Hi!

I just tar'ed a release candidate for AnyEvent 6:

   http://data.plan9.de/AnyEvent-6.01.tar.gz

It would be nice if somebody who is not me would give it a test before it
is released :)

The highlights of the upcoming release will be:

 - bugfixes. *sigh*

 - AnyEvent::Debug can now wrap all watchers, store an inventory of all
   watchers active in the program and provide error history, create
   backtrace, human readable callbacks and more information about callbacks.

   Example AnyEvent:;:Debug::shell session:

   > wl

   41555896  AnyEvent:1438(detect)>io>AnyEvent::Socket:489
   55336472  AnyEvent::DNS:799(new)>io>AnyEvent::DNS:139
   55342208  AnyEvent::DNS:811(new)>io>AnyEvent::DNS:139
   83540832  AnyEvent::Debug:436((eval))>io>AnyEvent::Debug:135
   46602664  Coro::Debug:509(new_unix_server)>io>AnyEvent::Socket:489
   49648120  DC::DB:472(Server::run)>io>DC::DB::Server::fh_read
   50985392  DC::DB:510(open_db)>io>BDB::poll_cb
   53102488  Deliantra::Protocol::Base:78(__ANON__)>io>Deliantra::Protocol::Base:78

   > w 49648120

   49648120 DC::DB:472(Server::run)>io>DC::DB::Server::fh_read
   type:    io watcher
   args:    poll r fh GLOB(0x2c71d68)
   created: 2011-08-21 05:02:33.982064 +0200 (1313895753.98206)
   file:    /root2/src/deliantra/CFPlus/blib/lib/Deliantra/Client/private/DC/DB.pm
   line:    472
   subname: DC::DB::Server::run
   context: 
   cb:      CODE(0x246c1e0) (DC::DB::Server::fh_read)
   invoked: 6 times
   created
   (eval 25) line 6        AnyEvent::Debug::Wrap::__ANON__('AnyEvent','fh',GLOB(0x2c71d68),'poll','r','cb',CODE(0x246c1e0)=DC::DB::Server::fh_read)
   DC::DB line 472         AE::io(GLOB(0x2c71d68),'0',CODE(0x246c1e0)=DC::DB::Server::fh_read)
   bin/deliantra line 2776 DC::DB::Server::run()
   bin/deliantra line 2941 main::main()

 - AnyEvent::Strict now also checks functions in the AE:: namespace.

 - vastly improved, but still small, logging framework has been added (mostly
   because AnyEvent itself needed one):
   http://pod.tst.eu/http://cvs.schmorp.de/AnyEvent/lib/AnyEvent/Log.pm

Apart from making sure existing programs still "just work" (and that
memory usage didn't increase unless the new features are used), I would be
happy if the new features come in useful for some people (and elicit some
feedback).

The full list of changes so far are:

        - INCOMPATIBLE CHANGE: AnyEvent::DNS resource records now include
          the TTL as fourth element - this affects ->resolve, ->request
          and ->dns_unpack indirectly. Convenience functions such as
          AnyEvent::DNS::{a,txt,mx,srv} are not affected, neither is
          AnyEvent::Socket.
        - INCOMPATIBLE CHANGE: backend authors now should not implement
          one_event or loop, but instead the AnyEvent::CondVar::_wait and _poll
          methods.
        - INCOMPATIBLE CHANGE: verbosity levels have been redefined, see
          AnyEvent (PERL_ANYEVENT_VERBOSE) and AnyEvent::Log for details.
        - DEPRECIATION: please change
          "use AnyEvent::Impl::Perl" to "use AnyEvent::Loop" and
          "AnyEvent::Impl::Perl::loop" to "AnyEvent::Loop::run"
          in your programs, for future compatibility.
        - *blush* idle watcher emulation was borked.
        - AnyEvent::Strict now checks the AE::xxx functions as well.
        - querying too long domain names would barf deep inside AnyEvent::DNS - since
          this is hard to avoid for applications, AnyEvent:.DNS::request now checks for
          for too long domain names explicitly and passes an undef to the callback
          instead (reported by James Bromberger).
        - make AnyEvent::Util more robust against EINTR (analyzed by Andrew Suffield).
        - new functions: AnyEvent::postpone, AnyEvent::log.
        - new module: AnyEvent::Log, for simple logging needs.
        - new env variable, PERL_ANYEVENT_DEBUG_SHELL, to automatically start
          a debug shell.
        - new env variable, PERL_ANYEVENT_DEBUG_WRAP, to automatically enable
          watcher instrumentation/wrapping (see AnyEvent::Debug::wrap).
        - lots of new AnyEvent::Debug functionality.
        - AnyEvent::Strict now checks for modifications $_ by the callback
          (by setting it to readonly while executing the callback, if possible).
        - IO::Async sometimes cancels the wrong timer when you call cancel_timer.
          Invest extra overhead to work around this peculiar behaviour.
        - split the pure perl backend into a loop module and an impl
          module (AnyEvent::Loop and AnyEvent::Impl::Perl).
        - some read types (regex, netstring, json, storable) could
          errornously keep an AE::Handle object alive on their own
          (reported by Mohammad Toossi).
        - add more workarounds around child watcher bugs in IO::Async
          and (newly introduced) in POE.
        - use glib child watchers and try to work around its limitations,
          if possible (based on a patch by Kevin Ryde).
        - add support for FLTK (fltk2), via AnyEvent::Impl::FLTK2.
        - many read types in AnyEvent::Handle would malfunction during
          transitions to TLS because of a "delete $self->{rbuf}".
          (reported by Gerald Galster).
        - improve condvar blocking wait performance (probably only noticable
          with faster backends), also make it easier for event loops that
          do not support blocking waits.
        - PERL_ANYEVENT_MODEL now also allows full module names, although
          the usefulness of this feature is not yet clear.
        - add tests for all supported event loops, conditional on PERL_ANYEVENT_LOOP_TESTS.
        - add t/80_ssltext.t.
        - no longer use AUTOLOAD for the initial loading (for no very good reason).
        - tcp_server now tries to unlink unix domain sockets when it gets destroyed.
        - do not run event loop detection multiple times when programs call their cached
          copies of AnyEvent::detect.
        - parse_hostport now accepts absolute paths als unix domain sockets.
        - add Task::Weaken as dependency (as recommends only at this time).

Thanks for your attention :)

-- 
                The choice of a       Deliantra, the free code+content MORPG
      -----==-     _GNU_              http://www.deliantra.net
      ----==-- _       generation
      ---==---(_)__  __ ____  __      Marc Lehmann
      --==---/ / _ \/ // /\ \/ /      schmorp at schmorp.de
      -=====/_/_//_/\_,_/ /_/\_\



More information about the anyevent mailing list