Borland C++ 2010: No es oro todo lo que reluce

El que siga habitualmente este blog habrá visto varias entusiásticas entradas sobre el producto C++ Builder 2010, que fue durante varios años mi herramienta de desarrollo preferida (lo que también sabréis si me leéis), llegando hasta el punto de ser un furioso borlander al más puro estilo del fundamentalista linuxero. Luego, cansado de ella, la abandoné.

Y como es habitual cuando transcurre el tiempo, las cosas se van difuminando y perdiendo nitidez. Recuerdo que el abandono se produjo por la enorme cantidad de bugs que el producto tenía (sobre todo con ActiveX y COM), así como porque, año tras año, el producto era prácticamente el mismo pero con más problemas.

Pero el tiempo pasa, uno crece y llega a pensar que no sería para tanto, que quizás la culpa de muchos de los problemas se debieran al Layer 8 y no al producto en sí, máxime cuando no tengo acceso al código fuente de entonces y no sabría discriminar…

Así que uno le echa un tiento al C++Builder 2009, pero no tiene tiempo ni ganas de entrar en profundidad, pese a haber encontrado varios problemas que fueron resueltos por la gente de Embarcadero incluyendo un parche binario a una DLL… Y entonces llega la siguiente versión, la 2010 con unas maravillosas mejoras, como la vuelta a la compilación en segundo plano (algo que creo que se perdió en el paso de la versión 6 a la siguiente), la colocación de los componentes en la barra de tareas (que también se perdió en versiones posteriores a la 6) y el acceso a las entretelas del IDE. Otros detalles sí que son novedades, como el soporte multitáctil o la mejora en los visualizadores del depurador…

***

Ahora debemos cambiar de tercio. Todos sabemos que a fecha de hoy no existe ningún producto decente para el uso de las news, ya sea de pago o gratuito. El Opera tiene sus cosas raras, cuando se le va la pinza la arma bien gorda, el Windows Live Mail es una mierda pinchada en un palo. El Thunderbird quizás sea el que mejor vaya de todos, pero adolece también de varios problemas que no han sido solucionados desde la época en que venía integrado en el navegador Mozilla. Forté Agent no está mal, pero es toda una odisea configurarlo y la interfaz se ha quedado bastante obsoleta y, aparte de ser de pago, al menos los problemas que tiene son siempre los mismos y no presenta comportamientos aleatorios. El MesNews tampoco está mal, pero en mi caso me da infinitos problemas de conexión…

(Por favor, absteneros de comentarios sobre "a mí me va bien" y similares. Te lo puedo garantizar: efectivamente, "a ti te va bien", pero eso no quiere decir que mañana te la líe parda, y si no, tiempo al tiempo.)

Añadamos que en MAC no existe ningún cliente que se precie, todos son prácticamente basura. Por lo tanto llevo bastante tiempo con la idea de hacer un producto conforme a mi gusto, y sé que hay gente que lo está esperando con beneplácito. Así que hace como cosa de un mes me lié la manta a la cabeza y me puse en serio con lo que será el zxNewton… y entonces comenzó una etapa de mucho trabajo que hizo que apenas pudiera dedicar tiempo al programa ya que prácticamente todo mi tiempo libre se iba en trabajar.

No obstante algo hice, como bien sabe la gente de las News de Lechado…

***

… Y entonces volví a descubrir por qué había abandonado C++ Builder, porque fue con este producto con el que me decidí a hacerlo, ya que es muy posible que futuras versiones (no my lejanas) funcionen también en MAC y Linux. Podía haber elegido QT, pero parece ser que en MAC da muchos problemas, así que me decidí a hacer dos códigos fuentes: C++Builder para Windows y aprender a programar en MAC nativo en Objetive C y luego duplicar el código.

¿Por qué C++Builder y no MFC? Pues porque el primero es como .NET pero en C++ [casi] de verdad. Y porque la VCL ha evolucionado hacia algo bastante potente…

Por ejemplo, la VCL tiene un componente que se llama TActionManager que en conjunción con otros permite una personalización completa del programa. Puedes mover barras de herramientas, cambiar de sitio botones, añadir/quitar elementos, todo ello ya hecho con soltar tres o cuatro componentes en la ficha y ser un poco cuidadoso a la hora de codificar.

Otro aspecto que me mola es que soporta herencia visual, puedes heredar una ventana de otra sin muchos aspavientos ni complicaciones, y encima es prácticamente imposible romper la sincronía entre el editor visual y el de código.

Más: no usa el registro si no quieres, puedes guardarlo todo en ficheros en el lugar que quieras. La jerarquía de objetos es muy limpia y coherente, y todos los componentes son guardables a disco sin muchos aspavientos.

Pero eso es la teoría. Os cuento mis problemas. En Windows Vista x64 el editor de código no funciona muy bien, no formatea el código de forma automática, a veces se hace la picha un lío con los cierres de los paréntesis. En Windows 7 x64 el comportamiento del editor es algo más estable, pero tiene sus cosas.

El equivalente del IntelliSense muchas veces no funciona igual que en Visual C++, y cuando lo hace es lento de cojones, y no existe la posibilidad de usar el Visual Assist X o similar.

La ayuda es una mierda. Ni la online ni la local tienen apenas contenidos, con muchos problemas de enlaces que te llevan a la parte de Delphi o que contienen elementos mezclados de los dos lenguajes. Se nota que está compuesta desde el código fuente apenas comentado…

Si eso fuera poco, el IDE es incapaz de enlazar con el elemento adecuado. Si bien a esto ya nos tiene acostumbrados la MSDN y el Visual Studio, en C++ Builder es todavía peor, mucho peor (y yo que pensaba que no podía serlo).

Hay opciones del IDE que no funcionan, es decir, elijas la opción que elijas, el IDE va a la suya, y cuando vuelves a mirar está la que no has elegido.

En depuración el IDE peta sistemáticamente. Bueno, no peta, se queda autista y tienes que matarlo. No es que pase mucho, pero pasa una vez cada hora o así. Cuando pones un punto de interrupción y vas a continuar, siempre te pregunta si quieres seguir porque detecta que el código fuente ha sido modificado sin haberlo sido.

***

Eso en cuanto a elementos genéricos del entorno. En elementos específicos que he usado en el programa, tenemos más problemas, en este caso dentro de la VCL. Para que os hagáis una idea: tengo un form padre que es la que guarda el estado de la ventana, tamaño y demás. De ahí heredan las demás ventanas. En la principal hay un TActionManager que controla toda la UI, los dockings y la personalización. La parte principal es un TPageControl anclado a la ventana marco que permite pestañas. Cada pestaña es un control heredado de TFrame y que es el que realmente tiene todo el comportamiento de la aplicación.

Los marcos son como ventanas pero sin ventana, de forma que puedo anclarlos donde quiera ya que deben ser hijos de una. Es decir, si el usuario quiere que un marco (por ejemplo el del correo) esté flotando como una ventana independiente, yo creo la ventana y saco el marco de donde esté anclado y lo pongo como hijo de la misma. De esta forma no hay destrucción ni creación de nada, sólo movimiento de componentes.

Pues bien, todo esto, que está documentado y no es nada fuera de lo ordinario, presenta los siguientes problemas (quizás alguno se debe a desconocimiento personal, y si es así y la gente de Embarcadero me responde, así lo corregiré):

Las ventanas no responden a las órdenes de Docking, ya sea automático o manual. Es decir, sacas un elemento de un lugar para acoplarlo a otro y lo más que ocurre es que se quede flotando si te deja desacoplarlo. Esto es así para al menos el Frame, los elementos en el interior del mismo y la Toolbar del programa. En el caso del Frame ni siquiera deja sacarlos, y lo único que puedes hacer con la Toolbar es dejarla flotante y ya no la puedes volver a anclar a ningún lado.

El TActionManager, pese a volcarse y cargarse de disco (veo el fichero y su interior), no recupera la UI modificada, ni siquiera los botones cambiados con el asistente. Lo guardas modificado y lo cargas con los valores por defecto.

Hay componentes que al ponerlos dentro de un Frame en tiempo de ejecución generan una excepción y petan la aplicación.

***

¿Os parece poco? Pues sólo llevo con el C++Builder unas 10 horas. Imaginaros cuando lleve varios meses. Y eso que ya le ha salido un parche, que he aplicado pero que apenas ha arreglado nada.

Me da pena, mucha pena, pero la cruda realidad es que el producto continua siendo tan malo como cuando lo abandoné en su versión 4… Bueno, tan malo no, peor, ya que por lo menos en aquellos años el IDE no fallaba ni petaba ni hacía cosas raras… En fin, que como no se pongan las pilas… Yo creo que voy a abandonar… y empezar de nuevo con QT, MFC u otra solución que se me ocurra…

6 comentarios en “Borland C++ 2010: No es oro todo lo que reluce”

  1. jejejeje, que tiempos me has recordado, rfog….

    Yo usaba (hace mucho tiempo me desenganché) como lector de news el XNews, y posteriormente el BNR.

    El Xnews me gustaba mucho mucho mucho, no se si lo has probado. y el bnr….pues para descargas de grupos binarios…..

    Qué tiempos aquellos 😀

  2. No se ni como Google me trajo aquí, vengo desde el futuro… coñas aparte, uso C++Builder 2010 (antes con Windows 7 y actualmente con Windows 8), y viéndote describirlo creo que usamos productos totalmente diferentes. También uso otras versiones más nuevas, pero eso es otra historia..

    Ni aun con intención puedo encontrar tantos problemas como has encontrado tu en tan corto espacio de tiempo. Que no digo que no los haya, como casi en cualquier IDE de vez en cuando.

    Pero aun si tuviera todos esos problemas que comentas (que yo al menos no los tengo), siempre preferiré un compilador nativo un millón de veces por encima de .NET, aunque fuera el peor de la tierra (que este no lo es).

  3. j0seant, bienvenido desde el futuro, je je.

    No sé cuántos parches han salido desde que yo escribí esto, pero en su momento tuve constancia por parte de Embarcadro de que los fallos que comento existían, y de hecho al final creo que fue otro habitual de por aquí el que me dio la solución: olvídate de construir interfaces complejas con la VCL, que hace más agua que un río sin presa.

    De hecho, en otro foro, reconstruyó mi interfaz con componentes más sencillos que los que yo estaba usando, y funcionó.

    No obstante, ¿estás usando los componentes que cito? ¿Con una interfaz compleja y que se guarde/cargue de disco?

    No es la primera vez que me encuentro eso de “a mi no pasa” y cuando he tenido la oportunidad de juntarme con el que lo ha dicho… hemos visto que “a ti sí te pasa” y encima ni te has dado cuenta de ello.

Deja un comentario

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