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