2008-09-16 14 views

Respuesta

20

cint es el procesador de comandos para el paquete de análisis de física de partículas ROOT. Lo uso regularmente, y funciona muy bien para mí.

Es bastante completo y se lleva bien con el código compilado (que es posible cargar módulos para su uso en el intérprete compilado ...)

editar tarde :: Copiado de un duplicado más tarde porque el cartel en que se las preguntas no parecían querer publicar aquí: igcc. Nunca lo intenté personalmente, pero la página web parece prometedora.

+1

Conozco a varios estudiantes de posgrado en física que hacen la mayoría de sus codificaciones en cint/root, y aunque no siempre tienen cosas buenas que decir que satisfacen sus necesidades de rendimiento y flexibilidad. –

+0

Bueno, es C++ con una capa adicional de complejidad por la necesidad de construir los diccionarios de código binario <--> interperter. Además, el árbol de la clase de raíz es un dolor. Pero cint funciona. Funciona mucho mejor que COMIS en los días de cernlib. – dmckee

+2

@littlenag Decir que la raíz "satisface [nuestras] necesidades" es un poco generosa. El marco es terriblemente defectuoso en varios niveles básicos, y solo sigue teniendo un uso generalizado porque es completamente no modular y, por lo tanto, casi imposible de eliminar. CINT es un excelente ejemplo de algo que debes instalar cuando todo lo que quieres hacer es leer en un archivo de datos. – Shep

2

Hace mucho tiempo, utilicé un intérprete de C++ llamado CodeCenter. Era bastante agradable, aunque no podía manejar cosas como campos de bit o puntería de fantasía. Las dos cosas geniales fueron que se podía ver cuando cambiaban las variables, y que se podía evaluar el código C/C++ sobre la marcha mientras se depuraba. En estos días, creo que un depurador como GDB es básicamente igual de bueno.

+0

¿Qué haría el intérprete cuando encontrara una instancia de plantilla? (u otro negocio de preprocesamiento). ¿Hubo algún nivel de precompilación/preprocesamiento para manejar las plantillas o el preprocesador? –

+0

Sí, todas las cosas y plantillas de CPP formaban parte del idioma que se interpretaba. Bastante agradable. – jfm3

2

también hace mucho tiempo que utiliza una llamada de producto C instantánea, pero no sé que se haya desarrollado más

4

tengo (hace un año) jugó con Ch y nos pareció que estaba bastante bien.

0

Miré hace un tiempo para ver si podía usarlo para las DLL de prueba de caja negra de las que soy responsable. Desafortunadamente, no pude entender cómo cargar y ejecutar funciones desde archivos DLL. Por otra parte, no estaba tan motivado y puede que haya una manera.

0

Hay un programa llamado c-repl que funciona compilando repetidamente su código en bibliotecas compartidas usando GCC, y luego cargando los objetos resultantes. Parece estar evolucionando rápidamente, teniendo en cuenta the version en el repositorio de Ubuntu está escrito en Ruby (sin contar GCC por supuesto), mientras que el latest git está en Haskell. :)

26

NOTA: lo que sigue es más bien CINT específico, pero dado que es probablemente el más widely used intérprete en C++, puede ser válido para todos.

Como estudiante de posgrado en física de partículas que ha utilizado CINT extensivamente, debo advertirte. Mientras lo hace el "trabajo", que is in the process of being phased out, y aquellos que pasan más de un año en la física de partículas suelen aprender a evitarlo por varias razones:

  1. Debido a sus raíces como un intérprete C, no logra interpretar algunos de los componentes más críticos de C++. Las plantillas, por ejemplo, no siempre funcionan, por lo que no te animarás a usar cosas que hagan que C++ sea tan flexible y utilizable.

  2. Es más lento (por lo menos en un factor de 5) que C++ mínimamente optimizado.

  3. Los mensajes de depuración son mucho más crípticos que los producidos por g ++.

  4. de alcance es incompatible con C compilado ++: es bastante común ver código del formulario

    if (energy > 30) { 
        float correction = 2.4; 
    } 
    else { 
        float correction = 6.3; 
    } 
    
    somevalue += correction; 
    

    mientras que cualquier compilador C trabajando ++ se queja de que correcton ha ido fuera de su alcance, CINT lo permite. El resultado es que el código CINT no es realmente C++, simplemente algo que se parece a eso.

