c++17 - el lenguaje que sustituirá a c++11/14 · pdf filec++17 aviso esta obra...

62
C++17 C++17 El lenguaje que sustituirá a C++11/14 J. Daniel Garcia Grupo ARCOS Universidad Carlos III de Madrid 24 de noviembre de 2016 cbed J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 1/49

Upload: ngothuan

Post on 06-Feb-2018

214 views

Category:

Documents


1 download

TRANSCRIPT

C++17

C++17El lenguaje que sustituirá a C++11/14

J. Daniel Garcia

Grupo ARCOSUniversidad Carlos III de Madrid

24 de noviembre de 2016

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 1/49

C++17

Aviso

c Esta obra está bajo una Licencia Creative CommonsAtribución-NoComercial-SinDerivar 4.0 Internacional.

b Debes dar crédito en la obra en la forma especificadapor el autor o licenciante.

e El licenciante permite copiar, distribuir y comunicar pú-blicamente la obra. A cambio, esta obra no puede serutilizada 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 dela obra – no obras derivadas basadas en ella.

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 2/49

C++17

ARCOS@uc3m

UC3M: Una universidad joven, internacional y orientada ala investigación.ARCOS: Un grupo de investigación aplicada.

Líneas: Computación de altas prestaciones, Big data,Sistemas Ciberfísicos, y Modelos de programación para lamejora de las aplicaciones

Mejorando las aplicaciones:REPARA: Reengineering and Enabling Performance andpoweR of Applications. Financiado por Comisión Europea(FP7).RePhrase: REfactoring Parallel Heterogeneous ResourceAware Applications. Financiado por Comisión Europea(H2020).

Normalización:ISO/IEC JTC/SC22/WG21. Comité ISO C++.

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 3/49

C++17

C++

1 C++

2 Lenguaje

3 Biblioteca estándar

4 El futuro de C++

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 4/49

C++17

C++

C++ en dos líneas

Correspondencia directa con el hardware.Instrucciones y tipos de datos fundamentales.Inicialmente heredado de C.Presente y futuro: usar mejor el hardware.

caches, multicores, GPUs, FPGAs, SIMD, . . .

Abstracciones sin sobrecarga (zero-overhead).Clases, herencia, programación genérica, . . .Tomado de Simula-67 (que si tenía sobrecarga).Futuro: Seguridad de tipos y recursos, conceptos, módulos,concurrencia, contratos, . . .

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 5/49

C++17

C++

C++ en dos líneas

Correspondencia directa con el hardware.Instrucciones y tipos de datos fundamentales.Inicialmente heredado de C.Presente y futuro: usar mejor el hardware.

caches, multicores, GPUs, FPGAs, SIMD, . . .

Abstracciones sin sobrecarga (zero-overhead).Clases, herencia, programación genérica, . . .Tomado de Simula-67 (que si tenía sobrecarga).Futuro: Seguridad de tipos y recursos, conceptos, módulos,concurrencia, contratos, . . .

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 5/49

C++17

C++

Evolución

C++11 for una mejora radicalC++14 completó C++11.C++17 añade muchas mejoras menores.C++20 podría ser la siguiente major release.

Muchas características nuevas.Concurrencia, números aleatorios, expresiones regulares,. . .Lambdas, expresiones constantes generalizadas, . . .

Simplificación de uso:Auto, bucles basados en rango, iniciación uniforme,semántica de movimiento, . . .

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 6/49

C++17

C++

Evolución

C++11 for una mejora radicalC++14 completó C++11.C++17 añade muchas mejoras menores.C++20 podría ser la siguiente major release.

Muchas características nuevas.Concurrencia, números aleatorios, expresiones regulares,. . .Lambdas, expresiones constantes generalizadas, . . .

Simplificación de uso:Auto, bucles basados en rango, iniciación uniforme,semántica de movimiento, . . .

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 6/49

C++17

C++

Evolución

C++11 for una mejora radicalC++14 completó C++11.C++17 añade muchas mejoras menores.C++20 podría ser la siguiente major release.

Muchas características nuevas.Concurrencia, números aleatorios, expresiones regulares,. . .Lambdas, expresiones constantes generalizadas, . . .

Simplificación de uso:Auto, bucles basados en rango, iniciación uniforme,semántica de movimiento, . . .

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 6/49

C++17

C++

El comité C++

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 7/49

C++17

C++

El comité ISO C++

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 8/49

C++17

C++

C++14

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 9/49

C++17

C++

