El mar., 16 abr. 2019 a las 22:43, AGTUGO (<agt...@gmail.com>) escribió:

> Hola lista de python,
>
> Realmente no se si es offtopic, pero despu'es de auto-generar c'odigo con
> python para varios lenguajes (entre ellos c++, c, makefiles, Corba IDL,
> etc.) uno se pregunta si se puede automatizar m'as.
> Actualmente utilizo python para parsear codigo c y c++ con ayuda de
> librer'ias, para usarlos como input y generar c'odigo (c++, IDL) usando
> templates, yo en particular uso JINJA2, siento que es lo suficientemente
> simple para no complicar demasiado los templates, no tengo ninguna
> preferencia pero me parece descente. Ahora me gustar'ia no usar templates
> si no hacer un framework para facilitar la creacion de codigo c++.
>

La metaprogramación se usa, normalmente, para facilitar la creación y
mantenimiento de código. Distinguiría algunos tipos:

   - abstracciones: por ejemplo, los ORMs que generan internamente código
   SQL (eg: alchemy)
   - generadores: como SIP que genera *bindings* para conectar python con
   librerías C/C++
   - transpiladores: como typescript cuyo compilador genera código para
   varias versiones de javascript
   - macros: expansiones del lenguaje como los macros que tiene rust
   - DSL (*domain-specific language*): aunque no es metaprogramación, se
   parece. Son comunes en ruby o lua.

Sin duda los transpiladores para javascript son los más usados hoy en día.
Para python podría destacar coconut que puede generar código python para
py2, py3 y pypy. También hay generadores de código C para crear extensiones
python como cython o pyrex.


>
> http://lua-users.org/wiki/CppMetaprogramming #Esto es el ejemplo en lua
> de metapromacion
>
> He usado un poco de lua para experimentar como lo muestra el link, lo cual
> me parece excelente. A pesar de que lua es un gran lenguaje, la
> integraci'on con algunas herramientas en mi caso espec'ifico es una labor
> titanica, me pregunto si hay alguien que este haciendo algo as'i aqu'i o
> conozcan algo similar para python, en cualquier lenguaje. Ahora algunas
> cosas que he hecho en python en modo  de experimentaci'on es definir la
> estructura de mi proyecto, y el codigo que conecta todo antes de empezar a
> escribir todo es auto-generado, no me tengo que preocupar de que las cosas
> no esten conectadas y dise;o pruebas genericas para probar las interfaces
> desde antes.
>

Sin ninguna duda, lua es el mejor lenguaje para metaprogramación.
Desconozco qué herramientas se puedan usar con lua, pero me temo que no es
un lenguaje suficientemente popular. Seguramente tengas más suerte con
algún lenguaje *lispoide *como scheme o racket (mírate fulmar para racket).



> Saben si esta pr'actica es com'un? me parece una forma natural de trabajar
> con lenguajes est'aticos, si cambio el nombre de un archivo no me tengo que
> preocupar de cambiarlo en todos los lugares donde esta referenciado, el
> esqueleto del proyecto se hace al inicio y se hace m'as f'acil a;adir la
> l'ogica despues, a'un tengo problemas por solucionar pero se va facilitando
> con el tiempo.
>
> Realmente me recuerda a algunas IDEs pero con la ventaja de que es mucho
> m'as personalizable.
>
>
En mi opinión, la generación de código está bien para crear el esqueleto de
un proyecto. Pero más allá, la posibilidad de regenerar el código después
implica que no debe alterarse ese código generado, lo que supone una
sobrecarga en la especialización de clases. En el mantenimiento son más
recomendable usar las herramientas de refactorización ya incorporadas en
algunos IDEs.

Herramientas para generar el esqueleto de un proyecto hay muchas. Por
nombrar algunas: angular-cli para aplicaciones angular, giter8 para
proyectos scala o pyscaffold para python. Así mismo, muchos frameworks
incluyen sus propios generadores (eg: django).

Un último consejo: dale una oportunidad a rust y sus macros como
alternativa a C++.

Saludos.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a