compliance.qbk 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. [/
  2. (C) Copyright 2011-2015 Vicente J. Botet Escriba.
  3. Distributed under the Boost Software License, Version 1.0.
  4. (See accompanying file LICENSE_1_0.txt or copy at
  5. http://www.boost.org/LICENSE_1_0.txt).
  6. ]
  7. [section:compliance Conformance and Extension]
  8. [////////////////////////////////////////////]
  9. [section:cpp11 C++11 standard Thread library]
  10. [///////////////////////////////////////////]
  11. [note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.html C++11 - Standard for Programming Language C++]]]
  12. [table C++11 standard Conformance
  13. [[Section] [Description] [Status] [Comments] [Ticket]]
  14. [[30] [Thread support library] [Yes] [-] [-]]
  15. [[30.1] [General] [-] [-] [-]]
  16. [[30.2] [Requirements] [-] [-] [-]]
  17. [[30.2.1] [Template parameter names] [-] [-] [-]]
  18. [[30.2.2] [Exceptions] [Yes] [-] [-]]
  19. [[30.2.3] [Native handles] [Yes] [-] [-]]
  20. [[30.2.4] [Timing specifications] [Yes] [-] [-]]
  21. [[30.2.5] [Requirements for Lockable types] [Yes] [-] [-]]
  22. [[30.2.5.1] [In general] [-] [-] [-]]
  23. [[30.2.5.2] [BasicLockable requirements] [Yes] [-] [-]]
  24. [[30.2.5.3] [Lockable requirements] [yes] [-] [-]]
  25. [[30.2.5.4] [TimedLockable requirements] [Yes] [-] [-]]
  26. [[30.2.6] [decay_copy] [-] [-] [-]]
  27. [[30.3] [Threads] [Yes] [-] [-]]
  28. [[30.3.1] [Class thread] [Yes] [-] [-]]
  29. [[30.3.1.1] [Class thread::id] [Yes] [-] [-]]
  30. [[30.3.1.2] [thread constructors] [Partial] [-] [-]]
  31. [[30.3.1.3] [thread destructor] [Yes] [-] [-]]
  32. [[30.3.1.4] [thread assignment] [Yes] [-] [-]]
  33. [[30.3.1.5] [thread members] [Yes] [-] [-]]
  34. [[30.3.1.6] [thread static members] [Yes] [-] [-]]
  35. [[30.3.1.7] [thread specialized algorithms] [Yes] [-] [-]]
  36. [[30.3.2] [Namespace this_thread] [Yes] [-] [-]]
  37. [[30.4] [Mutual exclusion] [Partial] [-] [-]]
  38. [[30.4.1] [Mutex requirements] [Yes] [-] [-]]
  39. [[30.4.1.1] [In general] [Yes] [-] [-]]
  40. [[30.4.1.2] [Mutex types] [Yes] [-] [-]]
  41. [[30.4.1.2.1] [Class mutex] [Yes] [-] [-]]
  42. [[30.4.1.2.2] [Class recursive_mutex] [Yes] [-] [-]]
  43. [[30.4.1.3] [Timed mutex types] [Yes] [-] [-]]
  44. [[30.4.1.3.1] [Class timed_mutex] [Yes] [-] [-]]
  45. [[30.4.1.3.1] [Class recursive_timed_mutex] [Yes] [-] [-]]
  46. [[30.4.2] [Locks] [Yes] [-] [-]]
  47. [[30.4.2.1] [Class template lock_guard] [Yes] [-] [-]]
  48. [[30.4.2.2] [Class template unique_lock] [Yes] [-] [-]]
  49. [[30.4.2.2.1] [unique_lock constructors, destructor, and assignment] [Yes] [-] [-]]
  50. [[30.4.2.2.2] [unique_lock locking] [Yes] [-] [-]]
  51. [[30.4.2.2.3] [unique_lock modifiers] [Yes] [-] [-]]
  52. [[30.4.2.2.4] [unique_lock observers] [Yes] [ - ] [-]]
  53. [[30.4.3] [Generic locking algorithms] [Partial] [variadic] [#6227]]
  54. [[30.4.4] [Call once] [Yes] [-] [-]]
  55. [[30.4.4.1] [Struct once_flag] [Yes] [-] [-]]
  56. [[30.4.4.2] [Function call_once] [Yes] [-] [-]]
  57. [[30.5] [Condition variables] [Yes] [-] [-]]
  58. [[30.5.1] [Class condition_variable] [Yes] [-] [-]]
  59. [[30.5.2] [Class condition_variable_any] [Yes] [-] [-]]
  60. [[30.6] [Futures] [Yes] [-] [-]]
  61. [[30.6.1] [Overview] [Partial] [-] [-]]
  62. [[30.6.2] [Error handling] [Yes] [-] [-]]
  63. [[30.6.3] [Class future_error] [-] [-] [-]]
  64. [[30.6.4] [Shared state] [-] [-] [-]]
  65. [[30.6.5] [Class template promise] [Yes] [-] [-]]
  66. [[30.6.6] [Class template future] [Yes] [-] [-]]
  67. [[30.6.7] [Class template shared_future] [Yes] [-] [-]]
  68. [[30.6.8] [Function template async] [Yes] [-] [-]]
  69. [[30.6.9] [Class template packaged_task] [Yes] [-] [-]]
  70. ]
  71. [table Extension
  72. [[Section] [Description] [Comments]]
  73. [[30.3.1.5.x] [interrupt] [-]]
  74. [[30.3.2.x] [Interruption] [-]]
  75. [[30.3.2.y] [at_thread_exit] [-]]
  76. [[30.4.3.x] [Generic locking algorithms begin/end] [-]]
  77. ]
  78. [/
  79. [[30.x] [Thread Local Storage] [-]]
  80. [[30.y] [Class thread_group] [-]]
  81. ]
  82. [endsect]
  83. [section:cxx14 C++14 standard Thread library - accepted changes]
  84. [//////////////////////////////////////////////////////////////]
  85. [note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.html Working Draft, Standard for Programming Language C++]]
  86. [table [@http://isocpp.org/files/papers/N3659.html N3659 Shared locking in C++ revision 2] Conformance
  87. [[Section] [Description] [Status] [Comments]]
  88. [[30.4.1.4] [Shared Lockables Types] [Yes] [ - ]]
  89. [[30.4.1.4.1] [shared_mutex class] [Yes] [ - ]]
  90. [[30.4.2.3] [Class template shared_lock] [Yes] [-]]
  91. ]
  92. [endsect]
  93. [section:cxx1y C++14 TS Extensions for Concurrency V1 ]
  94. [/////////////////////////////////////////////////////]
  95. [note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4107.html N4107-Extensions for Concurrency]]
  96. [table Improvements to std::future<T> and related APIs]
  97. [[Section] [Description] [Status] [Comments]]
  98. [[2.1] [ - ] [ - ] [ - ]]
  99. [[2.2] [Class template future] [Partial] [ - ]]
  100. [[2.2] [then] [ Partial ] [ without implicit unwrapping #10550 and blocking #10551 ]]
  101. [[2.2] [is_ready] [ Yes ] [ - ]]
  102. [[2.3] [Class template shared_future] [Partial] [ - ]]
  103. [[2.3] [then] [ Partial ] [ Without implicit unwrapping #10550 and blocking #10551 ]]
  104. [[2.3] [is_ready] [ Yes ] [ - ]]
  105. [[2.4] [Function template when_all] [Partial] [ interface not complete #10426 and blocking #10551 ]]
  106. [[2.5] [Function template when_any] [Partial] [ interface not complete #10427 and blocking #10551 ]]
  107. [[2.6] [Function template when_any_back] [No] [ #XXXX ]]
  108. [[2.7] [Function template make_ready_future] [Yes] [ - ]]
  109. ]
  110. [endsect]
  111. [section:cxx1y C++1z TS Concurrency - On going proposals]
  112. [///////////////////////////////////////////////////////]
  113. [section:latch C++ Latches and Barriers]
  114. [//////////////////////////////////////]
  115. [note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3600.html N3600 C++ Latches and Barriers]]
  116. [note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3817.html N3817 C++ Latches and Barriers]]
  117. [table C++ Latches and Barriers Conformance
  118. [[Section] [Description] [Status] [Comments]]
  119. [[X.1] [Class latch] [Partial] [ A new class latch has been added. The interface is a super set of the one of the proposal, taking some of the functions of the class barrier.]]
  120. [[X.2] [Class barrier] [No] [ Even if Boost.Thread has a class boost:barrier it doesn't provides the same kind of services. There is an experimental completion_latch that could be used instead. ]]
  121. ]
  122. [endsect]
  123. [section:queue C++ Concurrent Queues]
  124. [///////////////////////////////////]
  125. [note [@ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3533.html N3533 C++ Concurrent Queues]]
  126. [table C++ Concurrent Queues Conformance
  127. [[Section] [Description] [Status] [Comments]]
  128. [[X.1] [Conceptual interface] [Partial] [ The interface provided has some differences respect to this proposal. All the functions having a queue_op_status are not provided. No lock-free concrete classes ]]
  129. [[X.1.1] [Basic Operations] [Partial] [ - ]]
  130. [[X.1.1.1] [push] [yes] [ renamed push_back. ]]
  131. [[X.1.1.2] [value_pop] [no] [ renamed pull_front with two flavors. ]]
  132. [[X.1.2] [Non-waiting operations] [ - ] [ - ]]
  133. [[X.1.2.1] [try_push] [yes] [ renamed try_push_back ]]
  134. [[X.1.2.2] [try_pop] [yes] [ renamed try_pull_back ]]
  135. [[X.1.3] [Non-blocking operations] [ - ] [ - ]]
  136. [[X.1.3.1] [nonblocking_push] [Yes] [ renamed nonblocking_push_back ]]
  137. [[X.1.3.2] [nonblocking_pop] [Yes] [ renamed nonblocking_pull_front ]]
  138. [[X.1.4] [Push-front operations] [No] [ - ]]
  139. [[X.1.5] [Closed queues] [Partial] [ - ]]
  140. [[X.1.5.1] [close] [Yes] [ - ]]
  141. [[X.1.5.2] [is_closed] [Yes] [ renamed closed ]]
  142. [[X.1.5.3] [wait_push] [Yes] [ renamed wait_push_back ]]
  143. [[X.1.5.4] [wait_pop] [Yes] [ renamed wait_pull_front ]]
  144. [[X.1.5.5] [wait_push_front] [no] [ - ]]
  145. [[X.1.5.6] [wait_pop_back] [no] [ - ]]
  146. [[X.1.5.6] [open] [no] [ - ]]
  147. [[X.1.6] [Empty and Full Queues] [Yes] [ - ]]
  148. [[X.1.6.1] [is_empty] [Yes] [ - ]]
  149. [[X.1.6.2] [is_full] [Yes] [ Added capacity ]]
  150. [[X.1.7] [Queue Names] [No] [ Not considered a must for the time been. ]]
  151. [[X.1.8] [Element Type Requirements] [Yes?] [ - ]]
  152. [[X.1.9] [Exception Handling] [Yes?] [ - ]]
  153. [[X.1.10] [Queue Ordering] [Yes?] [ - ]]
  154. [[X.1.11] [Lock-Free Implementations] [No] [ waiting to stabilize the lock-based interface. Will use Boost.LockFree once it is Boost.Move aware. ]]
  155. [[X.2] [Concrete queues] [Partial] [ - ]]
  156. [[X.2.1] [Locking Buffer Queue] [Partial] [ classes sync_queue and a sync_bounded_queue. ]]
  157. [[X.2.1] [Lock-Free Buffer Queue] [No] [ waiting to stabilize the lock-based interface. Will use Boost.LockFree once it is Boost.Move aware. ]]
  158. [[X.3] [Additional Conceptual Tools] [No] [ - ]]
  159. [[X.3.1] [Fronts and Backs] [No] [ - ]]
  160. [[X.3.2] [Streaming Iterators] [No] [ - ]]
  161. [[X.3.3] [Storage Iterators] [No] [ - ]]
  162. [[X.3.4] [Binary Interfaces] [No] [ - ]]
  163. [[X.3.4] [Managed Indirection] [No] [ - ]]
  164. ]
  165. [endsect]
  166. [section:executors Executors and Schedulers]
  167. [//////////////////////////////////////////]
  168. [note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3785.pdf N3785 Executors and Schedulers]]
  169. [table Executors and Schedulers
  170. [[Section] [Description] [Status] [Comments]]
  171. [[V.1.1] [Class `executor`] [Yes] [ - ]]
  172. [[V.1.1] [`add`] [Yes] [ renamed with a function template `submit` ]]
  173. [[V.1.1] [`num_of_pendin_closures`] [No] [ ]]
  174. [[V.1.2] [Class sceduled_executor] [No] [ - ]]
  175. [[V.1.2] [`add_at`] [No] [ renamed with a function template `scheduler::submit_at` ]]
  176. [[V.1.2] [`add_after`] [No] [ renamed with a function template `scheduler::submit_after` ]]
  177. [[V.2] [Concrete executor classes] [No] [ - ]]
  178. [[V.2.1] [`thread_pool`] [Yes] [ static version `basic_thread_pool`, dynamic one `execduler_adaptor<basic_thread_pool>` ]]
  179. [[V.2.2] [`serial_executor`] [yes] [ - ]]
  180. [[V.2.3] [`loop_executor`] [Yes] [ static version loop_scheduler, dynamic one `execduler_adaptor<loop_scheduler>` ]]
  181. [[V.2.4] [`inline_executor`] [Yes] [ static version `inline_executor`, dynamic one `execduler_adaptor<inline_executor>` ]]
  182. [[V.2.5] [`thread_executor`] [Yes] [ static version `thread_executor`, dynamic one `execduler_adaptor<thread_executor>` ]]
  183. ]
  184. [note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3784.pdf N3784-Improvements to `std::future<T> and Related APIs]]
  185. [table `async, future/shared_future::then`and Executors
  186. [[Section] [Description] [Status] [Comments]]
  187. [[30.6.6] [`future<T>::then`] [Yes] [ ]]
  188. [[30.6.7] [`shared_future<T>::then`] [Yes] [ ]]
  189. [[30.6.8] [`async`] [Yes] [ - ]]
  190. ]
  191. [note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4143.pdf N4143-Executors and schedulers, revision 4]]
  192. [table Executors and Schedulers - revision 4
  193. [[Section] [Description] [Status] [Comments]]
  194. [[VI.A] [Executor Concept] [Yes] [ `wrapper_type` renamed by `work` and `spawn by `submit` ]]
  195. [[VI.A.1] [`thread_per_task_executor] [Yes] [ renamed `thread_executor`]]
  196. [[VI.A.2] [`thread_pool_executor`] [Yes] [ renamed `basic_thread_pool`]]
  197. [[VI.A.3] [`system_executor`] [No] [ - ]]
  198. [[VI.A.4] [`loop_executor`] [Yes] [ - ]]
  199. [[VI.A.5] [`serial_executor`] [yes] [ - ]]
  200. [[VI.B] [`executor_ref`] [yes] [ - ]]
  201. [[VI.C] [`executor`] [yes] [ renamed `gen_executor_ref` ]]
  202. [[VI.D] [Free Functions and Helper Objects] [partial] [ - ]]
  203. [[VI.D] [`make_package`] [No] [ - ]]
  204. [[VI.D] [`spawn_future`] [No] [ `async(Ex&, ...)` is similar but returns a blocking future. ]]
  205. [[VI.D] [`spawn`] [No] [ - ]]
  206. [[VI.D] [`task_wrapper`] [No] [ renamed `resubmitter` ]]
  207. [[VI.D] [`set_executor`] [No] [ renamed `resubmit` ]]
  208. [[VI.D] [`function_wrapper`] [Partial] [ renamed `work` ]]
  209. ]
  210. [endsect]
  211. [//////////////////////////////////////////////////////////////
  212. [section:stream_mutex C++ Stream Mutexes - C++ Stream Guards]
  213. [/////////////////////////////////////////////////////////////]
  214. While Boost.Thread implementation of stream mutexes differ in the approach, it is worth comparing with the current trend on the standard.
  215. [note These functions are based on [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3535.html [*N3535 - C++ Stream Mutexes]] by Lawrence Crowl.]
  216. [note This proposal has been replaced already by [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3678.html N3678 - C++ Stream Guards], which has been replaced by [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3678.html N3665 - Uninterleaved String Output Streaming] and [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3678.html N3750 - C++ Ostream Buffers]]
  217. [table C++ Stream Mutexes Conformance
  218. [[Section] [Description] [Status] [Comments]]
  219. [[X.1] [Class template stream_mutex] [Partial] [ Renamed externally_locked_stream<> ]]
  220. [[X.2.1] [constructor] [Partial] [ externally_locked_stream needs a mutex in addition as argument. ]]
  221. [[X.2.2] [lock] [yes] [ - ]]
  222. [[X.2.3] [unlock] [yes] [ - ]]
  223. [[X.2.4] [try_lock] [yes] [ - ]]
  224. [[X.2.5] [hold] [Yes] [ - ]]
  225. [[X.2.6] [bypass] [Yes] [ - ]]
  226. [[X.2] [Class template stream_guard] [Yes] [ - ]]
  227. [[X.2.1] [stream_guard] [Yes] [ - ]]
  228. [[X.2.2] [~stream_guard] [Yes] [ - ]]
  229. [[X.2.3] [bypass] [Yes] [ - ]]
  230. [[X.3] [Stream Operators] [Yes] [-]]
  231. [[X.4] [Predefined Objects] [No] [-]]
  232. ]
  233. [endsect]
  234. ///////////////////////////////]
  235. [endsect]
  236. [endsect]