PDF de programación - Análisis comparativo de eficiencia de lenguajes de programación

Imágen de pdf Análisis comparativo de eficiencia de lenguajes de programación

Análisis comparativo de eficiencia de lenguajes de programacióngráfica de visualizaciones

Publicado el 26 de Abril del 2018
421 visualizaciones desde el 26 de Abril del 2018
852,2 KB
11 paginas
Creado hace 6a (25/09/2013)
Análisis comparativo de eficiencia de lenguajes de programación

Tymoschuk, Jorge Pablo

Universidad Tecnológica Nacional, Facultad Regional Córdoba

Abstract

sistema

operativo)

variándose

El objetivo de este estudio es realizar un
análisis comparativo de la eficiencia de diferentes
lenguajes para ejecutar un algoritmo determinado.
La tarea se ejecutará en la misma plataforma
(equipo,
los
lenguajes. Asimismo evaluarán también variantes
por el uso de distintas máquinas virtuales y/o
versiones (interpretado/compilado) para un mismo
lenguaje. El equipo utilizado es una PC con placa
madre AMD Athlon™ II X2 240 con procesador
2.81 GHz, 1.75 GB de RAM. El sistema operativo
es Microsoft Windows XP, Profesional, versión
2002, Service Pack 3.

Los lenguajes/entornos/variantes utilizados los
siguientes:

Java, NetBeans 7.3.1, JDK 1.6, JVM jrockit

Java, NetBeans 7.3.1, JDK 1.7, JVM default

C++, Microsoft Visual Studio .NET 2003

C++, NetBeans 3.7.1

Python , PyCharm 2.7.1, python.exe

Python , PyCharm 2.7.1, pypy.exe

Smalltalk, Squeak-4.3



Palabras Clave

Eficiencia, algoritmo, Java, C++, Smalltalk,
Python



Introducción

A continuación transcribo un

párrafo de la Unidad 1 del programa
actualmente vigente en la asignatura
Paradigmas de Programación, UTN FRC.
(Cursiva)

Lenguajes de programación


4.

Para obtener una solución utilizando un
determinado paradigma se necesita de un
Lenguaje de Programación. Pero con



lenguajes de programación

demasiada frecuencia, los lenguajes son
seleccionados por razones equivocadas
tales como: el fanatismo ("... es genial"),
los prejuicios ("... es una basura"), la
inercia ("... Es demasiado problema para
aprender"), el miedo al cambio ("... es lo
que mejor sabemos hacer, con todos sus
defectos"), la moda ("... es lo que todos
están utilizando ahora "), las presiones
comerciales (" ... con el apoyo de MM. "),
conformismo (" nadie fue despedido por la
elección de ... "). Tales influencias sociales
y emocionales son a menudo decisivas y
reflejan un triste estado del software.

En el punto: 4.2 Criterios de evaluación de
los
se
describen 14 (catorce) criterios a tener en
cuenta a la hora de decidir que lenguaje
usar: 1 – Legibilidad / 2 – Codificación / 3
– Fiabilidad / 4 – Escala / 5 –
Modularidad / 6 – Reutilización / 7 –
Portabilidad / 8 – Nivel / 9 – Eficiencia /
10 – Modelado de datos / 11 – Modelado
de procesos / 12 – Disponibilidad de
compiladores y herramientas
/ 13 –
Familiaridad / 14 – Costo.

El punto 9 - Eficiencia es el que abordo
en el presente estudio. Que este punto sea 1
de 14 a considerar en los criterios de
evaluación deja en claro lo acotado del
presente trabajo.

Es interesante transcribir aquí lo que dice
el párrafo del material de la cátedra PPR
respecto al punto 9 – eficiencia, sobre todo
porque las conclusiones de este trabajo no
avalan lo allí expuesto:

9 – Eficiencia ¿Es el lenguaje capaz de ser
aplicado de manera eficiente? Algunos
aspectos de la programación orientada a
objetos implican overheads en tiempo de

1



o

llamadas

mediante

ser altamente eficientes,

ejecución, tales como las etiquetas de
clase
y distribución dinámica. Los
controles en tiempo de ejecución son
costosos (aunque algunos compiladores
están dispuestos a suprimir, por cuenta y
riesgo del programador). La recolección
de basura también es costosa. Además se
debe
tener en cuenta que el código
interpretativo es aproximadamente diez
veces más lento que el código de máquina
nativo. Si las partes críticas del programa
deben
el
lenguaje les permite estar sintonizados
para recurrir a la codificación de bajo
nivel,
a
procedimientos escritos en un lenguaje de
bajo nivel.

El algoritmo que trataremos para medir la
eficiencia de los diferentes lenguajes fue
expuesto por el Ing. Valerio Fritelli en el
curso Fundamentos del Lenguaje Phyton
– Nivel I, 48 hs reloj, dictado entre el 19
de febrero y 7 de marzo del corriente año.
El algoritmo, llamado Prob2_SUM debía
ser resuelto en forma individual por c/u de
los participantes.
El nombre del algoritmo Prob2_SUM
hace referencia a la suma de 2 términos.
Sucintamente se trata de determinar si un
número cualquiera está constituido por la
suma de 2
siendo ambos
elementos de un conjunto acotado de
valores.

Elementos del trabajo y metodología.

Los elementos utilizados son los descriptos
en el Abstract. Utilizando los lenguajes allí
citados(Java, C++, Python, Smalltalk) y
sus entornos, se programa el algoritmo
Prob2_SUM en c/u de estos lenguajes
ellos siguiendo la metodología de 5 etapas
que describo a continuación:


términos,

1) Carga de un arreglo numérico de

100000 elementos (arregloV) a
partir de la lectura de un archivo de
texto (lote01.txt). Cada línea
contiene un número (arreglo de



caracteres, sólo dígitos), único, sin
repeticiones.


2) Recorrer el arregloV e insertar
cada número en un diccionario
(tabla hash). El número en cuestión
era la clave, su valor asociado no
tenía importancia.

3) Informar cuales de los términos de
una lista de 9 elementos enteros
satisfacían el requisito 2_SUM,
esto es, si se cumplía que:



a) términoLista

termino1Arreglo
termino2Arreglo, siendo que

b) termino2Arreglo

=
+

=

c) Dado

que

terminoLista – termino1Arreglo
termino1Arreglo
necesariamente existe en
la
tabla por su carga desde el
arregloV, resta comprobar que
termino2arreglo también existía
en dicha tabla.



Normalmente esta estrategia se
implementa mediante un par de ciclos
anidados. El ciclo externo recorre la lista
de los 9 números, para c/u de ellos el ciclo
interno va tomando sucesivos términos de
arregloV, y efectúa los pasos b) y c) arriba
descriptos.

El ciclo interno se interrumpe si
termino2Arreglo existe en la tabla (Pueden
términos de
existir varios pares de
arregloV que
requisito
2_SUM). Si ningún par
el
requisito, el ciclo
recorre el
arregloV hasta el fin.


esta condición se expresa mediante:

„1‟
„0‟



requisito cumplido
requisito no cumplido.

El resultado del cumplimiento de

satisfagan el

satisface

interno


-
-



Como la lista es de 9 elementos a
verificar, el resultado se almacena
en un arreglo de 9 elementos tipo

2



„1‟

por

char: el casillero correspondiente a
la posición del número en la lista
contendrá
requisito
cumplido, „0‟ en caso contrario.
Para el caso concreto con el que
trabajó esa lista de 9 elementos el
resultado correcto es “101001110”.

Hasta aquí es el trabajo pedido en el
curso Fundamentos del Lenguaje
Phyton. Sin embargo, esta no es la
única metodología o estrategia para
problema. Una
resolver
alternativa
es
el
termino2Arreglo
el propio
arregloV. Como el arreglo no fue
cargado en ningún orden de
secuencia
utilizar
búsqueda lineal, y hacer esto en un
arreglo de 100000
elementos,
recorriéndolo muchas veces, tantas
como
candidatos
termino2Arreglo
vamos
obteniendo, es sin mucho análisis
una pésima opción. Una alternativa
mucho mejor es:

deberíamos

sucesivos

buscar

en

el



4) Ordenar arregloV utilizando

quickSort, por ejemplo.

5) Buscar el termino2Arreglo en

el

es

he

ahora

descrito

arregloV usando búsqueda binaria.

Hasta
la
metodología o estrategia para llegar
al resultado pretendido, pero no he
dicho nada de lo relacionado a la
medición de la eficiencia, que en
definitiva
resultado
pretendido. Es hora de hacerlo:
En cada uno de los lenguajes
utilizados existen bibliotecas o
clases que con comportamiento
relacionado con tiempo y/o fecha.
Esto hemos usado, no fue
necesario un observador externo
provisto de un buen cronómetro.
De cualquier manera, los tiempos a
computar necesitaban precisión de
milisegundos, un observador
humano serviría de poco. La

metodología utilizada o secuencia
de pasos constaba de las siguientes
etapas:


a) Registro del tiempo de

inicio de la etapa.

b) Ejecución de la etapa.
c) Registro del tiempo de fin

de la etapa.

d) Cómputo del tiempo neto

(fin – inicio).

e) Exhibición del tiempo neto.
f) Acumulación del tiempo

neto de la etapa para obtener
el tiempo total.

Los resultados obtenidos por los



Resultados

procesamientos realizados están contenidos
en las 5 captures de pantalla siguientes.

Capture 1 - Lenguaje Python, entorno
Pycharm 2.7


Se realizan 2 procesamientos:
a) Utilizando plataforma Python
3.3.3, modalidad interpretado.
El tiempo total registrado es de
7283,1513 milisegundos


b) Utilizando plataforma PyPy

1.9.0, modalidad compilado. El
tiempo total registrado es de
1497,4249 milisegundos

Se realiza un único procesamiento.



Capture 2 – Lenguaje Smalltalk, entorno
Squeak 4.3, modalidad interpretado.

El tiempo total registrado es de 16584
milisegs.

Capture 3 – Lenguaje C++, entorno
Microsoft Visual Studio (Compilado)

El tiempo total registrado es de 655
milisegundos



Se realiza un único procesamiento.



3



Capture 4 – Lenguaje Java, entorno
Netbeans 3.7.1


Se realizan 2 procesamientos:
a) Utilizando plataforma JDK 1.7
con máquina virtual default. El
tiempo total registrado es de
312 milisegundos


b) Utilizando plataforma JDK 1.6,
c
  • Links de descarga
http://lwp-l.com/pdf10677

Comentarios de: Análisis comparativo de eficiencia de lenguajes de programación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad