Está en la página 1de 10

Bjarne Stroustrup es un cientfico en computacin y Catedrtico de Ciencias de la

Computacin en la Universidad A&M de Texas. Es reconocido mundialmente por ser el


creador del lenguaje de programacin C++.

Stroustrup es un cand. scient. (el equivalente dans a un mster) en matemtica y ciencias


de la computacin (1979) por la Universidad Aarhus, Deinamarca, y Doctor en ciencias de
la computacin (1979) por la Univesidad de Cambridge, Inglaterra. Anteriormente trabaj a
la cabeza del departamenteo de Investigacin en Programacin de los laboratorios Bell de
AT&T, desde su creacin hasta finales de 2002.

En esta entrevista, Bjarne Stroustrup nos cuenta todo sobre el diseo y desarrollo de C++,
los garbage collectors, el futuro de C++ y el rol de la barba en la creacin de lenguajes de
programacin exitosos.

Computerworld public recientemente esta excelente entrevista a Bjarne Stroustrup (en


ingls), como parte de su serie "The A-Z of Programming Languages". A continuacin una
traduccin al castellano con lo destacado de la nota.

Qu lo motiv para desarrollar C++?


Necesitaba una herramienta para disear e implementar una versin distribuida del kernel
de Unix. En ese momento, 1979, no exista dicha herramienta. Necesitaba algo que
pudiera expresar la estructura del programa, manipulara directamente el hardware, y que
sea lo suficientemente eficiente y portable para programacin de sistemas importantes.

Pueden encontrar ms informacin y detalles acerda del diseo y evolucin de C++ en mi


notas de HOPL (Histoy of Programming Languages - Historia de los Lenguajes de
Programacin), las cuales pueden encontrar en mi pgina personal y en mi libro "El Diseo
y Evolucin de C++".

Qu problemas especficos intentaba resolver?


Los dos problemas que me vienen a la mente eran poder simular la infraestructura de
comunicacin inter-procesos para un sistema distribuido o un sistema de memoria
compartida (para determinar qu servicios del Sistema Operativo podramos correr en
cada procesador por separado); y el escribir los drivers de red para este sistema.
Obviamente, como Unix estaba escrito en C, tambin quera un alto grado de
compatiblidad con C. Muy tempranamente, desde 1980 en adelante, fue utilizado por otras
personas (con mi ayuda) para simular distintos protocolos de red y altoritmos de gestin de
trfico.

De dnde proviene el nombre de C++?


Mientras "C con Clases" (el ancestro de C++) se volvia popular dentro de Bell Labs,
algunas personas pensaban que era un nombre demasiado largo y comenzaron a llamarlo
"C". Esto significaba que tenan que aclarar a lo que se referin cuando necesitaban
distinguirlo del lenguaje de Dennis Rithcie, al cual llamaban "Viejo C", "C original", y as.
Algunos pensaban que era una falta de respeto hacia Dennis (ni l ni yo lo sentiamos as)
y un da recib un "pedido" de Bell Labs para que le cambiara el nombre. Como resultado,
lo nombramos C84 por un tiempo. Este cambio no ayud demasiado, as que ped ayuda
por sugerencias y eleg C++ de una lista de candidatos. Todos estn de acuerdo que,
semnticamente hablando, ++C hubiera sido todava mejor, pero habra ocasionado
demasiados problemas para quienes no conocen la sintaxis.

Hubo algn problema particularmente dificil o frustrante que


hubo que superar durante la creacin del lenguaje?
Montones! Para empezar, cuales deberan ser las reglas fundamentales del lenguaje?
Qu deba estar en el lenguaje, y que debia quedar afuera? La mayora quiere un
lenguaje pequeo que brinde todas las caractersticas que encuentran til en el resto de
los lenguajes. Desafortunadamente, eso es imposible.

