Han pasado más de 45 años desde que se concibió por primera vez C++. Como estaba previsto, evolucionó para afrontar los desafíos, pero muchos desarrolladores utilizan C++ como si todavía estuviéramos en el milenio anterior. Esto no es óptimo desde la perspectiva de la facilidad para expresar ideas, el rendimiento, la fiabilidad y la capacidad de mantenimiento. Aquí presento los conceptos clave sobre los que se puede construir un software C++ de alto rendimiento, de tipado seguro y flexible: gestión de recursos, del ciclo de vida, errores...
|
etiquetas: bjarne stroustrup , c++ , programación
En un single core lo entenderia. Hoy cualquier SO decente deberia poder obligar a ejecutar procesos o hilos por nucleo de forma exclusiva.
Los de plan9/9ftont estan haciendo locuras con el kernel nix. CSP? No he mirado, pero es una bestia ejecutando concurrentemente.
Las mainframes admitian reemplazar modulos en caliente. Pues hoy usar una GC no deberia ser ni problema. Si a los de C# les va...
No podemos pensar en los SO de hoy como si fueran monotarea. Eso esta muerto.
Como concepto light, taskset, pero lo de dedicar un core en exclusiva no lo tiene GNU por hoy.
Ya cierro al salir
Sigue sin ser lo más apropiado para implementar un modelo diseñado mediante orientación a objetos. C++ es mucho mejor para eso.
Rust puede sustituir a C, no a C++
- No es tan portable como C.
- Sus abstracciones que hacen que sea "memory-safe" tienen coste computacional.
Dicho esto, me encanta Rust para el backend y es lo que usamos en el día a día. Pero para cosas como un sistema operativo, un videojuego, máquinas virtuales etc, no creo que lo vaya a sustituir o que sea lo más indicado.
En el kernel de Linux ya hay código Rust.
Me llama la atención la de Python haters que hay, cuando es de lejos el lenguaje que más ha democratizado la programación entre la gente que no tiene un título de informática, de Telecos o de Físicas bajo el brazo. Y oye, si quieres rendimiento extremo, pues programas un módulo en C/C++ o Rust y luego Python es tu interfaz "fácil" para llamar a eso.
Solo era por lanzar el flame.
Y funciona muy bien.
Si quieres lo es. Si no quieres, no lo es.
Es muy habitual tener bucles infinitos (como podría ser el bucle principal de una aplicación, juego o simulación. Y dentro de ese bucle se procesan multiples mensajes que son costosos de evaluar, y por ello se evalúan de menos costoso a más costoso y diferentes casos consecutivos dentro del bucle.
Para esos caso, quieres que tan pronto un mensaje indique la inmediata interrupción del bucle, el bucle se interrumpa inmediatamente.
Semánticamente, eso… » ver todo el comentario
p.d.: a mi siempre me dio pena que no triunfara más Pascal-Delphi: me parecía mucho más claro y sencillo como lenguaje...
Eso confunde mucho, sobre todo a los principiantes, jamás lo hagáis.
Inicias un ámbito nuevo exclusivo a ese case, de modo que puedes declarar variables locales a ese ámbito que no son visibles desde los otros cases. El comportamiento por defecto es que las variables definidas en un case son visibles desde los otros cases, con lo que puede llevar a errores.
No sé cómo se les ocurrió diseñar el lenguaje así. Va en contra de la programación estructurada.
En general, la sentencia… » ver todo el comentario
int i = 1;
for(;i<11;i++) ; {
printf("%dn", i);
}
Lenguajes como Rust prohíben esta construcción.
Por favor, actualizaros un poco y dejar de repetir los mantras del C++98 que no salis de ellos...
Que debes ser cuidadoso?
Edit: Ah. No eres quien hizo la pregunta.
Hoy en dia no tienes que hacer new/delete... tienes smart pointers (std::unique_ptr y std::shared_ptr) para evitar memory leaks... tienes STD para multitud de funcionalidades seguras: threads, functions, variables auto, loop foreach, funciones lambda, etc etc etc...
¿Ya no puedes tener punteros a objetos liberados, o hacer aritmética de punteros errónea, o tener referencias al mismo objeto en dos hilos, etc etc?
#48
Una lista enorme de cosas que provocan "Undefined Behavior", y que los creadores de compiladores se han tomado como licencia para compilar incorrectamente.
En la uni donde yo impartia clases trataron reemplazarlo por Python en los primeros años de carrera y fue un desastre, para lo que luego tuvieron que volver a enseñar C++.
Si no quieres instalarte un C++ de primeras para hacer pruebas, puedes usar este compilador online:
www.onlinegdb.com/online_c++_compiler
Lamentablemente ahora mismo estoy un poco agobiado de tiempo y trabajo, pero te garantizo que en cuanto esté de vuelta instalaré el C++ de Visual, (soy esclavo de Microsoft por imperativo legal).
Y te diré que admiro sin condiciones a la gente que comparte el conocimiento como lo haces tú, de lo otro ya estoy agotado.
Muchas gracias por tu aportación.
Salud !!!!
En C++ moderno ya no tienes que usar (de hecho lo mejor es que ni lo uses) new/delete: usa smart pointers:
- std::unique_ptr o std::shared_ptr
std::unique_ptr<Obj1> pObj1= std::make_unique<Obj1>();
ya tienes un puntero a un Objeto… » ver todo el comentario
#include <thread>
#include <string>
#include <vector>
#include <iostream>
void task1(int a) {
// do stuff
}
void task2(const std::string str) {
// do stuff
}
void task3() {
// do stuff
}
int main (int argc, char ** argv) {
double mult = 0.0;
std::vector<double> mult_vec = {0.0, 0.0};
auto lambda =… » ver todo el comentario
Acabarás por convencerme.
En cuanto me alivie un poco el trabajo instalaré un C++ y le echaré un vistazo
Salud y gracias !!!!
resuelve muchas de las pegas de c++ sobre todo en lo referente a gestión de memoria, código mucho más legible y compacto al eliminar las famosas llaves {},
he hecho varios port de código c++ y el resultado mejoraba mucho, el rendimiento es prácticamente el de C, ya que el compilador de nim compila a C o C++ por lo que usar C/C++ desde nim es inmediato.
if(...) {
....
}
Hace años que no utilizo c++ y las pesadillas con sus punteros, exactamente los mismos en que utilizo c#.
Puede que a alguno le suene a herejía pero para el tipo de proyectos en los que estoy metido fue mano de santo.
No vuelvo ni de coña.
Salud !!!!
aparte de toda la funcionalidad añadida desde C++11, como variables auto, loops foreach, funciones lambda, functions, threads, etc etc etc
Estoy seguro que habrá proyectos en los que el actual C++ será más eficiente, no lo sé, pero es que una vez habituado a C#, al IDE de Visual Studio y a su IntelliSense es muy difícil volver. Al menos tal y como yo lo recuerdo.
De hecho .NET tiene un C++ que ya nunca instalo en equipos nuevos, aunque tu comentario me está haciendo dudar.
C# es el C++ para programadores vagos, como es el caso.
Salud !!!!
Además eso suena a queja de muy muy junior. A poco que te dediques a esto meter una línea debajo de un IF o FOREACH sin llaves no te afecta en absolutamente nada en la comprensión.
"Queja" de alguien más cercano a los 20 años de experiencia que a los 10.
Puedes elegir el tipo de gestión de memoria ya sea puntero único (por defecto en Rust) o conteo de referencias. Además de tipos específicos para gestión de memoria cuando se usan hilos. Por ejemplo,… » ver todo el comentario
let mut i : u64 = 1; // Es un int
i += 2;
let i = 2.3;//¡Se redefine a double!
Esto es un puto caos... imagina un codigo complejo donde tienes mas variables y cada una se redefine a distintos tipos distintas veces.... es un puto caos saber si esa variable deberia de tener un 2, un 3, un 2.3, un 3.2, etc etc...