En resumen, CINT no tiene ninguna de las ventajas de C++, y todas las desventajas más algunas.

El hecho de que CINT se siga utilizando en absoluto probablemente sea más un accidente histórico debido a su inclusión en el marco ROOT. Cuando se escribió (hace 20 años), existía la necesidad real de un lenguaje interpretado para el trazado/ajuste interactivo. Ahora hay muchos paquetes que cumplen esa función, muchos de los cuales tienen cientos de desarrolladores activos.

Ninguno de estos están escritos en C++. ¿Por qué? Simplemente, C++ no está destinado a ser interpretado. La tipificación estática, por ejemplo, le permite obtener grandes ganancias en la optimización durante la compilación, pero sobre todo sirve para saturar y sobre restringir su código si la computadora solo puede verlo en tiempo de ejecución. Si puedes darte el lujo de poder utilizar un lenguaje interpretado, aprender Python o Ruby, el tiempo que tardes en aprender será menor que el que pierdas al tropezar con CINT, incluso si ya conoces C++.

En mi experiencia, los investigadores más antiguos que trabajan con ROOT (el paquete que debe instalar para ejecutar CINT) terminan compilando las bibliotecas ROOT en ejecutables normales de C++ para evitar CINT. Aquellos en la generación más joven o siguen este ejemplo o usan Python para scripting.

Incidentalmente, ROOT (y por lo tanto CINT) tarda aproximadamente media hora en compilarse en una computadora bastante moderna, y ocasionalmente fallará con las versiones más nuevas de gcc. Es un paquete que cumplió un propósito importante hace muchos años, pero ahora muestra claramente su edad. Al examinar el código fuente, encontrará cientos de versiones obsoletas del estilo c, enormes agujeros en la seguridad del tipo y un uso intensivo de las variables globales.

Si va a escribir C++, escriba C++ como debe escribirse. Si absolutamente debe tener un intérprete de C++, CINT es probablemente una buena opción.

+2

Si bien todas sus quejas sobre cint son perfectamente válidas (y omitió algunas), puede asumir mi palabra de que el intérprete de COMIS para PAW fue mucho peor. También que PAW proporcionó un entorno adecuado de trazado interactivo, solo tenía los problemas de escala que esperaría de un gran estilo de codificación. – dmckee

+1

@dmckee Créanme, me alegra que no estemos trabajando con PAW. Mi punto no es que CINT sea peor que todo, solo que hay muchas cosas que serían mejores. – Shep

+0

¿cómo puede ser más lento? – Sergei

19

Hay proyecto cling del CERN de C++ intérprete basado en clang - es nuevo enfoque basado en 20 años de experiencia en cint RAÍZ y es bastante estable y recomendado por los chicos del CERN.

Aquí está el Google Talk: Introducing cling, a C++ Interpreter Based on clang/LLVM.

+10

Cling realmente funciona al compilar interactivamente, es más un compilador JIT que un intérprete. Además, como "chico del CERN" me siento obligado a comentar sobre "recomendado por chicos del CERN": muchos de nosotros diríamos que la principal lección después de 20 años de ROOT es que el software monolítico (ROOT) se basa en un solo idioma (C++) es un error. Cling es una buena muleta para aquellos que continúan en el buque de guerra C++ como el extremo de todos los idiomas, pero no todos estamos cojeando de CINT en otro intérprete de C++: para el código interpenetrado, puede hacer mucho mejor que C++ , usa Python o Ruby. – Shep

Cuestiones relacionadas