Luego de un corto tiempo de confiar en la suerte y el buen gusto, me decid por un grupo
de "reglas a ojo" que pretendian asegurar que los programas en C++ fueran a la vez
elegantes (como en Simula67, el lenguaje que present la programacin orientada a
objetos) y efcientes para la programacin de sistemas (como C). Obviamente, no todos los
programas logran ambas cosas, pero la idea era (y es) lograr que un desarrollador
competente pueda expresar practicamente cualquier idea directamente y lograr su
ejecucin con un mnimo overhead (cero overheads comparando contra una versin en C).

Convencer a la comunidad de programadores del valor del chequeo de tipos fue


sorprendemente dificil. La idea de chequear los argumentos de una funcin contra una
delcaracin de la funcin fue resistida fuertemente - al menos hasta que C adopt la idea.

En la actualidad la programacin orientada a objetos est por todos lados, por lo que a las
personas les cuesta creer que me fue imposible convencer a las personas de su utilidad
hasta que finalmente agregu funciones virtuales y demostr que eran lo suficientemente
rpidas para usos muy demandantes. El enfoque de C++ hacia la Programacin Orientada
a Objetos fue (y es) bsicamente el mismo que Simula, con simplificaciones y mejores de
peformance.

La compatibilidad con C fue (y es) una gran fuente de problemas y fortalezas. Al ser
compatible con C, los desarrolladores de C++ tenian garantizada una gran cantidad de
caractersticas que usualmente faltan en las primeras versiones de los lenguajes, y acceso
directo (y efeciente) a una gran cantidad de cdigo - no slo cdigo en C, sino tambin en
Fortran y ms ya que las convenciones de llamadas de C eran simples y similares a las
que soportaban otros lenguajes. Despus de todo, como sola decir, la reutilizacin
comienza por utilizar algo que ya existe, en vez de esperar que alguien desarrolle nuevos
componentes reutilizables. Por otro lado, C tiene varias vueltas sintcticas y semnticas,
por lo que seguir a la par de C mientras fue evolucionando no es tarea fcil.

Cules son las principales diferencias entre C con Clases y


C++?
La mayora de las diferencias estuvieron en la tcnica de implementacin. C con Clases se
implent con un preprocesador, mientras que C++ requiere un compilador apropiado (por
lo cual escrib uno). Era facil transcribir programas en C con Clases hacia C++, pero los
lenguajes no eran 100% compatibles. Desde un punto de vista del lenguaje, la mayor
mejora fue la incorporacin de funciones virtuales, lo cual permiti la programacin
orientada a objetos clsica. Tambin se agreg la sobrecarga (incluyendo la sobrecarga de
operadores). Vale destacar que las caractersticas fundamentales de C++ para la gestin
de recursos generales, constructores y destructores ya se encontraban en las primeras
versiones de C con Clases. Por otro lado, los templates (y las excepciones) se aadieron
en versiones algo posteriores de C++ (1989); antes de esto, soliamos usar macros para
expresar ideas generales de programacin.

Qu hubiera hecho diferente en el desarrollo de C++ si hubiera


tenido la oportunidad?
Esta pregunta es un poco injusto porque, por supuesto, no tena el beneficio de casi 30
aos de experiencia con C++, y mucho de lo que s actualmente es el resultado de
experimentar con versiones anteriores de C++. Por otro lado, en aquel entonces
bsicamente no tena recursos (slo yo y mi tiempo libre), por lo tanto si dijera
(correctamente) que las funciones virtuales, los templates (con "conceptos", tal como los
ofrece C++0x) y las excepciones hubieran hecho de C++85 un mejor lenguaje, estara no
slo sugiriendo algo que no hubiera sabido disear en 1980, sino tambin que, aunque
hubiera encontrado el diseo perfecto de forma mgica, no lo hubiera podido implementar
en un tiempo razonable.

Creo que hubiera sido posible lanzar una mejor librera estandard en 1985 junto a C++ 1.0,
la cual hubiera mejorado mucho con el tiempo. Con "mejor librera" me refiero a una
librera con clases que incluyeran una mejora versin de funciones para soportar
concurrencia y un set de clases de containers.

Ms tarde, hubiera desarrrolaldo templates (claves para el estilo de programacin genrico


de C++) antes que herencia mltiple (no una gran caracterstica, como muchos la
consideran), y hubiera hecho ms nfasis en las excepciones.

