Clipper Compatible Compiler (C3)

Seguí con entusiasmo el desarrollo de C3 (Clipper Compatible Compiler), desde 2003, por aquella época, incluía un compilador para DOS en modo real (dc3.exe), totalmente compatible con el de Clipper 5.2/5.3, era más moderno, y me daba la impresión de ser más rápido compilando que el original. Además los archivos objeto que se generaban eran idénticos a los del original, por lo que a efectos prácticos eran intercambiables. Finalmente esos objetos se enlazaban con las bibliotecas originales de Clipper usando el enlazador DOS que usáramos con Clipper.

Era un trabajo muy meritorio, pero titánico si consideramos que se llevó a cabo por un solo hombre, Bruno Cantero, el que fuera uno de los desarrolladores principales en Harbour.

En seguida se agregó un compilador para Win32 basado en consola (c3.exe), que tenía la capacidad de generar ejecutables para Win32, basados en las librerías ccc32.lib, que reemplazaba a clipper.lib y extend32.lib que hacía lo propio con extend.lib. En este escenario, se enlazaba con Turbo Linker de Borland que venía incluido en la distribución de C3.

Además se incluían las versiones para Windows de los drivers RDD (Replaceable Database Drivers) NTX (Clipper), DBF/NDX (dBase), CDX (FoxPro), DEL (campos delimitados) y SDF (registros de longitud fija).

Se iría manteniendo activamente, con diferentes revisiones, el lanzamiento de la versión 2.0 en 2005, y sus correspondientes actualizaciones hasta 2007. Sin embargo a partir de ahí, el proyecto entraría en una fase de parada técnica, hasta que 7 años después, se lanzaría la versión 3.0.

Esta versión 3, añade el soporte nativo Win64, esto quiere decir que todas las herramientas se encuentran disponibles para Win32 y Win64, pero que además permiten generar código de 32 y 64 bits según nos convenga. En este caso, el enlazado se efectúa con Microsoft Linker, también incluido en la distribución.

El punto de entrada es el IDE, con una apariencia similar al de Delphi 7 o Lazarus, pero con una funcionalidad bastante reducida. Así, mientras que para el diseño de formularios de manera visual, es más que adecuado, a la hora de editar código, adolece de falta de autocompletado, o mayores facilidades en la navegación por el código y la gestión de proyectos. A cambio, está disponible tanto en castellano como en inglés, con tan solo cambiar una opción.

La instalación del paquete completo es realmente compacta, conformándose con apenas 100 Mb. en disco, que incluyen las versiones x86 y x64. Esta cantidad se ve reducida a menos de 70 Mb. si prescindimos de los ejemplos. En cuanto a memoria necesaria, bastan 64 Mb. libres para poder comenzar a desarrollar, una cifra que poco a poco irá en aumento a medida que aumentemos la complejidad. No obstante, tanto el propio C3 como los programas generados, tiene requisitos de hardware tan asequibles, que lo hacen apto para casi cualquier PC.

La ayuda es bastante escasa, y muy incompleta. Si lo sumamos a las carencias del IDE, vemos que es un gran impedimento para desarrolladores que no estén familiarizados con Clipper Compatible Compiler (C3), o al menos con xBase.

La librería de GUI inspirada en la VCL de Borland, es muy intuitiva, y funciona muy bien. Quizás es porque me la conozco bastante. En cuanto a documentación, la cubre al completo, pero sin demasiado detalles.

El compilador, hace su trabajo a una buena velocidad, así que en este sentido resulta muy productivo. la razón estriba en que a diferencia a otros proyectos, C3 genera directamente el código objeto. Es decir, no genera código por ejemplo C, que luego deba ser compilado.

La siguiente sorpresa agradable, viene cuando vemos lo competitivo que es el tamaño de los ejecutables resultantes. Un ejecutable sencillo con GUI, está entorno a los 700 Kb. para la compilación Win64, y 500 Kb. para la compilación Win32. La cifra baja a menos de 250 Kb. para un programa de consola. Recordemos que Clipper/C3, siempre han generado p-code, por lo que en ese espacio, se incluye el runtime. Si recordáis, en los años 90 con el auge de Clipper, éste destacaba precisamente por todo lo contrario. Cuando un ejecutable en un lenguaje normal, podía ocupar 15 Kb., en Clipper eran 10 veces superior.

Parece que ahora C3 invierte esa linea, con unos tamaños que son todavía muy inferiores a los de Delphi o C++ Builder, tanto si comparamos x86, como x86-64. El rendimiento de las aplicaciones que con él generemos, es aparentemente muy bueno. A nivel de velocidad de carga, y tiempo de respuesta de la interfaz, se ven muy ágiles.

