martes, 7 de agosto de 2007

Lenguajes de escript

Mejor llamados lenguajes de script (para algo soy español y me gusta el animé XDD). Simplemente voy a dar un pequeño artículo sobre los lenguajes de escript. Y no, absteneos fanáticos de Perl, Ruby, Python, Lisp, Lua, etc; porque aquí trato hablar con objetividad y sin prejuicios, y luego están ya las preferencias personales.

Los lenguajes de escript son lenguajes guays porque en general son fáciles de aprender y puedes hacer cosas grandes con ellos. El único inconveniente que tienen es que no son tan rápidos como uno compilado: C/C++, Pascal, Cobol... Sin embargo, lo ideal sería mezclar lenguajes de escripts con lenguajes compilados, pero con cabeza. Esto no quiere decir que no se puedan hacer juegos con los lenguajes de escript. Incluso he visto juegos completo 3D tan sólo hechos con lenguajes de escript. Eso sí, a costo de chupar mucha CPU :-P.

Voy a escribir de python, mi preferido, escribiendo un código que he hecho para este:


def recursiva(numero):
if numero > 0:
recursiva(numero - 1)
else:
print "Se acabó"


>>recursiva(4)
Se acabó

Sin embargo, hay una particularidad de python que es paranoico con la seguridad en cuanto a memoria.Tiene un límite de nivel de profunidad de recursión, dependiente de la plataforma, para evitar infinita recursión si se produce una sobrecarga de memoria en la pila de C, las recursiones, y python no pete.

Por ejemplo, en mi caso al hacer esto:

>>recursiva(1500)
(...)
RuntimeError: maximun recursion depth excedeed

La solución es bastante fácil: tenemos que importar el módulo del sistema, sys. Y usar estas dos funciones:

sys.getrecursionlimit() #Devuelve el número máximo de recursiones. Con esto sabremos el límite exacto.
sys.setrecursionlimit(límite) #Ponemos nosotros el número máximo del nivel de recursión.

Otra forma es hacer una captura de excepciones, pero a nosotros nos interesa aumentar el número máximo de recursiones para más libertad.

>>import sys

# Para los que critican python por la forma que tiene de importar y utilizar los módulos:
# Si queremos solamente justo lo necesario hacemos esto:
# >> from sys import getrecursionlimit, setrecursionlimit
#Y hacemos esto nada más
# >> setrecursionlimit(777)
# >> getrecursionlimit()
# 777

>>sys.getrecursionlimit()
1000
>>sys.setrecursionlimit(2000)
>>recursiva(1500)
Se acabó

Bueno, espero que os haya gustado mi sesión de programación con escripts. Si no conocéis ningún lenguaje de escript, deberías al menos de coger uno. ¡Elegid el que más os guste!

1 comentario:

Jonan dijo...

Me tengo que poner con algún lenguaje script pero ya. Que siempre lo dejo para luego y al final no hago nada y la verdad es que tengo ganas :P

Un saludo