Como se sinti cuando C++ logr la estandarizacin en 1998, y


cmo particip del proceso de estandarizacin?
Trabaj duro en la estandarizacin durante aos (1989-1997); ahora estoy trabajando en el
sucesor del estndard: C++0x. Evitar que un lenguaje popular se fragmente en dialectos
es una tarea dificil y esencial. C++ no tiene un dueo o un "pap rico" para brindar fuerza
de desarrollo, libreras "gratis" y marketing. El comit de estandarizacin ISO fue esencial
para el crecimiento de la comunidad de C++.

Cul fue el programa ms interesate que escribi en C++?


No puedo elegir uno, y en general no pienso en los programas como "interesantes". Me fijo
ms en los sistemas completos, de los cuales algunas partes estn escritos en C++. Entre
estos me vienen a la mente el sub-sistema de manejo autnomo del Mars Rover de la
NASA, el motor de bsqueda de Google, y el sistema de reservas de vuelos de Amadeus.
Mirando el cdigo aislado, creo que la librera STL de Alexander Stepanov (containers,
iteradores, y librerias parte de la librera estndard de C++) est entre las porciones de
cdigo ms interesantes, tiles e influeyentes para C++ que haya visto.

Alguna vez vio al lenguaje utilizarse para algo que no fue


originalmente planeado?
Dise C++ para la generalidad. Es decir, las caractersticas que tiene fueron
deliberadamente diseadas para hacer cosas que no me poda imaginar. Adems, las
facilidades de abstraccin de C++ (por ejemplo, clases y templates) fueron diseadas para
ser rpidas cuando son usadas en hardware convencional, de forma que las pesonas
pudieran construir las abstracciones bsicas que necesitaran para un rea de aplicacin
determinada (como ser nmeros complejos y manejadores de recursos) dentro del
lenguaje.

Entonces, si, vi utilizar a C++ para muchas cosas que no hubiera pensado, y ser usado de
muchas formas que no anticip, pero en general no estoy completamente sorprendido.

Muchas veces me desespera ver los intentos de forzar C++ en un molde que no encaja
simplemente porque alguien no se molest en aprender lo bsico de C++. Por supuesto,
las personas que hacen esto no creen que estn actuando irracionalmente; en cambio,
piensan que saben cmo programar y que no hay nada nuevo o diferente acerca de C++
que requiera que cambien sus hbitos y aprendan "trucos nuevos". Estas personas
estructuran su cdigo como lo haran, por ejemplo, para C o para Java, y luego se
sorprenden cuando C++ no funciona como esperan. Algunos hasta se enojan mucho,
aunque no entiendo porqu deberan enojarse al darse cuenta que tienen que tener ms
cuidado con el sistema de tipos en C++ que en C, o que no hay una compana brindando
librerias "gratis" y "estndard" para C++ como lo hay en Java. Para usar C++ bien se tiene
que utilizar el sistema de tipos, y se tienen que buscar librerias. Intentar construir una
aplicacin directamente con C++ a secas, o usando slo las libreras estndard, es una
prdida de tiempo y esfuerzo.

Parece que una gran cantidad de programadores nunca usaron


los templates, incluso aunque sean programadores C++
Puede ser cierto esto, pero yo creo que al menos la mayora utilizan los templates a travs
de STL (u otras libreras similares), y que la cantidad de programadores que evitan los
templates va en disminuacin.

Por qu cree que ocurre esto?


Por miedo a algo que es diferente a lo que ya conocen, rumores de complicaciones en el
cdigo, problemas de linking, y mensajes de error espectacularmente malos.

Alguna vez dese que el compilador GNU C++ hubiera mostrado


errores de compilacin ms cortos, para que no ahuyentara a
estudiantes?
Por supuesto, pero no es todo culpa del GCC. El problema fundamental es que C++98 no
tiene una forma para que el programador indique de manera directa los requerimientos de
un template en los tipos de argumentos. Esta es una debilidad del lenguaje, no del
compilador, y slo puede resolverse completamente con un cambio en el lenguaje, el cual
ser parte de C++0x.

