¿Qué podría ser C++17?
¿Qué podría ser C++17?
using std::cpp 2015
J. Daniel Garcia
[email protected]
Grupo ARCOS
Universidad Carlos III de Madrid
18 de noviembre de 2015
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
1/36
¿Qué podría ser C++17?
Aviso
c Esta obra está bajo una Licencia Creative Commons
Atribución-NoComercial-SinDerivar 4.0 Internacional.
b Debes dar crédito en la obra en la forma especificada
por el autor o licenciante.
e El licenciante permite copiar, distribuir y comunicar pú-
blicamente la obra. A cambio, esta obra no puede ser
utilizada con fines comerciales — a menos que se ob-
tenga el permiso expreso del licenciante.
d El licenciante permite copiar, distribuir, transmitir y co-
municar públicamente solamente copias inalteradas de
la obra – no obras derivadas basadas en ella.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
2/36
¿Qué podría ser C++17?
Estado actual
1 Estado actual
2 Cambios menores
3 Conceptos
4 Paralelismo y concurrencia
5 Programación basada en contratos
6 Corrutinas
7 Módulos
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
3/36
¿Qué podría ser C++17?
Estado actual
Estructura del comité
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
4/36
¿Qué podría ser C++17?
Estado actual
Planes
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
5/36
¿Qué podría ser C++17?
Estado actual
¿Cómo será C++ después de 2017
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
6/36
¿Qué podría ser C++17?
Estado actual
¿Cómo será C++ después de 2017
Difícil de saber.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
6/36
¿Qué podría ser C++17?
Estado actual
¿Cómo será C++ después de 2017
Difícil de saber.
Mucho trabajo en marcha.
Requiere alcanzar consensos.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
6/36
¿Qué podría ser C++17?
Estado actual
¿Cómo será C++ después de 2017
Difícil de saber.
Mucho trabajo en marcha.
Requiere alcanzar consensos.
¿Será C++ una major release?
No está claro si se mira únicamente a la norma 14882.
Pero se debe mirar también a las TS que la acompañan.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
6/36
¿Qué podría ser C++17?
Estado actual
Estado
Norma ISO/IEC 14882
Previsible Draft en junio de 2016.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
7/36
¿Qué podría ser C++17?
Estado actual
Estado
Norma ISO/IEC 14882
Previsible Draft en junio de 2016.
File System: ISO/IEC TS 18822:2015
Manipulación de archivos y directorios.
Basado en Boost Filesystem V3.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
7/36
¿Qué podría ser C++17?
Estado actual
Library fundamentals
Library Fundamentals: ISO/IEC TS 19568:2015.
Primera versión completada (espacio std::experimental).
Clases optional y any.
Vista sobre cadena string_view.
Allocators polimórficos (std::experimental::pmr).
Soporte para arrays en shared_ptr y weak_ptr.
Nuevos algoritmos sample() y de búsqueda.
Función apply().
Se está trabajando en una segunda versión.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
8/36
¿Qué podría ser C++17?
Estado actual
Concurrencia y paralelismo
Paralelismo: ISO/IEC TS 19570:2015.
Solución de biblioteca para el paralelismo.
Ofrece muchos algoritmos de la STL de forma paralela y
varias políticas de ejecución
Se está trabajando en una segunda versión.
Paralelismo de tareas con modelo fork-join.
Múltiples políticas de planificación (parent-stealing,
child-stealing, . . . ).
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
9/36
¿Qué podría ser C++17?
Estado actual
Concurrencia y paralelismo
Paralelismo: ISO/IEC TS 19570:2015.
Solución de biblioteca para el paralelismo.
Ofrece muchos algoritmos de la STL de forma paralela y
varias políticas de ejecución
Se está trabajando en una segunda versión.
Paralelismo de tareas con modelo fork-join.
Múltiples políticas de planificación (parent-stealing,
child-stealing, . . . ).
Concurrencia: ISO/IEC TS 19571:XXXX.
Extensiones de concurrencia para C++.
Mejora a std::future y APIs asociadas.
latches y barreras reusables.
Punteros inteligentes de tipo atómico (atomic_shared_ptr y
atomic_weak_ptr).
Publicación inminente (2015 o 2016).
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
9/36
¿Qué podría ser C++17?
Estado actual
Memoria transaccional
Memoria transaccional: ISO/IEC TS 19841:2015.
Ofrece aproximación distinta para evitar condiciones de
carrera.
Evita el uso de cerrojos y otros mecanismos de
sincronización.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
10/36
¿Qué podría ser C++17?
Estado actual
Redes
Library Fundamentals: ISO/IEC TS 19216:XXXX.
Primera versión en marcha(espacio
std::experimental::net).
Entrada/salida asíncrona.
Temporizadores.
Búfers y flujos orientados a búfer.
Sockets y direcciones de red.
En proceso (2016/2017?)
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
11/36
¿Qué podría ser C++17?
Estado actual
Conceptos y Rangos
C++ extensions for concepts: ISO/IEC TS 19217:2015.
Permite restringir los tipos con los que se instancia una
plantilla.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
12/36
¿Qué podría ser C++17?
Estado actual
Conceptos y Rangos
C++ extensions for concepts: ISO/IEC TS 19217:2015.
Permite restringir los tipos con los que se instancia una
plantilla.
Especificación Técnica para Rangos: ISO/IEC TS
YYYYY:XXXX.
Añade el concepto de rango para operar sobre un conjunto
de datos.
Hace uso de la especificación de conceptos en su
definición.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
12/36
¿Qué podría ser C++17?
Cambios menores
1 Estado actual
2 Cambios menores
3 Conceptos
4 Paralelismo y concurrencia
5 Programación basada en contratos
6 Corrutinas
7 Módulos
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
13/36
¿Qué podría ser C++17?
Cambios menores
Eliminando cosas antiguas
auto_ptr
random_shuffle
Partes obsoletas de <functional>.
register.
operator++(bool).
Alias de iostreams obsoletos (ej: ios_base::io_mode,
. . . ).
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
14/36
¿Qué podría ser C++17?
Cambios menores
Otras mejoras en la biblioteca
Concepto de iterador contiguo.
Mejoras en conversiones unique_ptr<T[]>.
Mejoras en las especificaciones noexcept de la biblioteca
estándar.
Mejoras en la inserción en mapas (try_emplace()).
Nuevo tipo void_t.
Función global size() (size(x) → x.size()).
Constructores implícitos de tuple y pair.
Nuevo tipo bool_constant<val>.
Nuevo mutex shared_mutex (problema de los múltiples
lectores).
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
15/36
¿Qué podría ser C++17?
Cambios menores
Otras mejoras en la biblioteca
Traits de valor (ej: is_scalar_v<T>, is_arithmetic_v<T>,
. . . ) tomados de TS emphlibrary fundamentals.
Funciones sobre tiempos de chrono (floor, ceil, round,
abs).
Función as_const(x).
lock_guard<> ahora acepta múltiples mutex (variadic).
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
16/36
¿Qué podría ser C++17?
Cambios menores
Otros cambios
Las especificaciones de excepciones pasan a ser parte del
sistema de tipos.
Nueva directiva __has_include().
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
17/36
¿Qué podría ser C++17?
Conceptos
1 Estado actual
2 Cambios menores
3 Conceptos
4 Paralelismo y concurrencia
5 Programación basada en contratos
6 Corrutinas
7 Módulos
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
18/36
¿Qué podría ser C++17?
Conceptos
Conceptos
Objetivo: Hacer al programación genérica más simple.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
19/36
¿Qué podría ser C++17?
Conceptos
Conceptos
Objetivo: Hacer al programación genérica más simple.
Un largo camino.
Un nuevo comienzo después de la retirada de C++11.
Una de las características más revisadas que conozco.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
19/36
¿Qué podría ser C++17?
Conceptos
¿Por qué?
Especificación de restricciones sobre argumentos de
plantilla en la declaración.
Sobrecarga de funciones genéricas usando restricciones.
Especialización parcial de plantillas de clases y de
variables usando restricciones.
Nueva sintaxis para especificar conceptos y aplicar
restricciones a plantillas.
Sintaxis simplificada para plantillas.
Mejora sustancial de mensajes de error.
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @usingstdcpp – @jdgarciauc3m)
20/36
¿Qué podría ser C++17?
Conceptos
¿Qué podría pasar?
Es probable que el próxima reunión (marzo 2016) se
discuta su incorporación a ISO/IEC 14882.
Puede ser un debate no exento de polémicas.
Posiciones divergentes dentro del comité.
Necesidad de consenso.
En mi opinión, se han incor
Comentarios de: ¿Qué podría ser C++17? (0)
No hay comentarios