lunes, 5 de noviembre de 2012

C++, Python y Clang

Si sólo pudiera nombrar tres lenguajes de programación, estos serían C++, Python y Java.
Y más que C++ diría C++11, porque creo que es en C++11 donde de verdad despunta este lenguaje de programación.
Y si ya me pongo pedante (más de lo normal, quiero decir), yo diría que lo que de verdad me mola es C++11 - C + Boost. Esto de que C++ deba ser un superconjunto de C es una sandez (si, si, como mi blog).
Y sin las Boost... pues es que no me merecería mucha atención el C++.

Python se sale. Pena de que sea tan lento. El lenguaje es chulo y fácil de aprender. Y es que además tiene mogollón de librerías donde te encuentras casi todo hecho. Por no hablar de lo extensible que es. Creo que Python es el "pegamento" ideal para cualquier proyecto: lo importante lo desarrollas en C++ o Java y las diez mil cosillas que necesitas hacer alrededor las programas en Python.
Ojo, no estoy diciendo que no puedas hacer un señor proyecto enteramente en Python. Digo que a mi me mola usarlo para no tener que recurrir al típico shell-script.

Y en cuanto a Java... pues tengo una relación "familiar" con Java: la familia tenerla, hay que tenerla, pero cuanto más lejos mejor. :-)
Es un lenguaje mediocre, con un rendimiento mediocre... pero es que te lo dan todo hecho.

Yo de mayor (tengo 42 tacos) quiero ser programador de Java: te sientas delante del Eclipse y vas poco más o menos dejando que él mismo vaya generando el código.
¿Qué necesitas una librería para hacer la transformada de Fourier en pasos acíclicos con preponderancia médica (de Médicci, no de Galeno)? No te preocupes: hay una empresa que lo ha hecho y está deseando regalarte su librería por el simple placer de ver cómo la usas.

Es que es la ostia. En C++ en cuanto te sales de sumar y restar te lo tienes que currar. En Python hay algo, pero quizás con algún defectillo que te incordia. Pero es que en Java hay diez librerías, creadas por fabricante de la entidad de Microsoft para arriba y completamente gratuitas. ¡Qué digo!, ¡te pagan por usarlas!

Bueno, me enrollo más que las persianas. Esto de los Blog es un vicio...

El caso es que de unos meses a esta parte vengo queriendo echar un vistazo a Clang, el compilador C / C++ / Objective C / Objective C++ que se está creando como software libre apoyado por empresas como Apple y Google.

Clang no es más que un "front-end" de LLVM, una infraestructura para crear compiladores.

Y el énfasis que están haciendo en LLVM es en que todo sea modular. Por ejemplo, si ya tengo hecho un parseador de código C++, ¿porqué utilizarlo sólo para compilar? Lo puedo usar para generar documentación, para crear automáticamente casos de pruebas, para ayudar a mi editor favorito en el autocompletado de código... para mil cosas que de seguro a la gente se les ocurre.

Y es que una de los motivos de hacer LLVM/Clang, según muchos de sus actuales desarrolladores, es "hacer C++ divertido". Refactorizar debe ser sencillo. En Java (al menos con Eclipse pero seguro que con cualquier IDE también), pinchas en el nombre de una variable, le das a Refactorizar->Cambiar nombre y te cambia el nombre donde has pinchado ¡y en todos los sitios que se usa!. En C++ vas listo para distinguir tu variable de las restantes mil que tienen el mismo nombre.
O la chulada total de Java: seleccionas un trozo de código, le das a Refactorizar->Convertir en función y de forma automática se te crea una función con los parámetros adecuados para el trozo de código señalado... ¡y el tío busca si la puedes usar en más trozos de código similares!  OOOooooohhhh.

Y ahí es adonde quería yo llegar. Si me haces C++ divertido... pues ya quito a Java de mi lista de lenguajes de programación. ¿Qué quiero decir con divertido?:
  • Mensajes de error comprensibles
  • Mensajes de aviso útiles
  • Ambos tipos de mensajes que se me muestren según codifico, no una hora después a la hora de compilar.
  • Herramientas de refactorización
  • Herramientas de documentación automática
  • Generadores de código
  • ... y, bueno, todo lo que los programadores "only-Java" dan por obvio.
Pues todo eso es lo que quieren conseguir los de Clang/LLVM. Y además gratis y libre.

Si puedo utilizaré este blog para apuntarme qué cosas voy aprendiendo de Clang/LLVM y todo su entorno.

Sólo dos apuntes, que esta entrada del blog empieza a ser cansina:
  • libclang: es una librería C para acceder a las partes más importantes de Clang. ¿Que quieres hacer un compilador? Esta es tu librería. ¿Que necesitas generar toneladas de documentación desde el código fuente? Esta es tu librería. ¡¡Y tiene Python bindings!! ¿Para qué narices rebajarte a usar C si lo puedes hacer en Python? :-)
  • libtooling: librería de múltiples componentes para hacer herramientas relacionadas con Clang.
Si me da la gana iré poniendo cosas que voy aprendiendo con Clang & friends.

Si alguien tiene una vida tan triste que ha leído hasta aquí, le dejo una recompensa. Un vídeo de uno de los programadores de Clang, gracioso e instructivo. ¡Y sale Darth Vader!

3 comentarios:

  1. Buff.. Reconozco que he leído una palabra de cada 10, haciendo un gran esfuerzo, ya que eres alguien medianamente importante para mí. Supongo que tendrá su gracia, pero me he quedado pillada con la frase "¿Qué necesitas una librería para hacer la transformada de Fourier en pasos acíclicos con preponderancia médica (de Médicci, no de Galeno)?"... Supongo que el hecho de que sepas el significado de esta frase te hace un empollón de coj..., aunque no quieras admitirlo!!

    ResponderEliminar
  2. ZZZZZZZZZZZZZZZZZZZZZZZ... Ah! qué ya se ha acabado? Madre... qué siesta me he echado a tu salud. Un rollo perfecto para quien lo entienda. Lo siento, hermoso, pero no puedo apreciar tu arte porque no entiendo ni papa. Aunque parece bueno... ummm muy interesante....

    ResponderEliminar
  3. Por cierto, eso de tener que escribir las letritas y los numericos que se ven supermal para demostrar que NO SOY UN ROBOT, es la repipa. No acierto una de cuatro! pero qué gaita!
    Veamos ahora cómo demonios subo este comentario... en qué horita.

    ResponderEliminar