Me estoy refiriendo a los "conceptos", los cuales sern parte de C++0x. Para ms detalles,
vean mis notas sobre C++0x. Hasta que los "conceptos" estn disponibles para todos, se
pueden usar "constrains classes" para mejorar los chequeos; vean mi FAQ tcnico para
ms informacin.

En los ltimos aos se est viendo que el procesamiento


distribuido est ms al alcance del programador promedio.
Cmo afectar esto a C++?
Es dificil de saber, pero antes de entrar en la programacin distribuido un lenguaje tiene
que soportar concurrencia y poder tratar ms que el modelo de memoria tradicional
"plano/uniforme". C++0x hace exactamente esto. El modelo de memoria, tipos atmicos, y
el almacenamiento local de hilos brindan las garantas bsicas para soportar una buena
librera de hilos. En resumen, C++0x permite un uso eficiente de multi-ncleos.

Por supuesto que no es necesario esperar a C++0x para hacer programacin concurrente
en C++. Las personas hicieron esto durante aos, y la mayor parte de lo que el nuevo
estndard ofrece ya existe actualmente en otras formas.

Ve esto como una tendencia a la creacin de una nueva


generacin de lenguajes de propsito general?
Muchos de los lenguajes "de scripting" brindan utilidades para manipular el estado de
entorno Web, y all reside su verdera potencia. La manipulacin simple de texto se logra
bastante facilmente con librerias, como las nuevas libreras de expresiones regulares de
C++ (disponibles hoy en boost.org), pero es dificil concebir un lenguaje que es tanto de
propsito general como distribuido. La raz del problema es que los lenguajes distribuidos
prcticos utilizan la simplificacin y la especializacin. Un lenguaje de propsito general no
puede proveer un nico modelo distribuido de alto nivel.

No veo una razn importante que impidan que un lenguaje de propsito general crezca
con utilidades para distribucin. Sin embargo, yo sostengo (sin xito) que C++0x debera
hacer exactamente esto. Creo que eventualmente todos los principales lenguajes van a
proveer algn tipo de soporte para la distribucin, a travs de una combinacin de soporte
directo del lenguaje, soporte en tiempo de ejecucin, o librerias.

En su opinin, qu aporte perdurable en el tiempo le dio C++ al


desarrollo de sistemas?
C++ llev la programacin orientada a objetos al pblico general, y est haciendo lo mismo
para la programacin genrica.

Si se mira a algunos de los programas ms exitosos de C++, especialmente los


relacionados a la gestin de recursos, se tiende a encontrar que los destructores son
fundamentales e indispensables en su diseo. Creo que los destructores sern vistos
como la contribucin ms importante - todo lo dems depende en una combinacin de
caractersticas del lenguaje y tcnicas para soportar un estilo de programacin, o
combinacin de estilos.

Otra aporte del legado de C++ es que hizo que la abstraccin sea manejable y posible de
realizar en reas aplicativas donde las personas necesitan programar en lenguaje de
mquina directamente, como con bits, bytes, words y direcciones.

En el futuro, apunto a lograr una mayor integracin entre la orientacin a objetos y la


programacin genrica, y una mejor articulacin entre los ideales de generalidad,
elegancia y eficiencia.

Por dnde cree que pasar el futuro de C++?


Por la misma parte en la que C++ tuvo su mayor fuerza desde el primer da: aplicaciones
con componentes crticos de sistema, especialmente la provisin de infraestructura.
Actualmente, casi todas las infraestructuras (incluyendo la implementacin de lengujaes de
ms alto nivel) estn bajo C++ (o C), y creo que seguir siendo as. Tambin, la
programacin de sistemas embebidos es una rea importante de crecimiento para C++;
por ejemplo, el software para la prxima generacin de aviones de combate de Estados
Unidos est escrito en C++ (vean las Reglas de codificacin JSF++ en mi pgina). C++
brinda lo mejor cuando se necesita simultneamente alta performance y alto nivel de
abstraccin, especialmente bajo retricciones de recursos. Casualmente, esta descripcin
encaja tanto para el iPod como para una aplicacin cientfica de gran escala.

