edición general
367 meneos
6368 clics
ISO aprueba por unanimidad C++0X: ¡ya tenemos el nuevo estándar C++11!

ISO aprueba por unanimidad C++0X: ¡ya tenemos el nuevo estándar C++11!

C&P: Herb Sutter, miembro de Microsoft y presidente del comité de estándares de C++ de la ISO anunció este viernes pasado que el resultado de las votaciones ha sido el de aprobar por unanimidad la actualización del lenguaje de programación C++, en un paquete de cambios que se viene llamando C++0X desde hace años de manera demasiado optimista: finalmente se llamará C++11.[...] aquí va un resumen de las novedades más importantes con respecto al último estándar de 2003: ...

| etiquetas: c++ , programación , c++0x , c++11 , iso
192 175 3 K 528 mnm
192 175 3 K 528 mnm
Comentarios destacados:                
#17 Espero que nadie se atreva a comentar sin haberse leido antes las 1300 páginas del borrador para opinar con criterio :troll:
  1. ¡Buenas noticias, chicos!  media
  2. Esto me ha recordado un gran sketch de Splunge:
    www.youtube.com/watch?v=jI2wSz2BvMM
  3. Y que a mí me tiren abajo las noticias que me tiran...
  4. Hoy es un gran día para los amigos del C++0X. Si supiera alguien lo que es...
  5. #1 La lista de cambios es aún mejor: funciones lambda anónimas, referencias rvalue, metaprogramación, listas de inicialización, constructores, templates con número variable de argumentos, smart pointers, arrays, tablas hash, expresiones regulares... Por no hablar de excepciones, sobrecarga de funciones, operadores, polimorfismo, herencia múltiple, clases, funciones virtuales, destructores, castings, variables volátiles o mutables... :-D
  6. At good times, green sleves!
  7. podrá correr bien al fin crysis en mi ordenador?
  8. Well done! Release it!  media
  9. Por desgracia, creo que no se ha aplicado lo que yo esperaba con ansiedad: los Threads de manera estandard.
    Si usas threads en C++ tendrás que seguir usando una librería separada. Creo que implementar threads de forma nativa en el lenguaje, lo hubiera hecho más competitivo frente a C# o Java.
    Creo que eso es lo que más hubiera modernizado a C++. Si estoy equivocado y sí se han aplicado, que alguien me corrija, por favor.
  10. #12 Se intentó, pero quedó pendiente para la siguiente actualización... Que por ahora informamente se llama C1x:

    en.wikipedia.org/wiki/C1X

    ¡¡Esperemos que no acabe siendo C2X!!
  11. Muy interesente la noticia, muy lamentable meneame
  12. No sé por qué pero esta noticia hace sentirme viejo.
  13. #17 Bueno, el estandar no se suele leer del tiron (aunque yo si lo he hecho con algun lenguaje) sino mas bien se suele usar como referencia. A no ser que trabajes en el modelo de estandarizacion es un poco absurdo leerselo entero. Otra cosa es leerse las partes en las que estes interesado para despues comentar ;)
  14. Perfecto. Ahora a por Java!! Hay que matarlo cueste lo que cueste :troll:
  15. ¿Seguirá sin haber garbage collector?
  16. Umm lo de los constructores se soluciona usando

    constructor::constructor( double loqsea){
    new (this) constructor ()
    }

    Por poner un ejemplo :-P
  17. #11 Uno de los dos, tenemos un problema.
  18. #20 "¿Seguirá sin haber garbage collector?"

    ¡Error! C++ con smart pointers es el Chuck Norris de los lenguajes: no necesita garbage collector. Eso quedapara los lenguajes basura.

    lmgtfy.com/?q=smart+pointers
  19. #12 Bueno, tienes los pthreads... eso es bastante estándar, aunque sea C xD
  20. #20 ¿Lo dices en serio?. Quiero decir, ¡¿LO DICES EN SERIO?!
  21. #23 ejem, de la primera línea del enlace que pones:

    " while providing additional features, such as automatic garbage collection or bounds checking"

    Claro que tiene recolector de basura, no sé que querrán decir con lo de automático (todos lo son, no? aparte de manuales...).

    <geek:flame_war>
    El Chuck Norris de los lenguajes es Ruby
    </geek:flame_war>
  22. #26 Discrepo:

    <geek:flame_war>
    El Chuck Norris de los lenguajes es CL usando sbcl y por supuesto bajo slime.
    </geek:flame_war>
  23. Me parece muy bien. Ahora sólo falta que eliminen los punteros y otras características innecesarias (headers, templates, etc), que cada archivo sea una clase, que compile a bytecode para hacer que funcione sobre una máquina virtual multiplataforma con garbage collector y listo, queda un lenguaje muy original :-D
  24. Por fin funciones lambda.
  25. #12 desconozco si en la versión definitiva han quitado las threads, pero en el borrador anterior al que hace referencia el artículo sí se hablan explícitamente de ellas en la sección 30 página 1130. De todas formas siempre puedes usar la librería boost/thread soportada por la gran mayoría de compiladores de C++.

    Estos cambios suponen un tremendo paso hacia adelante en C++ y en el mundo de la programación. Aparte de estandarizar elementos ya utilizandos en otros lenguajes como las funciones lambda anónimas o las listas de inicialización en los constructores, otros elementos como el std::move, que "roba" el contenido interno de la variable a otra y las referencias rvalue, suponen elementos que flexibilizan la programación e mejoran el rendimiento de la aplicación final.

    ¿Cuales pueden ser las consecuencias directas?
    Que probablemente todo el nuevo software que se implemente usando C++11 será más rápido y más mantenible que en el viejo C++.
  26. #26 "no sé que querrán decir con lo de automático" :palm:

    ¡Pero hombre! Hay una diferencia importante: en Java, tiene que existir algo llamado garbage collector, que quita tiempo de CPU de vez en cuando, para analizar qué objetos se pueden liberar de memoria.

    Imagina que durante un pico de procesamiento se crean y destruyen muchos objetos: hasta que no le de al GC por saltar, toma uso absurdo de RAM.

    En cambio, un smart pointer lleva su propia cuenta y es el propio responsable de auto-eliminarse en cuanto la última referencia sale de "scope" (no pienso decir "ámbito" jeje).

    Ventajas:

    1) Se usa la memoria que es necesaria en cada momento. No más.
    2) Evitas tener que ejecutar el GC y perder ciclos de CPU en momentos aleatorios que tu no puedes controlar y en los que, quizás, necesites la CPU para algo más crítico.
    3) Si se reutiliza las mismas zonas de RAM una y otra vez... bueno, la caché y esas cosas.
  27. #32 entiendo el problema de los recolectores 'típicos', llevo años viendo picos de CPU cada X tiempo cuando paso profilers a aplicaciones de Java, pero no creo que pase lo mismo en todos los lenguajes, por lo que no podemos generalizar a decir que los recolectores hacen tal cosa.
    Habrá cuáles sí y otros que no, pero poner un callback en la destrucción de los objetos para liberar memoria (simplificándolo muchisimo, no os enfadéis :P) no es ámbito exclusivo de C++.

    Por cierto, cómo van a afectar al rendimiento todas estas nuevas características?
  28. #6 Vamos, que parte de todo lo que puedes hacer en otros lenguajes como Python, ahora lo podrás hacer en C++ solo que de una forma más horrorosa y con una sintaxis horrible.
  29. Ver en la misma frase microsoft, estandares e ISO... es que me entra un escalofrio por la espalda...
  30. #34 Si, ya sabia que iba con ironia, pero aun asi me apetecia contestar, porque seguro que viene algun que otro despistado. Por cierto, hace unos anos (unos 10 o asi) obtuve los 'intel developer books', que intel los enviaba gratis a casa. 3 tomos (el primero tomo de introduccion, el segundo set de referencia instrucciones del microprocesador y el tercero no lo recuerdo y no lo tengo aqui ahora mismo) y luego un 4o tomo de optimizaciones del micro. Te lo digo porque quiza te interese. Aunque creo que al final ya no los enviaban. No aparece en la foto que ya tiene unos anos, pero si otros libros algo interesantes:

    buscandoaborja.files.wordpress.com/2008/09/img_1430.jpg

    Por cierto, es bastante divertido (aunque tedioso) escribir directivas 'enviadas directamente' al micro, no hablo de asm, sino de codigo maquina (a la derecha ponia 'comentarios' en asm para clarificar. De todas formas lo de leerse estandares, hay algunos que son bastante mas 'asumibles que otros', lo malo es que a veces hay cosas algo abstractas o mas bien escuetas que hacen que a uno no le quede del todo claro algunos detalles, pero para eso siempre estan los rationales :-)

    Exactamente y si no es mucha indiscrecion que proyecto a bajo nivel estas haciendo sobre ia32?
  31. Que recuerdos cuando programaba en C++.......despues me metí en la droga, Java .Net PHP he acabado en Python, pero almenos me rio porque Python me recuerda a los caballeros de la mesa cuadrada y la vida de Brian de vez en cuando.
  32. #38 aix.... the magic of python! y qué sintaxis e! no se por qué no lo venden como poesia!
  33. #32 Cada método de recolección tiene sus ventajas y sus inconvenientes y además son muy situacionales.

    Los punteros inteligentes se consideran muy lentos en la asignación y de hecho no se utilizan en ningún lenguaje como base de su recolector de basura. Son una herramienta para usar en determinadas situaciones, nada mas.

    #33 El metodo mas usual es el mark and sweep (java, c#, etc) que es el que produce el efecto stop the world. Otros lenguajes/frameworks usan el conteo de referencias, que según situaciones puede llegar a ser bastante costoso.
  34. #15 ¿me explicas tu comentario? ¿por qué dices que meneame muy lamentable?
  35. Si siguen añadiento features y subiendo el nivel de abstracción con suerte podrá ser una versión cutre de Python en 2019...
  36. pufff, que atrasados estos de Microsoft, todavía siguen en C++, a este paso nunca van a llegar a AAA :troll:
  37. #2: ¿Así lo traducen?
  38. #26 Por lo que leo en la wikipedia, los smart pointers se pueden implementar simplemente con conteo de referencias, por lo que la gestión es automática, pero no hay un recolector de basura.
  39. #45 Ciertamente... mucho mejor así: "Good neeews everyone!" :-D
    www.youtube.com/watch?v=1D1cap6yETA
  40. #45 Sí, tal que así.
  41. #28 Eso conllevaría desaprovechar recursos y ser más lento; para eso ya tienes muchos lenguajes.

    #35 yep, pero luego ejecutará rápido. Para todos aquellos que criticáis a C++ comparándolo con lenguajes como Java o Python... haced un juego como el Crysis en ellos, pls. O un motor físico como Bullet, que te mueva cientos de miles de objetos en unos minutos. O un pathtracer montecarlo. O un software de anális de ingeniería...

    Cada lenguaje es para lo que es. ¿Quieres un lenguaje rápido y fácil de programar? LUA, Ruby, Python. ¿rápido en ejecutar o que aproveche bien recursos muy limitados? C, C++, C#. ¿Fácil de mantener y programar? Java. No hay nada como elegir la mejor herramienta para cada trabajo..
  42. #50 ...¿rápido en ejecutar o que aproveche bien recursos muy limitados? C, C++, C#...

    Por favor, no mezcles a C# con C y C++ sólo porque empiece por C ;) Lo digo porque C# se compila también en un lenaguje intermedio (CIL) y luego lleva un intérpete JIT (CLR).
  43. ¡Frikis!
  44. #50 "¿Fácil de mantener y programar? Java."
    Me atraganto!
  45. Los tipos autodetectados: me recuerda los tipos variantes de delphi, con lo que implica de penalización de memoria y perfomance. Tal vez sea otro el mecanismo, lo ignoro.
  46. #50 Debí poner la etiqueta "ironic" ;)
  47. #20 Afortunadamente sí, seguirá sin haber garbage collector.

    #54 y #56: por lo que tengo entendido no es más que dejar que el compilador detecte el tipo en tiempo de compilación, con lo que no hay ninguna penalización en tiempo de ejecución. Por ejemplo, si escribes algo así:

    for (auto it = lista.begin (); it != lista.end (); ++it)

    el compilador puede deducir el tipo de la variable it a partir del valor de retorno de la función lista.begin (), con lo que el programador se ahorra tener que ponerlo.
  48. #57, ya hay que ser un poco vago para no querer especificar un int, size_t, etc... y querer escribir de igual modo auto. Que más dará especificar el tipo de variable en vez de darle trabajo extra al compilador.

    PD: Si, yo también me alegro de la ausencia del recolector de basura en C++.
  49. #42 Léete cualquiera de los comentarios abteriores al mio y dime que no son lamentables.
  50. #58 A lo que #57 se refiere no es a size_t o int's precisamente... en C++ con plantillas te puedes encontrar mostrencos como:

    for (std::multimap<std::set<int>, std::vector< typename mi_clase::obj_t> >::const_iterator it = ...)

    que quedarían:

    for (auto it = ...)

    Y eso sin contar con que en realidad si es una plantilla genérica, puede que ni sepas los tipos de los que estás hablando, así que "auto" es de las cosas más útiles que han podido crear! :-)
  51. #60 Cualquiera que programe con la STL sin usar typedefs se merece tener que picar a mano semejantes churros de código cada vez que declare una variable. :-P
  52. #51 Bueno, C# lo puse como rápido en ejecutar, no es que quisiera dar a entender que tiene más en común con C++ que eso... de todos modos, ya no me acordaba de que era interpretado, así que gracias por la aclaración :-)

    #50 Hombre, pues más que C++ de largo xD ¿Cuál consideras fácil de mantener? Quizás Java cueste más que otros lenguajes interpretados (no lo sé, nunca he hecho nada grande con ellos), pero es que esos ya son bastante más lentos que Java todavía...

    #58 Poner size_t es una tontería, pero poner std::map< std::string, std::pair< unsigned int, unsigned int > >::const_iterator es un poco cansino, por ejemplo...

    PD: Oops, me ganó #60 :-D
  53. NOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    C++ es el lenguaje del infierno, estoy seguro de ello
  54. #20 Para qué quieres que el sistema te administre la memoria, teniendo el poder de administrarla tu :-D

    Larga vida a C++
  55. #32 En Java se puede forzar a que se ejecute el recolector, así que si sabes cuándo se va a producir una situación de estas puedes forzar la ejecución del recolector.
    Lo que sí estaría bien sería una opción de la JVM que permitiera desactivar la ejecución automática del recolector para que el programador pudiera controlar exactamente cuando se ejecuta éste.
  56. #12 Página 1130 del estándar: Thread support library, define clases para hilos y semáforos entre otras. Esta versión de C++ define un montón de cosas muy útiles y añadidos de la librería Boost.
comentarios cerrados

menéame