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: ...
Comentarios
¡Buenas noticias, chicos!
#2: ¿Así lo traducen?
#45 Ciertamente... mucho mejor así: "Good neeews everyone!"
#45 Sí, tal que así.
Espero que nadie se atreva a comentar sin haberse leido antes las 1300 páginas del borrador para opinar con criterio
#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
#18 La cara trollface implica ironía o trollada simplemente, como bien entenderás
Ahora mismo como futuro Ing. Informático (al igual que los miles que hay por aquí) estoy trabajando en un proyecto a bajo nivel sobre el ia32, pero se muy bien que no me tengo que leer las mil y pico páginas que tiene su manual de Intel, sino que hago hincapié en cosas como el ISA y demás
PD: Viendo tu nick recuerdo los grandes momentos que me dió Haskell y Prolog (los estudié a la vez) en su época.
#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:
http://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?
Cada vez que sale un estándar nuevo, me dan ganas de hacerme médico o algo así.
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.
#12 Se intentó, pero quedó pendiente para la siguiente actualización... Que por ahora informamente se llama C1x:
http://en.wikipedia.org/wiki/C1X
¡¡Esperemos que no acabe siendo C2X!!
#12 Bueno, tienes los pthreads... eso es bastante estándar, aunque sea C
#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++.
#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.
Esto me ha recordado un gran sketch de Splunge:
#26 "no sé que querrán decir con lo de automático"
¡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.
#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?
#c-32" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1342887/order/32">#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.
#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.
Y que a mí me tiren abajo las noticias que me tiran...
Ver en la misma frase microsoft, estandares e ISO... es que me entra un escalofrio por la espalda...
Perfecto. Ahora a por Java!! Hay que matarlo cueste lo que cueste
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
#c-28" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1342887/order/28">#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..
#c-50" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1342887/order/50">#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).
#c-51" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1342887/order/51">#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 ¿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
#50 "¿Fácil de mantener y programar? Java."
Me atraganto!
#50 Debí poner la etiqueta "ironic"
No hablen en clave.
#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...
#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.
Muy interesente la noticia, muy lamentable meneame
#15 ¿me explicas tu comentario? ¿por qué dices que meneame muy lamentable?
#42 Léete cualquiera de los comentarios abteriores al mio y dime que no son lamentables.
#26 Discrepo:
El Chuck Norris de los lenguajes es CL usando sbcl y por supuesto bajo slime.
Umm lo de los constructores se soluciona usando
constructor::constructor( double loqsea)
Por poner un ejemplo
At good times, green sleves!
#8 Greensleeves was all my joy...
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.
#38 aix.... the magic of python! y qué sintaxis e! no se por qué no lo venden como poesia!
Well done! Release it!
¿Y no suena un poco gore eso de Herb Sutter, miembro de Microsoft ?
Como se entere R2D2 se va a liar parda.
#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.
podrá correr bien al fin crysis en mi ordenador?
Mi novia está muy satisfecha
#11 Uno de los dos, tenemos un problema.
¿Seguirá sin haber garbage collector?
#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.
http://lmgtfy.com/?q=smart+pointers
#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...).
El Chuck Norris de los lenguajes es Ruby
#20 ¿Lo dices en serio?. Quiero decir, ¡¿LO DICES EN SERIO?!
#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.
#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++.
#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 >::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!
#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.
#20 Para qué quieres que el sistema te administre la memoria, teniendo el poder de administrarla tu
Larga vida a C++
Por fin funciones lambda.
NOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C++ es el lenguaje del infierno, estoy seguro de ello
¡Frikis!
Si siguen añadiento features y subiendo el nivel de abstracción con suerte podrá ser una versión cutre de Python en 2019...
No sé por qué pero esta noticia hace sentirme viejo.
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.
#54
si, eso es a lo que me sonaba, en Delphi, cuando tienes que usar una clase "extraña" (que no sabemos ni que coño devuelve) de algún paquete comercial, lo asignas a una variable de tipo variant, haces el create y a otra cosa mariposa. Siempre me ha parecido una gran cagada.
Hoy es un gran día para los amigos del C++0X. Si supiera alguien lo que es...
pufff, que atrasados estos de Microsoft, todavía siguen en C++, a este paso nunca van a llegar a AAA
¿entonces ya puedo tocarme por las noches in quedarme ciego?