Lo sorprendi la evolucin y popularidad del lenguaje?


Nadie, con la posible excepcin de Al Aho, pudo prever la magnitud del xito de C++.
Supongo que durante los aos '80 estaba demasiado ocupado para sorprenderme: el uso
de C++ se duplicaba cada 7.5 meses, como calcul ms tarde - y todo esto se logr sin un
departamente de marketing dedicado, casi sin personas, y un presupuesto prcticamente
nulo. Apunt a lograr generalidad y eficiente, y tuve xito ms all de cualquier
expectativa.

Por cierto, cada tanto me encuentro con personas que asumen que, porque alago de C++
y lo dfiendo de sus detractores, pienso que es perfecto. Esto es obviamente absurdo. C++
tiene un montn de debilidades - y las conoczco mejor que nadie - pero el objetivo de
realizar el diseo y la implementacin no era no cometer errores (esto es imposible en un
proyecto tan grande, y bajo tales restricciones Draconianas). El objetivo era crear una
herramienta que, en manos competentes, sea efectiva para la construccin de sistemas
importantes para el mundo real. En esto, creo que tuvo xito ms all de mis mayores
expectativas.
Qu le responde a las crticas del lenguaje, como que hered
todas las falencias de C y que tiene una enorme cantidad de
caracertsticas que lo hacen "complicado"?
C++ hered las debilidades y fortalezas de C, y creo que hicimos un buen trabajo en
compensar las debilidades sin comprometer las fortalezas. C no es un lenguaje simple (el
estndard ISO tiene ms de 500 pginas), y la mayora de los lenguajes modernos son
ms grandes an. Obviamente, C++ (como C) es "complicado" comparado con otros
lenguajes de juguete, pero realmente no es tan grande al compararlo con otros lenguajes
modernos. Hay razones prcticas y slidas de porqu todos los lenguajes actuales que se
usan para trabajo industrial serio son "complicados": las tareas que deben resolver son
enormes y de una complejidad ms all de la imaginacin.

Otra razn para el tamao "incmodo" de los lenguajes actuales es su necesidad de ser
estables. Escrib cdigo en C++ hace 20 aos que an hoy corre, y estoy seguro que
seguir compilando dentro de otros 20 aos. Quienes construyen proyectos de
infraestructura grandes necesitan esta estabilidad. Sin embargo, para mantenerse
modernos y poder enfrentar nuevos desafios, los lenguajes deben crecer (tanto en
caractersticas del lenguaje como en libreras base), pero si quits algo, romps el cdigo.
Por lo tanto, los lenguajes que se construyen pensando en serio en los usuarios (como
C++ y C) tienden a mantener caractersticas durante dcadas, y tienden a "complicarse".
La alternativa son lenguajes hermosos para los cuales hay que re-escribir el cdigo cada 5
aos.

Por ltimo, C++ soport explcticamente y desde el primer da ms de un estilo de


programacin, y una interaccin entre estos estilos. Si penss que existe un nico estilo de
programacin que es el mejor para todas las personas y aplicaciones (por ejemplo, la
programacin orientada a objetos), entonces ah tens una oportunidad para lograr
simplificacin. Sin embargo, yo creo fervientemente que la mejor solucin (la ms legile,
mantenible, eficiente, etc) requieren ms de un estilo de programacin. Por lo tanto, el
tamao de C++ no puede ser reducido mediante el soporte de un nico estilo de
programacin. El uso combinado de diferentes estilos es clave en mi visin de C++, y una
gran parte de su fortaleza proviene de aqu.

De qu est ms orgulloso, en trminos del desarrollo inicial del


lenguaje y su uso continuado?
Estoy orgulloso de que se haya utilizado a C++ para tantas aplicaciones que hicieron del
mundo un lugar mejor. A travs de C++ pude realizar una pequea contribucin al
proyecto del Genoma Humano, a proyectos de fsica (C++ se utiliza en el CERN, Fermilab,
SLAC, etc), exploracin espacial, energa elica, etc. Pueden ver una pequea lista de
aplicaciones C++ en mi pgina. Siempre me pone feliz cuando escucho que el lenguaje
est siendo usado para algo bueno.

