Benchmarking en distintos lenguajes [ Era algo así como cliente en jabber... ]
Daniel Serpell
dserpell en gmail.com
Vie Nov 30 18:23:58 CLST 2007
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.
Más información sobre la lista de distribución Linux