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
www.youtube.com/watch?v=jI2wSz2BvMM
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.
en.wikipedia.org/wiki/C1X
¡¡Esperemos que no acabe siendo C2X!!
constructor::constructor( double loqsea){
new (this) constructor ()
}
Por poner un ejemplo
¡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
" 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>
<geek:flame_war>
El Chuck Norris de los lenguajes es CL usando sbcl y por supuesto bajo slime.
</geek:flame_war>
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++.
¡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.
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?
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?
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.
www.youtube.com/watch?v=1D1cap6yETA
#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..
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).
Me atraganto!
#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.
PD: Si, yo también me alegro de la ausencia del recolector de basura en C++.
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!
#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
C++ es el lenguaje del infierno, estoy seguro de ello
Larga vida a C++
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.