Segundo, estoy orgulloso de que C++ haya ayudado a mejorar la calidad del cdigo en
general, no slo dentro de C++. Los lenguajes ms nuevos, como Java y C#, utilizan
tcnicas que C++ hizo que fueran posibles para el uso en el mundo real, y comparado con
el cdigo de 20 aos atrs muchos sistemas en los que dependemos actualmente son
increiblemente confiables y fueron construidos bajo un presupuesto restringido.
Obviamente, podemos y debemos hacer mejor, pero podemos sentirnos orgullosos del
camino que recorrimos hasta ahora.

En trminos de una contribucin directa y personal, estoy contento de haber escrito el


primer compilador C++, Cfont, para poder compilar programas para el mundo real en
mquinas de 1MHz con 1MB de memoria. Esto es increiblemente pequeo hoy en da,
pero esto fue lo que se necesit en su momento para comenzar con los lenguajes de alto
nivel en las primeras PC. Cfront fue escrito en C con Clases y luego pasado a C++.
Hacia dnde le parece se encaminan los lenguajes de
programacin en el futuro?
"Es dificil realizar predicciones, en especial sobre el futuro". Obviamente, no lo s, pero
espero ver lenguajes de programacin generales con mejores mecanismos de abstraccin,
mejor controles de tipos, y mejores facilidades para utilizar concurrencia. Espero que C++
sea uno de estos lenguajes. Van a existir infraestructuras y lenguajes corporativos
complicados; va a aparecer toda una serie de lenguajes para dominios especficos, y
existirn lenguajes tal como hoy que persisten sin cambios en algunos nichos. Ntese que
estoy asumiendo una evolucin importante de C++, ms all de C++0x. Creo que la
comunidad de C++ es demasiado grande y activa como para que el lenguaje y su librera
estndard se queden estticas.

Tiene algn consejo para los futuros programadores?


Conozan las bases de la ciencia de la computacin: algoritmos, arquitectura de mquinas,
estructuras de datos, etc. No copien tcnicas a ciegas de aplicacin a aplicacin. Sepan lo
que estn haciendo, cmo y porqu funciona. No crean que van a a saber cmo ser la
industria en 5 aos o qu estarn haciendo entonces, as que creen y rmanse un portfolio
de habilidades generales y tiles. Intenten escribir mejor cdigo. Trabajen para hacer de la
programacin una actividad ms profesional y menos de "hacking" de bajo nivel (la
programacin tambin es un arte, pero no slo es un arte). Aprendan de los libros clsicos
en el rea y de manuales ms avanzados; no se conformen con las simples guas de
"cmo hacer" y la documentacin online: en general, no es profunda.

Hay una seccin en su pgina dedicada al "Realmente dijo


eso?". Qu frase de ah lo persigue ms?
No me siento perseguido. Posteo estas frases porque me siguen preguntando por ellas,
as que prefiero aclarar la situacin directamente. "C++ hace que sea ms dificil dispararte
en el pie, pero cuando lo hacs te vuela la pierna completa", generalmente se cita como
una frase hostil hacia C++. Esto es llanamente inmaduro. Todas las herramientas
poderosas pueden causar problemas si se usan mal, y se debe tener ms cuidado que con
herramientas menos potentes. Se puede realizar ms dao (a uno y a otros) con un auto
que con una bicicleta, con una sierra electrica que con un serrucho, etc. Esto es tambin
cierto para otros lenguajes modernos: por ejemplo, es trivial causar problemas de memoria
con Java. Los lenguajes modernos son herramientas potentes. Esta es la razn por la cual
hay que tratarlas con respeto, y los programadores deben encarar sus tareas de manera
profesional. Y no es un motivo para evitarlas, ya que las alternativas "ms simples" son
peores an.

Lleg el momento para la pregunta obligada sobre los garbage