Tres reuniones al año

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 10/49

C++17

C++

C++ timeline

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 11/49

C++17

Lenguaje

1 C++

2 Lenguaje

3 Biblioteca estándar

4 El futuro de C++

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 12/49

C++17

Lenguaje

Selección en tiempo de compilación

2 LenguajeSelección en tiempo de compilaciónIniciación sentencias condicionalesDeducción de plantilla en constructorVariables inlineDeclaraciones de descomposición

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 13/49

C++17

Lenguaje

Selección en tiempo de compilación

Selección en tiempo de compilación

Se introduce un nuevo tipo de selección que se evalúa entiempo de compilación.

// ...if constexpr (expresion) {}

Útil especialmente en contextos de programacióngenérica.

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 14/49

C++17

Lenguaje

Selección en tiempo de compilación

Problemas con plantillas variádicas

C++11/14

template <class T>void f (T&& t){

print ( t ) ;}

template <class T, class... Rest>void f (T&& t, Rest&&... r ){

f ( t ) ;f ( r ...) ; // Bug overload f()

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 15/49

C++17

Lenguaje

Selección en tiempo de compilación

Simplificación plantillas variádicas

C++17

template <class T, class... Rest>void f (T&& t, Rest&&... r ){

print ( t ) ;if constexpr (sizeof(r ...) >0) {

f ( r ...) ;}

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 16/49

C++17

Lenguaje

Selección en tiempo de compilación

Selección entre familias de tipos

C++17

template <class T>void f (T x){

if constexpr (std:: is_integral <T>::value) {implA(x);

}else if constexpr (std:: floating_point <T>::value) {

implB(x);}else {

implC(x);}

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 17/49

C++17

Lenguaje

Iniciación sentencias condicionales

2 LenguajeSelección en tiempo de compilaciónIniciación sentencias condicionalesDeducción de plantilla en constructorVariables inlineDeclaraciones de descomposición

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 18/49

C++17

Lenguaje

Iniciación sentencias condicionales

Problema

Muchas veces hace falta definir una variable solamentepara usarla en una selección (if/switch) y no se vuelve ausar.

Los bucles for permiten definir la variable en la propiasentencia.Extensión natural.

C++11/14

int codigo = obten_codigo();if (codigo != 0) {

procesa(codigo);}// variable en alcance

C++17

if ( int codigo = obten_codigo(); codigo != 0) {procesa(codigo);

}// variable fuera de alcance

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 19/49

C++17

Lenguaje

Iniciación sentencias condicionales

Problema

Muchas veces hace falta definir una variable solamentepara usarla en una selección (if/switch) y no se vuelve ausar.

Los bucles for permiten definir la variable en la propiasentencia.Extensión natural.

C++11/14

int codigo = obten_codigo();if (codigo != 0) {

procesa(codigo);}// variable en alcance

C++17

if ( int codigo = obten_codigo(); codigo != 0) {procesa(codigo);

}// variable fuera de alcance

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 19/49

C++17

Lenguaje

Iniciación sentencias condicionales

Problema

Muchas veces hace falta definir una variable solamentepara usarla en una selección (if/switch) y no se vuelve ausar.

Los bucles for permiten definir la variable en la propiasentencia.Extensión natural.

C++11/14

int codigo = obten_codigo();if (codigo != 0) {

procesa(codigo);}// variable en alcance

C++17

if ( int codigo = obten_codigo(); codigo != 0) {procesa(codigo);

}// variable fuera de alcance

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 19/49

C++17

Lenguaje

Iniciación sentencias condicionales

Inserción en un map

C++11/14

{ auto p = m.try_emplace(key, value);if (! p.second) {

FATAL("Element already registered");}else {

process(p.second);} }

C++17

if (auto p = m.try_emplace(key, value); !p.second) {FATAL("Element already registered");

}else {

process(p.second);}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 20/49

C++17

Lenguaje

Iniciación sentencias condicionales

Inserción segura

C++11/14

void safe_insert(vector<int> & v, int x) {std :: lock_guard<std::mutex> l{mut};if (v.empty()) {

v.push_back(x);}

}

C++17

void safe_insert(vector<int> & v, int x) {if (std :: lock_guard<std::mutex> l{mut}; v.empty()) {

v.push_back(x);}

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 21/49

C++17

Lenguaje

Iniciación sentencias condicionales

switch con iniciación

C++11/14

elemento e = obten_elemento();switch (auto s = e.estado()) {

case activo: e.envia_mensaje(); break;case inactivo: e.encola_mensaje(); break;default: throw error {};

}

C++17

switch (elemento e = obten_elemento(); auto s = e.estado()) {case activo: e.envia_mensaje(); break;case inactivo: e.encola_mensaje(); break;default: throw error {};

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 22/49

C++17

Lenguaje

Deducción de plantilla en constructor

2 LenguajeSelección en tiempo de compilaciónIniciación sentencias condicionalesDeducción de plantilla en constructorVariables inlineDeclaraciones de descomposición

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 23/49

C++17

Lenguaje

Deducción de plantilla en constructor

Argumentos de plantilla en constructor

La deducción de argumentos de plantilla en C++11/14actúa sobre funciones pero no sobre clases.

Se extiende las reglas de deducción a constructores.

std :: pair<int,std :: string> p{2, "hola"s }; // C++11auto q = std :: make_pair(2, "hola"s); // C++11

pair r {2, "hola"s }; // C++17

std :: mutex mstd :: lock_guard<std::mutex> l{m}; // C++11

std :: lock_guard l{m}; // C++17

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 24/49

C++17

Lenguaje

Deducción de plantilla en constructor

Argumentos de plantilla en constructor

La deducción de argumentos de plantilla en C++11/14actúa sobre funciones pero no sobre clases.

Se extiende las reglas de deducción a constructores.

std :: pair<int,std :: string> p{2, "hola"s }; // C++11auto q = std :: make_pair(2, "hola"s); // C++11

pair r {2, "hola"s }; // C++17

std :: mutex mstd :: lock_guard<std::mutex> l{m}; // C++11

std :: lock_guard l{m}; // C++17

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 24/49

C++17

Lenguaje

Variables inline

2 LenguajeSelección en tiempo de compilaciónIniciación sentencias condicionalesDeducción de plantilla en constructorVariables inlineDeclaraciones de descomposición

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 25/49

C++17

Lenguaje

Variables inline

Variables inline

Una variable marcada como inline:Puede aparecer en varias unidades de traducción si tienela misma definición.

Puedes poner la definición en un archivo de cabecera.

Debe estar definida en cada unidad de traducción en la quese usa.Hay una única instancia.

Los datos miembro que sean constexpr y static sonimplícitamente inline.

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 26/49

C++17

Lenguaje

Variables inline

Constantes en C++14

tabla.h

static constexpr numelem = 100;

class tabla {// ...

private:static constexpr max = 10;// ...

};

tabla.cpp

static constexpr numelem;static constexpr tabla::max;

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 27/49

C++17

Lenguaje

Variables inline

Constantes en C++17

tabla.h

inline static constexpr numelem = 100;

class tabla {// ...

private:static constexpr max = 10;// ...

};

Sin definición.

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 28/49

C++17

Lenguaje

Declaraciones de descomposición

2 LenguajeSelección en tiempo de compilaciónIniciación sentencias condicionalesDeducción de plantilla en constructorVariables inlineDeclaraciones de descomposición

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 29/49

C++17

Lenguaje

Declaraciones de descomposición

Devolución múltiple en C++14

En C++14 es posible devolver múltiples valores de unafunción usando una tupla.

Retorno múltiple

std :: tuple<int,std :: string ,double> f() {int x = obten_indice();std :: string n = obten_nombre();double y = obten_coste();return make_tuple(x,n,y);

}

void g() {auto z = f () ; // z es std :: tuple<int , string ,double>int a = get<0>(z);double c = get<2>(z);// ...

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 30/49

C++17

Lenguaje

Declaraciones de descomposición

Devolución múltiple en C++14

También se puede devolver directamente sobre lasvariables.

Retorno múltiple

std :: tuple<int,std :: string ,double> f() {int x = obten_indice();std :: string n = obten_nombre();double y = obten_coste();return make_tuple(x,n,y);

}

void g() {int a;std :: string b;double c;std :: tie (a, b, c) = f () ;// ...

}cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 31/49

C++17

Lenguaje

Declaraciones de descomposición

Descomposiciones en C++17

También se puede devolver directamente sobre lasvariables.

Retorno múltiple

std :: tuple<int,std :: string ,double> f() {int x = obten_indice();std :: string n = obten_nombre();double y = obten_coste();return make_tuple(x,n,y);

}

void g() {auto [a, b, c] = f () ;// ...

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 32/49

C++17

Lenguaje

Declaraciones de descomposición

Descomposiciones y mapas

Simplicación de códigosde error.

C++17

map<int, std:: string> m;// ...auto [ i , exito ] = m.insert(pair (3, "Daniel")

;if ( exito ) usa(∗i) ;

Simplicación de bucles

C++17

map<int, std:: string> m;// ...for (const auto & [k,v] : m) {

cout << k << " −> " << v << endl;}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 33/49

C++17

Lenguaje

Declaraciones de descomposición

Descomposiciones y mapas

Simplicación de códigosde error.

C++17

map<int, std:: string> m;// ...auto [ i , exito ] = m.insert(pair (3, "Daniel")

;if ( exito ) usa(∗i) ;

Simplicación de bucles

C++17

map<int, std:: string> m;// ...for (const auto & [k,v] : m) {

cout << k << " −> " << v << endl;}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 33/49

C++17

Biblioteca estándar

1 C++

2 Lenguaje

3 Biblioteca estándar

4 El futuro de C++

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 34/49

C++17

Biblioteca estándar

Vistas sobre cadenas

3 Biblioteca estándarVistas sobre cadenasSistema de archivosAlgoritmos paralelosNuevos tipos de biblioteca

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 35/49

C++17

Biblioteca estándar

Vistas sobre cadenas

string_view

Define un objeto que se refiere a una secuencia decaracteres constante.

Tiene una interfaz muy similar a std::string.

std :: string_view sv1 = "hola";auto sv2 = "adios"sv;

std :: string s = "Daniel"std :: string_view sv3 = s;

std :: cout << sv3 << std::endl;

auto sv4 = "C++ mola";sv4 = sv4.substr(3) ;

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 36/49

C++17

Biblioteca estándar

Sistema de archivos

3 Biblioteca estándarVistas sobre cadenasSistema de archivosAlgoritmos paralelosNuevos tipos de biblioteca

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 37/49

C++17

Biblioteca estándar

Sistema de archivos

Biblioteca fild_system

Ofrece una biblitoeca de manipulación del sistema dearchivos.

Algunas características:Representación de path.Iteradores de directorio (recursivos y no recursivos).Gestión de espacio de disco.Operaciones sobre ficheros y directorios.

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 38/49

C++17

Biblioteca estándar

Sistema de archivos

Recorriendo un directorio

listdir.cpp

#include <fstream>#include <iostream>#include <filesystem>

int main(){

namespace fs = std::filesystem;

for(auto & f : fs :: directory_iterator {argv [1]}) {std :: cout << f << ’ \n’ ;

}}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 39/49

C++17

Biblioteca estándar

Algoritmos paralelos

3 Biblioteca estándarVistas sobre cadenasSistema de archivosAlgoritmos paralelosNuevos tipos de biblioteca

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 40/49

C++17

Biblioteca estándar

Algoritmos paralelos

Algoritmos paralelos

Se incluye una versión paralela de la mayoría de losalgoritmos de la STL.

Todos toman como parámetro la política de ejecución.Políticas: seq, par, par_unseq.

Ordenando un vector

vector<double> v = get_values();

sort (seq, begin(v), end(v));sort (par, begin(v), end(v));sort (par_unseq, begin(v), end(v));

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 41/49

C++17

Biblioteca estándar

Algoritmos paralelos

Operaciones de reducción generalizada

Permiten reducir usando un función binaria arbitraria.

Reduciendo un vector

vector<double> v = get_values();

auto suma = reduce(par, begin(v), end(v), 0,[]( auto x, auto y) { return x+y; }) ;

auto maximo = reduce(par, begin(v), end(v), 0,[]( auto x, auto y) { return std :: max(x,y); }) ;

auto sumacuadrados = transform_reduce(par, begin(v), end(v),[] (auto x) { return x∗x; }0,[] (auto x, auto y) { return x+y; }) ;

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 42/49

C++17

Biblioteca estándar

Nuevos tipos de biblioteca

3 Biblioteca estándarVistas sobre cadenasSistema de archivosAlgoritmos paralelosNuevos tipos de biblioteca

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 43/49

C++17

Biblioteca estándar

Nuevos tipos de biblioteca

Valores opcionales

Nuevo tipo optional para representar un valor que puedeestar o no presente.

Usando optional

std :: optional<elemento> obten_elemento(int id) {if (es_valido(id) ) return elemento{id};else return {};

}

void f ( int id ) {auto e = obten_elemento;if (e) cout << ∗e << endl;else cout << "vacio" << endl;

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 44/49

C++17

Biblioteca estándar

Nuevos tipos de biblioteca

Valores generalizados

Nuevo tipo any para representar un valor de cualquier tipo.

Es como un void* seguro en tipos.

Usando optional

void agrega_elemento(std::vector<std::any> & v, int id) {if (es_valido_A(id)) v.push_back(elemento{id});else if (es_valido_B(id)) v.push_back(compuesto{id});else v.push_back(derivado{id});

}

void imprime_elementos(const std::vector<std::any> & v) {for (auto & x : v) {

if (x.type() == typeid(elemento)) {std :: cout << x << std :: endl;

}}

}cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 45/49

C++17

Biblioteca estándar

Nuevos tipos de biblioteca

Registros con variantes

Nuevo tipo variant valores de un número cerrado de tiposEs como un void* seguro en tipos.

Usando variant

void f () {std :: variant<int, std :: string , double> v;

v = 42;int x = get<int>(v);

try {auto d = get<double>(v);

}catch (std :: bad_variant_access&) {}

}

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 46/49

C++17

El futuro de C++

1 C++

2 Lenguaje

3 Biblioteca estándar

4 El futuro de C++

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 47/49

C++17

El futuro de C++

¿Qué puedo esperar?

Grandes novedades:

Módulos: ¡Acabemos con los includes!

Corrutinas: ¡Hagamos la asincronía sencilla!

Contratos: ¡Mejoremos la calidad de nuestro código!

Conceptos: ¡ Una mejor programación genérica!

Redes: ¡Programación portable del acceso a la red!

Rangos: ¡Una nueva biblioteca de contenedores!

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 48/49

C++17

El futuro de C++

¿Qué puedo esperar?

Grandes novedades:

Módulos: ¡Acabemos con los includes!

Corrutinas: ¡Hagamos la asincronía sencilla!

Contratos: ¡Mejoremos la calidad de nuestro código!

Conceptos: ¡ Una mejor programación genérica!

Redes: ¡Programación portable del acceso a la red!

Rangos: ¡Una nueva biblioteca de contenedores!

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 48/49

C++17

El futuro de C++

¿Qué puedo esperar?

Grandes novedades:

Módulos: ¡Acabemos con los includes!

Corrutinas: ¡Hagamos la asincronía sencilla!

Contratos: ¡Mejoremos la calidad de nuestro código!

Conceptos: ¡ Una mejor programación genérica!

Redes: ¡Programación portable del acceso a la red!

Rangos: ¡Una nueva biblioteca de contenedores!

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 48/49

C++17

El futuro de C++

¿Qué puedo esperar?

Grandes novedades:

Módulos: ¡Acabemos con los includes!

Corrutinas: ¡Hagamos la asincronía sencilla!

Contratos: ¡Mejoremos la calidad de nuestro código!

Conceptos: ¡ Una mejor programación genérica!

Redes: ¡Programación portable del acceso a la red!

Rangos: ¡Una nueva biblioteca de contenedores!

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 48/49

C++17

El futuro de C++

¿Qué puedo esperar?

Grandes novedades:

Módulos: ¡Acabemos con los includes!

Corrutinas: ¡Hagamos la asincronía sencilla!

Contratos: ¡Mejoremos la calidad de nuestro código!

Conceptos: ¡ Una mejor programación genérica!

Redes: ¡Programación portable del acceso a la red!

Rangos: ¡Una nueva biblioteca de contenedores!

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 48/49

C++17

El futuro de C++

¿Qué puedo esperar?

Grandes novedades:

Módulos: ¡Acabemos con los includes!

Corrutinas: ¡Hagamos la asincronía sencilla!

Contratos: ¡Mejoremos la calidad de nuestro código!

Conceptos: ¡ Una mejor programación genérica!

Redes: ¡Programación portable del acceso a la red!

Rangos: ¡Una nueva biblioteca de contenedores!

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 48/49

C++17

El futuro de C++

¿Qué puedo esperar?

Grandes novedades:

Módulos: ¡Acabemos con los includes!

Corrutinas: ¡Hagamos la asincronía sencilla!

Contratos: ¡Mejoremos la calidad de nuestro código!

Conceptos: ¡ Una mejor programación genérica!

Redes: ¡Programación portable del acceso a la red!

Rangos: ¡Una nueva biblioteca de contenedores!

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 48/49

C++17

El futuro de C++

C++17El lenguaje que sustituirá a C++11/14

J. Daniel Garcia

Grupo ARCOSUniversidad Carlos III de Madrid

24 de noviembre de 2016

cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 49/49