En su página de descargas, tienes una versión de evaluación, que es exactamente igual a la versión comercial, con la salvedad que los ejecutables resultantes, sacan un mensaje indicando que han sido generados con la versión de prueba.

La versión comercial sale por 180€, un precio competitivo para los cada vez menos abundantes profesionales de xBase. Sin embargo, que el IDE, y la ayuda no den una funcionalidad completa, es el principal lastre a la hora de atraer nuevos desarrolladores.

Clipper Compatible Compiler (C3)

20 comentarios en “Clipper Compatible Compiler (C3)”

  1. Maemía, el Clipper…. desde el 94 lo tengo olvidado y no había vuelto a saber más de él. Me sorprende que aún haya alguien que lo eche de menos. Tuve que enlazar un programa Clipper 5.0 con una librería escrita en C para leer y escribir en un cacharro vía bus 485 y fue cualquier cosa menos fácil.

    No seré yo el que llore por ese lenguaje, con IDE o sin él.

  2. Javier Gutiérrez Chamorro (Guti)

    Recuerdo haber hecho mis pinitos también José Luis. Por la época de Clipper 5, éste estaba compilado con Microsoft C 5.1, así que las funciones C, sólo podían generarse con ese entorno que ya era obsoleto. Tendría cerca de 10 años de antigüedad, pero necesitabas tenerlo si o si.

    No sería hasta la 5.3, la última versión, que decidieron actualizar, en aquel momento optaron por MSC 8, es decir Visual C++ 1, una herramienta que no era puramente DOS como lo era Clipper.

    A parte de todo eso, si, las conversiones de tipos de datos, la dificultad de depurar en esos entornos mixtos, … Nada que luego no se repitiera al integrar ASP y VisualBasic, Visual Basic y Visual C++, etc.

  3. Your name (required)

    Respecto a C3Compiler, yo he realizado algunos programas que funcionan perfectamente, el ultimo que he realizado ha sido una base de datos en la que a demas del texto se pueden incluir imagenes.
    Referente a la documentación, pues si que es bastante pobre, ya que contiene varias funciones que no estan documentadas y algunas de ellas no sabemos ni que existen, ya que a veces encuentras alguna de pura casualidad.
    yo creo que Bruno deberia de especificar todas las funciones que trae el C3, aunque estas no esten documentadas,
    Un saludo
    Fraguibo

  4. Javier Gutiérrez Chamorro (Guti)

    Gracias por tu comentario.

    Efectivamente es lo que pretendía decir, con mejor documentación, más desarrolladores apostarían por él.

    Por supuesto el rendimiento es bueno con bases de datos, pero a nivel de propósito general, como se ve, es mejorable. Una pena, porque el desempeño general de la herramienta mejoraría muchísimo. Puedes leer aquí, la prueba que hice con Sieve y C3.

  5. Hola javier,

    estoy interesado en C3compiler, pero no me responden en la página oficial. Le agradecería su experiencia y conocimiento sobre esta herramienta. Quiero pasar un aplicación de TPV y no sé si esta herramienta gestiona bien la comunicación con: balanzas, visores, impresoras termicas, .. Y si la curva de aprendizaje no es demasiado larga. La idea es no empezar en una herramienta y que luego encuentre bugs o errores que hagan que tenga que abandonar.
    He visto el foro y tampoco veo mucho movimiento.

    Muchas gracias, un saludo

  6. Javier Gutiérrez Chamorro (Guti)

    Bienvenido Francisco. Habría que saber en qué lenguaje y de qué manera tienes desarrollada tu aplicación de TPV actual. En todo caso creo que lo mejor es que con la versión de evaluación que tienen en su web, así como la documentación online le eches un vistazo tu mismo.

  7. Javier Gutiérrez Chamorro (Guti)

    Bienvenido Carlos. Por supuesto, además de los archivos nativos de Clipper, la clase TDSSQLite permite acceso a datos SQL usando SQLite.

  8. Javier Gutiérrez Chamorro (Guti)

    Carlos Castillo, la clase TDSSQLite no tiene mucho misterio ya que en esencia encapsula las llamadas a la API C de SQLite. Creo recordar que en el foro oficial habían publicado un ejemplo, pero ahora está inaccesible. Como no tiene demasiada actividad verás que cuando se reactive no te cuesta de encontrar.

  9. Buenas tardes. Me dio mucha alegría saber que con C3 podría hacer cosas que en el pasado hice eb Clipper 5.2, yo soy profesor de algebra nada mas. Me gustaría que me pudieran colaborar información de donde puedo encontrar procedimientos de ejemplo, elaboración de funciones y codigo pito *.prg, como se compila etc… la versión que pude bajar no tiene activa la opción “Show Source Code” por lo tanto no puedo probar nada. Gracias Javier

  10. Javier Gutiérrez Chamorro (Guti)

    Bienvenido Elver Marin. En 2014 fui de los primeros en hablar acerca del compilador compatible Clipper C3, un proyecto que llevaba tiempo siguiendo y que me dejó maravillado. No sólo por su calidad, sino por ser el esfuerzo de un sólo hombre (B. Cantero). Lo cierto es que empezó notablemente fuerte, y por algún motivo a partir del 28/08/2016 quedó abandonado en la versión 3.0, o al menos sin actualizaciones. El foro del proyecto/producto apenas registra actividad, no obstante, ese sería el lugar en donde encontrar soporte y ejemplos.

  11. Buenas tardes Javier Gutiérrez, es curioso, fui programador de Clipper hasta 5.2 de ahi ya no programe mucho, actualmente estoy dando mantenimiento a una antigua aplicación hecha en Dbase IV todavía DOS, pero no funciona en 64 bits; estuve probando Harbour 3.0.0 y el desempeño en reportes es muy baja comparada con la rapidez de los mismos reportes bajo Dbase, pregunta Clipper C3 maneja abrir archivos a bajo nivel con funciones como FOPEN, FCLOSE, FREAD, FGET, etc., vi la documentación que viene en el trial y realmente no habla mucho del tema, la intención es pasar un Sistema a 64 bits pero manteniendo los datos como archivos del tipos XBase. Le veo buena pinta a Clipper C3.

    Saludos.
    Carlos Gámez

  12. Javier Gutiérrez Chamorro (Guti)

    Bienvenido Carlos Gámez. Entiendo que lo que estás buscando es algo como:

    ReadFile
    Sintaxis: ReadFile( , <@cBuffer>, , ) -> lExito
    Argumentos: es el manejador del archivo.
    es la variable de tipo cadena donde se almacerá el contenido leído.
    es el tamaño de la variable cBuffer.
    es la variable donde se almacenará la cantidad de bytes leídos.
    Devuelve: .T. si la función tuvo éxito o .F. en caso contrario.
    ReadFile() lee datos desde el archivo especificado por nHandle.
    Ejemplo:
    ReadFile( nFile, @cBuffer, 1024, @nBytes )

    En todo caso mi consejo es que te descargues la versión de prueba, y le eches un vistazo. En caso de dudas, la gente de C3 ofrece un foro de soporte.

  13. Muchas gracias Javier!!! Pregunta ademas de C3 Compiler habra otras herramientas XBase para 64 bits, revise Xailer pero usan Harbour y la verdad por el desempe;o de Harbour omito revisar Xailer.
    Saludos y gracias nuevamente por la información!

  14. Javier Gutiérrez Chamorro (Guti)

    Gracias a ti Carlos Gámez. Desafortunadamente no estoy familiarizado con ellos. El último que probé fue Alaska Xbase++ hace unos cuantos años, y no recuerdo si soportaba x64.

  15. Buenas Javier,
    Tengo un programa en CLIPPER 5.2 y lo quisiera compilar para que corra para 64 bits.
    Estoy probando el C3 Compile demo para hacerme una idea del producto pero no acabo de entender como se compila el programa viejo. ¿Como lo incluyo en el proyecto?
    Esto: SETPOS(1,1); DISPOUT(“Hola Mundo”) ¿Funciona?
    El sistema viejo escribe en la consola o un formulario ficticio de 80 columnas x 25 filas. El sistema nuevo tiene un formulario que nada tiene que ver con la consola.
    No entiendo como funciona el paso de 16 a 64 bits.
    Puedes ayudarme o donde puedo encontrar documentación.
    Saludos y gracias anticipadas.

  16. Javier Gutiérrez Chamorro (Guti)

    Bienvenido Antonio Masana Lopez. En principio C3 no te permite hacer lo que pretendes. Es decir recompilar un programa DOS para consola Win64. Sí que te permite recompilar ese programa DOS, o te permite desarrollar para Win32. En todo caso, el foro de C3 Compiler es el mejor medio para exponerlo.

  17. Gracias por responder.
    ¿Hay alguna forma de hacer correr los programas e CLIPPER 5.2 en Windows sin necesidad del DosBox o similar?
    Gracias.

  18. Javier Gutiérrez Chamorro (Guti)

    Por supuesto Antonio Masana Lopez. Si usas una edición de 32 bits de Windows, tienes incorporada la emulación DOS, por lo que podrías ejecutar tu programa compilado con Clipper sin ningún problema. Si no es así, te tocará virtualizarlo o emularlo de algún modo.

Deja un comentario