collectors (GC). Por qu las personas estn tan interesadas en
este aspecto?
Porque la gestin de recursos es la tarea ms importante, porque algunos personas
piensan (incorrectamente) que un GC es un signo de programacin descuidada, y porque
algunos personas piensan (incorrectamente) que los GC distinguen a los lenguajes buenos
de los inferiores. Mi opinin sobre los GC es que pueden ser una herramienta muy til,
pero no son necesarios ni apropiados para todos los programas, por lo que un GC debera
ser algo que se pueda utilizar opcionalmente en C++. C++0x refleja esta visin.

Mi visin de los GC es que yo creo que son la ltima aternativa para la administracin de
recursos, no la primera, y que es una herramienta ms entre tantas otras para el diseo de
un sistema, y no una herramienta fundamental para simplificar la programacin.

Cmo recomienda que se administre la memoria en C++?


Mi recomendacin es ver a la memoria como un recurso ms entre otros (hilos, bloqueos,
archivos, sockets), y representar cualquier recurso como un objeto de dicha clase. Por
ejemplo, la memoria puede ser usada para mantener elementos de un container o
caracteres de un string, por lo que debemos usar tipos como vector en lugar de hacernos
lio con estructuras de bajo nivel (como ser un array de punteros a arrays terminados con
cero) y manejar explticamente la memoria. Aqu, tanto el vector como los string pueden
ser manipuladores de recursos que automticamente administran el recurso.

Cuando sea posible, recomiendo usar estos "manipuladores de recursos" como variables
con alcance (scope) restringido. En este caso, no hay un uso incorrecto de gestin de
memoria que el programador pueda hacer mal. Cuando la vida de un objeto no puede ser
acotada, recomiendo otros esquemas simples, como el uso de punteros "inteligentes"
(provsitos en C++0x), o representar la propiedad como miembro de una coleccin. Estas
tcnicas tienen la ventaja de que aplican uniformemente a todo tipo de recursos, y se
integran bien con varios y distintos enfoques para administrar errores.

Slo cuando estos enfoques se torna inmanejables, utilizara un GC. Desafortunadamente,


estas situaciones tambin son comunes, por lo que un GC sera una muy buena opcin
aunque no se integre limpiamente con la gestin de recursos generales. Tambin, los GC
se puede convertirse en un excelente detector de leaks si se les indica que informen sobre
la basura encontrada.

Cuando se usa una gestin de recursos acotada y containers, se genera muy poca
"basura" y un GC se torna en algo rpido. Este asunto est detrs de mi opinin "C++ es
mi lenguaje de GC favorito porque genera muy poca basura".

Esperaba que un GC pudiera ser opcionalmente habilitado en C++0x, pero hubo muchos
problemas tcnicos as que tuve que conformarme con una especificacin sobre cmo
debera integrarse un GC al lenguaje, si fuera provisto. Como con casi todo respecto a
C++0x, existe una implementacin experimental.

Hay muchos ms aspectos de GC ms all de los mencionados aqu, pero bueno, esto es
una entrevista, no un libro.

En un lado ya menos serio, cree que la barba est relacionada


con el grado de xito de los lenguajes de programacin?
Supongo que si lo miramos filosficamente todo est relacionado de alguna manera, pero
en este caso fueron slo el humor y la moda de esa poca. Toda una generacin anterior
de diseadores de lenguajes exitosos usaban barba: Backus (Fortran), Hopper (COBOL), y
McCarthy (Lisp), como tambin Dahl y Nygaard (Simula y la Programacin Orientada a
Objetos).. En mi caso, soy pragmtico: mientras viva en climas ms frios (Dinamarca,
Inglaterra y New Jersey) usaba barba; ahora vivo en lugares clidos, Texas, y decido no
sufrir con una barba.

Por ltimo, hay algo ms que quisiera agregar?


