C++17 - El lenguaje que sustituirá a C++11/14 › 2016 › 11 › cpp17.pdfC++17 C++ C++ en dos...
Transcript of C++17 - El lenguaje que sustituirá a C++11/14 › 2016 › 11 › cpp17.pdfC++17 C++ C++ en dos...
C++17
C++17El lenguaje que sustituirá a C++11/14
J. Daniel Garcia
Grupo ARCOSUniversidad Carlos III de Madrid
19 de noviembre de 2016
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 1/51
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/51
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/51
C++17
¿Te interesa C++?
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 4/51
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 5/51
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 6/51
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 6/51
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 7/51
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 7/51
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 7/51
C++17
C++
El comité C++
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 8/51
C++17
C++
El comité ISO C++
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 9/51
C++17
C++
C++14
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 10/51
C++17
C++
Tres reuniones al año
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 11/51
C++17
C++
C++ timeline
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 12/51
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 13/51
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 14/51
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 15/51
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 16/51
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 17/51
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 18/51
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 19/51
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 20/51
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 20/51
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 20/51
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 21/51
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 22/51
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 23/51
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 24/51
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 25/51
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 25/51
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 26/51
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 27/51
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 28/51
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 29/51
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 30/51
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 31/51
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 32/51
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 33/51
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 34/51
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 34/51
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 35/51
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 36/51
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 37/51
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 38/51
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 39/51
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 40/51
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 41/51
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 42/51
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 43/51
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 44/51
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 45/51
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 46/51
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 47/51
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 48/51
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 49/51
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 49/51
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 49/51
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 49/51
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 49/51
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 49/51
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 49/51
C++17
El futuro de C++
Recuerda todavía queda sitio para venir a using std::cpp2016.
http://www.usingstdcpp.org.
Podéis seguirme en Twitter.@jdgarciauc3m.@usingstdcpp.
Visitad mi página Web.https://www.arcos.inf.uc3m.es/wp/jdgarcia.
Y por favor:¡¡¡Dadme feedback!!!
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 50/51
C++17
El futuro de C++
C++17El lenguaje que sustituirá a C++11/14
J. Daniel Garcia
Grupo ARCOSUniversidad Carlos III de Madrid
19 de noviembre de 2016
cbed – J. Daniel Garcia – ARCOS@UC3M ([email protected]) – Twitter: @jdgarciauc3m 51/51