Hola! El Thu, Nov 29, 2007 at 01:47:57AM -0300, Patricio Morales escribio: > [...] > Hace poco tiempo leí en una revista,haciendo una comparativa entre los > lenguajes más usados por los > programadores,Los más usados Java,Visual Basic,Delphi,pasando por C/C++,y > adivinen cuales son los > menos usados
Este es un estudio bastante completo (como todos los estudios del caso, puede tener algo de sesgo): http://www.tiobe.com/tpci.htm La tabla resumen indica: Object-Oriented Languages 54.8% +3.0% Procedural Languages 42.0% -4.2% Functional Languages 1.8% +1.0% Logical Languages 1.4% +0.1% Claramente, la gente programa en su mayoría en lenguajes orientados a objeto (donde se entiende esto por un lenguaje en que es "natural" utilizar programación orientada a objeto), pero el porcentaje de utilización de C es muy alto. > [La gracia de LISP/Scheme es que (particularmente este ultimo) son > > lenguajes enormemente expresivos (mucho mas que el OOP mas refinado, > > hacetela de call-with-current-continuation algun dia de estos, o el > > truquillo de la funcion que retorna una funcion que incorpora datos que se > > dieron al construirla, o...), y la manera de programar "de a deveras" en > > estos lenguajes es /definirse/ uno un lenguaje ad hoc para el ambito a la > > mano, y luego aplicarlo... y en Scheme es trivial montarse la maquinaria > > OOPistica encima del lenguaje, si quieres. Claro, programar de esa forma > > es *aun* mas duro que OOP.] Bueno, con C++0x se expandirá un poco el ámbito de la meta-programación, haciendo un poco más fácil hacer DSL(-ibraries) en C++, yo a eso le veo bastante futuro (ver "blitz++", buscar en google por "active libraries"). El problema es que la meta-programación en C++ se escribe en un lenguaje funcional, por lo que es difícil para los novatos. Un ejemplo, en C++ actual: // Define caso X^N arbitrario template <int X, int N> class pow { public: static int value(){ return pow<X,N-1>::value() * X; } }; // Define caso X^1 template <int X> class pow<X,1> { public: static int value(){ return X;} }; Eso define una función "pow", que luego se utiliza así: k = pow<10,7>::value(); La gracia es que se le explica al compilador cómo realizar el cálculo, el que se realiza en tiempo de compilación y no de ejecución. Daniel.