Si, creo que debemos considerar la relacin entre las ideas y la educacin. Toqu este
tema ms arriba, pero el problema de ensear C++ a las personas y cmo usarlo bien
result ser un tema tan dificil como disear e implementar el lenguaje. No tiene sentido
hacer un buen trabajo tcnico y no contarle a las personas. Por si mismas, las
caractersticas de un lenguaje son estriles y aburridas; para que sean tiles, los
programadores tienen que aprender cmo se pueden usar estas caractersticas de forma
de cumplir algn ideal de programacin, como ser la orientacin a objetos o la
programacin generica.

Por supuesto que llevo escritos muchos documentos meramente tcnicos, pero mucho de
mi trabajo est apuntado a elevar el nivel de abstraccin de los programaas, a mejorar la
calidad de cdigo, y a explicarle a las pesonas cmo funcionan las cosas, y porqu.
Pedirle a un programador a que haga algo sin explicarle el motivo es tratarlo como si
fueran chicos: deberan sentirse ofendidos por esto. Mis ediciones de "The C++
Programming Language", D&E, "Teaching Standard C++ as a New Language", y mis notas
HOPL, son todos mis intentos de relacionar mejor mis ideales para C++, y de ayudar a
madurar a la comunidad de C++. Por supesto que esto fue tan slo exitoso en parte:
todava hay mucha programacin de "cortar y pegar", cdigo C++ de baja calidad, pero me
siento alentado por la cantidad de buen cdigo y la calidad de los sistemas producidos.

ltimamente, me fui desplazando de la industria hacia la academia, y ahora veo a los


problemas educativos desde otro ngulo. Necesitamos mejorar la educacin de nuestros
desarrolladores de software. En los ltimos 3 aos, desarroll un nuevo curso para
principiantes (estudiantes de primer ao, a menudo programadores por primera vez). Esto
me dio la oportunidad de llegarle a una audiencia que antes no conocia. El resultado de
esto es el libro "Programming: Principles and Practice using C++", que estar disponible en
Octubre.
anto C como C++ son lenguajes de programacin de propsito general. Todo puede
programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones
de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a medida,
etc.
Oirs y leers mucho sobre este tema. Sobre todo diciendo que estos lenguajes son
complicados y que requieren pginas y pginas de cdigo para hacer cosas que con
otros lenguajes se hacen con pocas lneas. Esto es una verdad a medias. Es cierto que
un listado completo de un programa en C o C++ para gestin de bases de datos (por
poner un ejemplo) puede requerir varios miles de lneas de cdigo, y que su
equivalente en Visual Basic slo requiere unos pocos cientos. Pero detrs de cada
lnea de estos compiladores de alto nivel hay cientos de lneas de cdigo en C, la
mayor parte de estos compiladores estn respaldados por enormes bibliotecas
escritas en C. Nada te impide a ti, como programador, usar bibliotecas, e incluso crear
las tuyas propias.
Una de las propiedades de C y C++ es la reutilizacin del cdigo en forma de
bibliotecas de usuario. Despus de un tiempo trabajando, todos los programadores
desarrollan sus propias bibliotecas para aquellas cosas que hacen frecuentemente. Y
adems, raramente piensan en ello, se limitan a usarlas.
Adems, los programas escritos en C o C++ tienen otras ventajas sobre el resto. Con
la excepcin del ensamblador, generan los programas ms compactos y rpidos. El
cdigo es transportable, es decir, un programa ANSI en C o C++ podr ejecutarse en
cualquier mquina y bajo cualquier sistema operativo. Y si es necesario,
proporcionan un acceso a bajo nivel de hardware slo igualado por el ensamblador.
Otra ventaja importante es que C tiene ms de 30 aos de vida, y C++ casi 20 y no
parece que su uso se debilite demasiado. No se trata de un lenguaje de moda, y
probablemente a ambos les quede an mucha vida por delante. Slo hay que pensar
que sistemas operativos como Linux, Unix o incluso Windows se escriben casi por
completo en C.
Por ltimo, existen varios compiladores de C y C++ gratuitos, o bajo la norma GNU,
as como cientos de bibliotecas de todo propsito y miles de programadores en todo
el mundo, muchos de ellos dispuestos a compartir su experiencia y conocimientos.

También podría gustarte