C ++ 30 años: mirando hacia el futuro

Ricardo Prieto
Ricardo Prieto

[Bjarne Stroustrup] presentó C ++ al mundo el lunes 14 de octubre de 1985 en la conferencia anual de ACM sobre “The Row of Computing”. En su 30 cumpleaños [Bjarne] Repasó la historia, su experiencia y sus reflexiones sobre el futuro del idioma en una entrevista. También ese día apareció la primera edición de su libro, “El lenguaje de programación C ++”. Ahora está disponible en la cuarta edición. El título difería sólo en el “++” del clásico libro C de [Kernighan] y [Ritchie] que adornaba los escritorios de un grupo de programadores en C.

El primer versolos de C ++ se compilaron con CFront, un compilador que generaba código C, que luego se compilaba normalmente. Alrededor de la década de 1990, no está claro cuándo estaban disponibles muchos compiladores nativos, especialmente para computadoras, lo que está provocando un crecimiento explosivo de 400.000 usuarios a unos 4,4 millones en la actualidad.

Una de las frustraciones [Stroustrup] expresa cómo los desarrolladores ven C ++,

… un problema que siempre ha plagado a C ++: la enseñanza deficiente y la comprensión deficiente de C ++ incluso entre sus practicantes. Siempre ha habido una tendencia a describir C ++ como una extraña variante de otra cosa.

Pronto, el comité de estándares se reunirá para discutir C ++ 17 en Hawái. Hermosos vientos y cielos brillantes parecen estar en el futuro de C ++.

  • matseng dice:

    Quémalo con fuego y ve a golang … 🙂 – pero no estoy seguro de que esté bromeando … Nunca me ha gustado la programación orientada a objetos. Tal vez sea porque comencé con el ensamblaje y luego pasé a C.

    • Cierto dice:

      B y BCPL, luego C.

      • Cierto dice:

        Lo siento BCPL, seguido de B y luego C.

    • kart35 dice:

      Miré a C y cambié a C ++ poco después de eso. Una vez que todo el asunto OOP hace clic, es mucho más fácil de manejar.

      Por supuesto, la capacidad de conectarse con Python (a través de la configuración de Python), Java (a través de JNI, bastante feo), C (“C” externa), etc. también es agradable.

    • no dice:

      Creo que las intenciones de OO en C ++ son completamente diferentes de lo que piensa la gente. He visto a gente escribir Java en C ++, tratando de hacer coincidir todo en clase. Pero si observa el stl, los objetos en su mayoría encapsulan recursos (vector, matriz, cadena, punteros inteligentes …), que son objetos bien, y brindan una manera limpia de asegurarse de que no se filtre nada. El otro uso principal de las clases / estructuras en stl es aprovechar las plantillas que se usan correctamente, lo que es un gran impulso para el lenguaje. Si su problema en cuestión no se ajusta a los principios de OO, puede escribir módulos de funciones limpios y completos utilizando archivos y espacios de nombres separados, y su código será limpio, claro, reutilizable y bellamente escrito en C ++.

      Lo que no me gusta de C ++ es que tiene demasiadas cosas del antiguo C y del C ++ en evolución, y algunas de esas cosas todavía no se pueden eliminar sin dejar un agujero; las inclusiones no son lo mejor, las macros todavía existen y, a veces, se necesitan trucos desagradables con patrones. Si un nuevo lenguaje tuviera los mismos principios, lo veo en el diseño de stl pero dejaría de lado toda la fealdad que queda en C ++, lo cambiaría y nunca volvería.

      • Dan dice:

        ¡Parece que D puede estar cumpliendo con esos criterios!

    • halherta dice:

      C ++ es el lenguaje de programación más expresivo y, por tanto, el más complicado de aprender. Lo tiene todo; plantillas, clases, programas generales, programación funcional, programación orientada a objetos, etc. Esto lo hace excelente para el modelado y la abstracción, pero puede ser bastante difícil aprender a programar en C ++ correctamente.
      Personalmente disfruto de programar en C ++, especialmente cuando lo uso como parte de Qt Framework.

      Golang, por otro lado, aunque es un gran lenguaje por sí solo, con un gran potencial de crecimiento … No es tan flexible ni expresivo como C ++ pero realmente no está destinado a ser … Eso es todo. .. se supone que es un lenguaje fácil de aprender y usar y posee un número mínimo de rasgos necesarios para lograrlo. La principal debilidad de Golang es su falta de bibliotecas (especialmente bibliotecas nativas). Pero eso debería cambiar rápidamente. Golang todavía tiene algo más de 5 años.

      Por cierto, golang hace OOP. Simplemente lo hace sin clases

  • agion dice:

    La programación orientada a objetos es similar al socialismo: buenas intenciones pero rotas por un proyecto y generalmente termina en un desastre. Algún día elegiré ensamblaje o C sobre cualquier objeto cáncer.

    • daid303 dice:

      Supongo que nunca ha ampliado un programa más que una zapatería. Debido a que cada programa que he visto es más grande que el desarrollo humano, es éter OO, o error del código espagueti.
      He visto que los desarrolladores de C realmente expresan su odio por C ++, y luego miras su código y simplemente reproducen las clases de C ++ con código C simple. Haga todo el trabajo usted mismo en lugar de dejar que el compilador lo haga.

    • Niobe dice:

      Su comentario infundado sobre el socialismo en particular, POO se presta a expresar soluciones a algunos dominios con bastante naturalidad. Para nombrar al menos un ejemplo; interacción de las entidades estatales como la encontraría en el diseño de juegos.

      • Trevor dice:

        El comentario sobre el socialismo está bien fundado, como lo demostrará un familiarizado con la historia del siglo XX.

        • Ingenuo de patas azules dice:

          Los comentarios sobre La-Tecnologia no pueden fallar, solo * ser * fallado.

        • Megol dice:

          Solo si tienes una extraña definición de socialismo.
          El socialismo funciona bien en gran parte del mundo e incluso en Estados Unidos existen tendencias socialistas que mejoran la vida de la mayoría. Sin embargo, no se llamará socialismo …

  • WestfW dice:

    Leí algunos comentarios en la red sobre cómo uno realmente necesita aprender a programar en C ++, en lugar de simplemente “C con clases”. Con esto, parecen querer decir que tienes que usar las características que probablemente no funcionen en entornos profundamente incrustados y causan una hinchazón de un programa en otras plataformas. (“Use el STL y la asignación automática de memoria dinámica”) (Me gusta particularmente el “ejemplo realmente bueno de C ++ efectivo”, que compilé en aproximadamente un 60% más grande que el programa de estilo “malo, C con clases”). Suspiro. 🙂

    • Niobe dice:

      En general, el uso de funciones de biblioteca estándar debería tener un efecto insignificante en el binario compilado, especialmente cuando se compila con los indicadores de compilación correctos. Me interesaría ver este ejemplo del que estás hablando.

      Advertencia de tangente, realmente debería intentar evitar la asignación de memoria dinámica a sistemas integrados.

    • no dice:

      Hay dos cosas que considero incorrectas en ese comentario. Primero, las características del lenguaje no dejarán de funcionar porque está compilando para un sistema integrado (tal vez subprocesos si su entorno no permite tal cosa). Lo único que hará que las funciones estándar no funcionen correctamente es un compilador no estándar.
      En segundo lugar, el rendimiento no siempre está del lado de C, a veces los compiladores de C ++ pueden realizar mejoras que los compiladores de C no hacen. Por ejemplo, los functors pueden estar más a menudo en línea desde el compilador que los punteros funcionales. En general, si su compilador es un compilador de C ++ decente (gcc / clang), el código está escrito correctamente y las optimizaciones del compilador están habilitadas, la pérdida de rendimiento debería ser mínima o ni siquiera la pérdida de rendimiento.

      • WestfW dice:

        Las “características del lenguaje” pueden incluir el uso de bibliotecas en tiempo de ejecución y funciones que no existen para una plataforma en particular (es decir, STL, según tengo entendido, usa muchos contenedores dinámicamente grandes, lo que requiere una ramificación significativa, asignación dinámica y suficiente “String” y “New” ni siquiera están implementados en Arduino (o, en cualquier caso, no son “correctos”. Un buen programador de C ++ probablemente miraría avr-g ++ y diría “¡no! ¡C ++! “
        El ejemplo estaba en http://programmers.stackexchange.com/questions/48401/learning-c-properly-not-c-with-classes
        Aquí está su “buen” programa C ++. Solicite líneas estándar. Puedes decir que hace eso, ¿verdad? (Hmph.)

        class line { 
            std::string data;
        public:
            operator std::string() const { return data; }   
            friend std::istream &operator>>(std::istream &is, line &l) { 
                return std::getline(is, l.data);
            }    
        };
        
        int main() { 
            std::set<std::string> lines((std::istream_iterator<line>(std::cin)), 
                                        std::istream_iterator<line>());    
            std::copy(lines.begin(), lines.end(), 
                      std::ostream_iterator<std::string>(std::cout, "n"));
            return 0;
        }
        
        • Rud Merriam dice:

          De hecho, sí, puedo decir lo que hace. Tal vez necesitaría unos minutos más si no me dieras la pista de que estaba ordenando las líneas, pero lo entendería. Me molesta un poco el uso de ‘conjunto’ en lugar de ‘plural’, porque aquí el conjunto eliminará algunas líneas duplicadas. No muchos.

          No le doy a Java cuando digo que el mayor problema que tuve con él fue aprender las bibliotecas. Cuando trabajé con Java a principios de la década de 2000, absorbí las bibliotecas de C ++ a través del uso y el estudio. Intentar obtener todas las bibliotecas de Java a la vez era beber de una manguera contra incendios.

          Puedo ver dónde sería un desafío aprender C ++ para un principiante.

        • Martín dice:

          Esto está terriblemente codificado. No solo eso, es antiguo C ++. No es necesario crear un functor y un conjunto. Puede que esté utilizando un vector y un tipo.

    • Rud Merriam dice:

      Comencé con C ++ en los años 90, leyendo los manuales de Borland durante las vacaciones en Hawai, justo cuando Irak invadía Kuwait. Es extraño cómo se relaciona eso … De todos modos, durante los siguientes 5 años experimenté 3 cambios distintos en mi comprensión del uso de C ++. Desafortunadamente, ya no puedo trabajar en cada paso, pero ciertamente estaban allí. La primera fue la comprensión de la encapsulación, pero esta fue una extensión de la programación de ocultación de datos estructurados. Otro vio clases más que datos y operaciones juntos. Se han convertido en abstracciones más verdaderas de una entidad con comportamientos. No recuerdo el tercer turno. Como señala, puede superarlo. Debe recordar los requisitos generales del sistema.

    • Ingenuo de patas azules dice:

      @WestfW
      Su publicación se lee como si nunca hubiera trabajado fuera de los sistemas integrados, o tal vez como si todavía estuviera en la universidad, porque cree que el tamaño alcanzable es el único parámetro valioso, o que se relaciona de manera confiable con la eficiencia o la velocidad de ejecución.

      Si tuviera que trabajar en un programa más grande con un equipo, sabría que a veces vale la pena sacrificar un tamaño alcanzable a favor de la sostenibilidad, escalabilidad, modularidad, cualquier otra cualidad o combinación de ellas.

      No me malinterpretes, las características de C ++ proporcionan un cable increíble al que aferrarse, pero nadie hace que nadie las use. No todos los proyectos tienen que aprovechar los sistemas de plantillas y las directivas del preprocesador, ya que ambos funcionan de forma completa.

      • WestfW dice:

        Podría ser. El de dos caras me molesta. Por un lado, algunos desarrolladores de C ++ atraen a ingenieros embebidos: “¡usa C ++; tiene características que mejorarán la confiabilidad y productividad sin causar un bache!”, Y por otro lado está el “Si no usas STL y otras funciones de inducción de swell para todo, en realidad no se programa en C ++. “

  • Nunca dice:

    Por desgracia, ¿solo 4,4 mil usuarios estimados?

    No es que no implique una amplia aceptación, pero en el gran asunto, la población mundial, etc., de repente, el “mundo técnico” comienza a sentirse como una pequeña isla.

    • Indyaner dice:

      Asumiendo que una gran parte del mundo humano tiene vida por debajo del umbral de pobreza y bajo el hecho de que tenemos muchas personas en la tierra que tienen más de 15 años y muchas más de 60 años, y comprendemos que existen muchas limitaciones. laboristo, med. Doctora, maestras y contadoras, así como muchas mujeres en el mundo que no trabajan en ninguna profesión pero cuidan de su familia … Encuentro 4.4M bastante alto.

      • DainBramage dice:

        ¿En serio? ¿Cuándo se considera el uso global de Internet por más de mil millones de usuarios? 4.4M parece lastimosamente pequeño en comparación, y ni siquiera un poco realista.

        • Ingenuo de patas azules dice:

          ¿Qué parte de los usuarios de Internet realmente usa Internet, en lugar de usar un dispositivo que depende de Internet? De ellos, ¿cuántos usan sitios web además de Facebook, Reddit, etc.? De ellos, ¿cuántos tienen las habilidades para escribir código? ¿Cuánto haces con regularidad? ¿Qué tan específicamente escribes C ++? Recuerde que esto básicamente excluye las aplicaciones en línea, los desarrolladores de Android / iOS, grandes áreas del mundo de la investigación y muchos otros grupos.

          Intenta ingresar números en serio. Piense en ello como una ecuación de Drake demográfica. Unos pocos millones no me parecen demasiado inverosímiles.

      • DainBramage dice:

        Estaba pensando en algo, ¿tal vez se estaban refiriendo a los usuarios de C ++ en lugar de a los usuarios de computadoras?

        • Rud Merriam dice:

          Sí, la referencia es a C ++, no a computadoras.

  • Tom Trebisky dice:

    Siempre miré a C ++ como una variante innecesariamente extraña de C, y un lenguaje que simplemente podía omitir el aprendizaje. Este enfoque me ha servido muy bien hasta el día de hoy y espero que continúe de esa manera.

    • Miroslav dice:

      Yo también. Esta cosa OOP parece haber sido inventada para confundir a la gente y convencerlos de que de alguna manera son idiotas si no están en el carrito hipster.

      • fede.tft dice:

        El enemigo típico de C ++ nunca escribió un programa real en C ++ o intentó usarlo como si fuera C y se sintió muy frustrado.
        Las cosas empeoran si agrega la falsa suposición de que un lenguaje de programación simple conduce a programas más simples.
        C ++ también es bueno para microcontroladores (especialmente de 32 bits), si no comienza con una actitud ya sesgada, no funcionará.

  • SavannahLeón dice:

    Los partidarios de la programación orientada a objetos realmente necesitan dejar de tratar cualquier semana especial de programación orientada a objetos como esa para cada idioma. Los críticos de OOP deben dejar de actuar como si OOP fuera una especie de conspiración. Nadie tiene un solo utensilio en su cocina, nadie debe usar un solo idioma para todo.

    Si solo tengo algo de espacio en un microcontrolador, vaya con ASM. Si quiero agregar algo de complejidad y obtener más espacio y potencia, subo a C. Si trabajo en los niveles de computadoras modernas, subo a la herramienta adecuada para el trabajo. ¿Necesito masticar gigabytes de texto sin formato? Perl o Python es bueno. Odio Java, pero lo usaré cuando apunte a múltiples sistemas operativos. C ++ es fácil de usar. C # tiene su lugar. Visual Basic funciona bien RAD. Basic es un buen comienzo para principiantes, pero tenga cuidado de no atraparlos. Enseño Scratch a niños muy pequeños y una niña de seis años de mi clase descubrió a Alice (a quien apresuro a aprender a enseñarle).

    No estoy pidiendo toda la paz en la Tierra, pero maldita sea … volvamos al verdadero objetivo aquí. Matándose unos a otros con robots de combate gigantes.

  • Glen Johnson dice:

    C ++ es un camino hacia abstracciones sólidas, o también es un camino hacia un acantilado. Lo que me agrada es el viejo concepto de que cada decisión de proyecto debe estar envuelta en una función. Una clase es un grupo de decisiones de proyectos estrechamente conectadas que participan en la clase.

  • Harley dice:

    Lo siento, pero estoy deseando que tenga un paro cardíaco y muera, así que alguien me dará un lenguaje para pequeños microíndices no tan crípticos. Tomé clases, experimenté y me despegué y simplemente no lo logré. Lo siento, pero me gustan los idiomas más parecidos al inglés. Cuando la gente está orgullosa de su desenfoque, simplemente no puedo usar ese lenguaje. Un buen lenguaje de trabajo debe ser claro, conciso y simple para sus usuarios. Fin de mi jabonera.
    Harley

  • Francis Kim dice:

    Al menos eres más joven que yo, C ++;)

  • notmyfault2000 dice:

    ITT: “¡No me funciona, así que NADIE debería usarlo!” y “Funciona para mí, ¡así que TODOS tienen que usarlo!”

    Ambos lados pueden estar enojados. Utilice la herramienta adecuada para el trabajo. El hecho de que PUEDA no significa que sea la mejor manera.

    • Megol dice:

      Así es. Intentar forzar la orientación a objetos en todas partes crea errores como Java, no usar la orientación a objetos donde el modelo es apropiado crea código inflexible y / o espaguetis. Pero ningún modelo es adecuado para todo tipo de código.
      La programación basada en tablas puede compactar, acelerar y leer / cambiar fácilmente ciertas tareas. La programación funcional funciona muy bien para un problema adecuado para ella. La programación estructurada estándar se asume hoy en día, pero no debe olvidarse. Para algunos problemas, los métodos múltiples mejoran enormemente la productividad y facilitan la lectura incluso de cosas complejas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *