# SoftBank Robotics documentation What's new in NAOqi 2.8?

# Merge Request #15 - December

## Features

- Future: always respect synchronicity of callbacks, when a connection is made sync, the callback is guaranteed to run synchronously on the promise.setValue() thread or on the future.connect thread
- String registration: allow implementation to make a copy of the string
- qi::Path: considered as a string in the typesystem
- ObjectTypeBuilder: support adding a description for the object
- Gateway: reconnect a few times before giving up
- Python: added stack trace to errors
- Python: bind qi::File in qicore
- qi::File: remove preparedCopyToLocal() function, replaced by FileCopyToLocal type
- qi::File: FileOperation does not inherit anymore from ProgressNotifier, but it provides a ProgressNotifier through its notifier() member function
- qi::File: ProgressNotifier and File member functions starting with underscore have been renamed to the same without the underscore
- Support boost 1.59

### New C++11 API for threading

A big part of the threading code has been rewritten to take advantage of C++11 features. All functions that needed the return type to be specified (like async, thenR, bind, etc) now have a replacement that does not need it to be specified.

Actors are now more powerful. You do not need to inherit from `Trackable` anymore (and your actor won’t work if you do). This has fixed a lot of bugs, including compilation errors in some cases and crashes in some other cases.

When you use qi::bind on an actor now, the call will be stranded, which makes things way easier to write:

    signal.connect(qi::bind(&Class::method, myActor));
    future.then(qi::bind(&Class::method2, myActor, _1));

`Strand::schedulerFor` is now most of the time useless since `qi::bind` does almost the same thing.

## Deprecations

- `qi::ApplicationSession::start` has been replaced by `qi::ApplicationSession::startSession`
- `Future::thenR` has been replaced by `Future::then`, you don’t need to specify template arguments
- `Future::andThenR` has been replaced by `Future::andThen`, you don’t need to specify template arguments
- You don’t need to specify template arguments to `qi::bind` and friends (unless it is the return type, in the same cases as `boost::bind`)
- You don’t need to specify template arguments to `qi::track` and friends
- You don’t need to specify template arguments to all `async` functions
- All `async(Functor, Duration)` have been replaced by `asyncDelay(Functor, Duration)`
- All `async(Functor, TimePoint)` have been replaced by `asyncAt(Functor, TimePoint)`
- Most of new functions are not variadic, use `qi::bind` if you need
- `QI_TYPE_ENUM_REGISTER` has been replaced by `QI_TYPE_ENUM` and is meant to be put in header files
- `Session::callModule` has been replaced by `Session::asyncCallModule`, the behavior has not changed, the call has always been asynchronous
- `Future::isCancelable` has become useless, all futures are now cancelable

## Bugfixes

- Future: if uninitialized, methods will throw (instead of deadlocking)
- Object: change cast operators and operator-> to be const, Object has a shared pointer semantic
- Gateway: fix various crashes
- Signature: support 16 bit types
- Python: fix bug when a method returns a Future which had an incomplete interface
- Python: fix FutureBarrier which always finished with an error
- Python: avoid throwing an error in logging in some cases
- Python: restore old findData interface
- Python: fix potential deadlock when destroying a strand

Glossary Site map Index Support Contact Legal Notices