Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 1
P...
Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 2
I...
Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 3
d...
Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 4
F...
Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 5
C...
Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 6
c...
Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 7
[...
Próxima SlideShare
Cargando en…5
×

Programación Esotérica

587 visualizaciones

Publicado el

Artículo sobre Programación Esotérica - FISI / UNMSM - 2013

Publicado en: Tecnología
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
587
En SlideShare
0
De insertados
0
Número de insertados
5
Acciones
Compartido
0
Descargas
3
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Programación Esotérica

  1. 1. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática 2013 Vol. 1 Nro. 1 1 Programación Esotérica Jesus Alberto Bautista Bellido jesus61_1@hotmail.com Juan Tipismana Lara juan_16_2106@hotmail.com Edson Elías Huamaní Aldoradín edsel94@gmail.com PROGRAMACION ESOTÉRICA: Una breve reseña Estos lenguajes de programación esotéricos datan de la década de los 70 en donde primero aparece el Intercal, a partir de allí es que los programadores deciden dejar de lado los lenguajes que ellos consideran aburridos como Cobol, Basic, Fortran y deciden crear sus propios lenguajes de programación donde prima la diversión sobre la utilidad, además de suponer un desafío tanto para quienes lo crean como para los que tratan de entender esos lenguajes ya que poseen una sintaxis detallada y su alfabeto es muy restringido lo que los hace muy peculiares. Estos lenguajes se encuentran en lo más recóndito de los lenguajes de programación, es decir no se les toma mucha importancia debido a que no son mucha utilidad en la sociedad, mas pasan al olvido en la historia y quedan como creaciones olvidadas de personas que inventaron algo con que entretenerse en su momento, sin embargo también existen otros que son tan absurdo que no tiene caso entenderlos [1]. I. INTRODUCCIÓN Programación esotérica es un lenguaje de programación creado por usuarios con finalidad de satirizar a otros lenguajes que existían en ese entonces como el Cobol, Fortran, entre otros, o por el simple hecho de pasar el rato poniendo a prueba su lenguaje con los límites de sintaxis que puedan entender las personas haciendo que estos lenguajes sean tan insólitos que se sorprenderán de la utilidad que tienen. Estos lenguajes fueron creados para entretener a las personas que quieren entender estos lenguajes, ya que a veces no posee una lógica simple y para entender los lenguajes complicados requiere mucho tiempo hasta años (Malbolge), muchas personas se desaniman en el trayecto e incluso en sus propias páginas oficiales existen requerimientos mínimos que deben saber cómo aprender otros lenguajes básicos como los mencionados anteriormente pero siempre se encontrará en esas páginas mensajes no muy alentadores sino todo lo contrario desmotivan a las personas a que no quieran intentarlo [2]. La mayoría de esos lenguajes no se pueden utilizar en el ámbito empresarial, en el trabajo, o para resolver operaciones comunes como suma, resta, multiplicación o división ya que depende del lenguaje en cuestión si acepta los caracteres comunes que permitan realizarla, es más la utilidad que se les puede dar es creada por cada usuario. II. CONCEPTOS BÁSICOS La programación esotérica se basa en algunos términos que son importantes saberlos: Turing Completo: Se dice que un lenguaje es “Turing completo” cuando sobre este lenguaje se puede crear cualquier tipo de algoritmo que se presente, pero no necesariamente lo más óptimo [3]. Esolang: Son lenguajes de programación esotéricos diseñado con frecuencia no con un objetivo practica sino más bien como una broma o para explorar los límites de creatividad.
  2. 2. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática 2013 Vol. 1 Nro. 1 2 III. USOS EN LA REALIDAD El uso de lenguajes esotéricos que se da en la actualidad no es muy variado, ya que han sido diseñados mayormente para fines de entretenimiento y no para utilidad que se le pueda dar. Tiene como objetivo divertir a la hora de programar y no tienen intención de ser usados en la realidad [1]. Es decir, existen personas que crean su propio lenguaje de programación para así darlo a conocer al público y entretener a los programadores que desean usar este lenguaje. Puede que en la actualidad un lenguaje sea esotérico, y con el tiempo pueda ser un lenguaje aceptado y normal para uso comercial [3] [4]. IV. VENTAJAS Y DESVENTAJAS Ventajas: Generalmente poseen una sintaxis muy básica. Por ejemplo, el BrainFuck cuenta con solo 8 instrucciones de tipo caracter: „>‟ , ‟<‟ , „+‟ , ‟–„ , „.‟ , „,‟ , „[„ , „]‟. La mayoría de ellos son lenguajes Turing- completos, es decir, que se pueden crear todo tipo de algoritmos con estos lenguajes [5]. Normalmente estos lenguajes se usan para probar conceptos en la creación de lenguajes turing completos, por lo que tienen aplicaciones en la informática teórica [6]. Cualquier persona con conocimientos en programación puede crear su propio lenguaje esotérico. Desventajas: Algunos de ellos, como son el INTERCAL que fue creado en el año 1972, son difíciles de entender y casi imposible de programar. Son de difícil aprendizaje y aplicación. No son muy comerciales, por lo que la oferta de empleo para este tipo de lenguajes es reducida [7]. No son útiles para proyectos de gran tamaño. Prima más el entretenimiento que la utilidad y productividad. La mayoría de estos lenguajes no tienen compiladores o intérpretes. V. ALGUNOS EJEMPLOS Estos lenguajes son resultado de pruebas de experimentación, retos personales o simplemente bromas para pasar el rato. No suelen crearse para resolver grandes problemas tecnológicos, sino más bien para mostrar una sintaxis ininteligible, sin embargo es muy apropiada para divertir y entretener a las personas curiosas. Donde la mayoría de estos lenguajes datan de 1972 en donde se creó el primer lenguaje esotérico que es Intercal y de allí comenzaron a surgir diferentes tipos, en diferentes interpretes con distintas sintaxis y todas tienen un nivel alto de complejidad para entenderlo. Veamos algunos ejemplos de lenguajes esotéricos: A. INTERCAL Este lenguaje es el padre de los lenguajes de programación esotéricos. Creado por dos universitarios de la ciudad de Princeton en 1972 Woods y Lyon. Cuentan que su diseño se basó en Cobol, Fortran, Basic ya uso su sintaxis, además de no tener ni ciclos, ni operaciones básicas como la suma. Es un verdadero rompecabezas. Una de las características resaltantes es que en vez de usar la sentencia GOTO, tiene la instrucción COME FROM #, que indica cuando se ha ejecutado la sentencia # se salta a la siguiente sentencia después de COME FROM # y también algunas acciones
  3. 3. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática 2013 Vol. 1 Nro. 1 3 deben pedirse por favor, a las comillas se les llama orejas de conejo [8]. En la actualidad es posible usar INTERCAL, por ejemplo sirve para la instalación en distribuciones Linux como Ubuntu basta con ejecutar esta sentencia [9]: sudo apt-get install intercal Figura 2: Código de “Hello World” en lenguaje Intercal B. MALBOLGE Este lenguaje esotérico es el más complejo de entender hasta ahora, le suelen decir programación del infierno. Fue desarrollado por Ben Olmstead en el año 1998, tiene este nombre en referencia al 8vo círculo del infierno de la obra de Dante, donde están los fraudulentos; este lenguaje tiene como objetivo ser el de más difícil entendimiento y casi siempre las personas que quieren aprenderlo retroceden en el camino y no lo logran, es más siempre se encontrará comentarios desalentadores en las redes sociales para evitar [10]. Un ejemplo de código, acá esta un “Hello world”. (=<`: 9876Z4321UT. –Q+*)M'&%$H”! ~} | Bzy? =| {z]KwZY44Eq0/{mlk** hKs_dG5 [m_BA{ ?-Y;; Vb‟rR54321M }/ .zHGwEDCBA@986543W10/.R,+O< Figura 3: Código “Hello World” en lenguaje Malbolge C. Ook! Es una creación de David Morgan-Mar este lenguaje esotérico turing completo y está diseñado para orangutanes tiene 3 palabras reservadas Ook. , Ook? Y Ook! Que pueden combinarse en 8 maneras diferentes para formar el repertorio de instrucciones. Ook pretende ser de fácil entendimiento para orangutanes. Figura 4: Código de “Hello World” en lenguaje Ook! WHITESPACE ( Los espacios en blanco ) La particularidad de este lenguaje es que solo utiliza el espacio (enter), la tabulación (tab), y la línea en blanco, los demás caracteres son ignorados, fue desarrollado por Edwin Brady y Chris Morris consideraron injusto que en todos los lenguajes de programación los espacios no tengan ningún significado, la única manera de verlos es coloreando la sintaxis para hacer visibles esos espacios en blanco y distinguirlos. ¿Cuáles son las ventajas de usar espacios en blanco? Hay cosas que son difíciles en otros idiomas se hacen mucho más fáciles en los espacios en blanco. Es de mucha utilidad para los espías, imaginando que tenemos un programa de alto secreto que no quieres que nadie vea, basta con imprimir y borrar el archivo, listo para escribir en una fecha posterior. Nadie sabrá que ese pedazo de papel en blanco en un código informático vital. El siguiente código imprime “Hello world!”, con líneas en blanco, tabulador y espacio. Aunque no se vea a simple vista.
  4. 4. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática 2013 Vol. 1 Nro. 1 4 Figura 5: Código de “Hello World” en lenguaje Whitespace Para un fácil entendimiento se tendría que teñir de colores con un editor de texto y se vería de la siguiente manera: - Espacio (rosado) y tabulación (verde claro). Figura 6: Código de “Hello World” en lenguaje Whitespace con editor de texto. D. Piet Este lenguaje inventado por David Morgan-Mar, donde los programa son mapa de bits, son combinación de colores, como si fuera una pintura de arte abstracto, lleva ese nombre en honor al pintor Piet Mondrian, su función es dotar de cierto arte al código del programa. Cada tonalidad y cambio de color representa una operación distinta push, pop, add, substract, mod, roll, out, etc. [11]. Piet utiliza 20 colores distintos formando distinto gráficos que después un intérprete ejecutará como en la siguiente imagen un Hello World. Figura 7: Código de “Hello World” en lenguaje Piet. E. Brainfuck Este lenguaje de programación esotérico está diseñado por Urban Müller en 1993 para ser el de mayor simplicidad y a la vez turing completo, y solo requiere de un compilador completo, lo baso en turing completo y también le sirvió de inspiración al compilador de 1024 bytes de tamaño de lenguaje FALSE [12] [13]. Brainfuck opera sobre una matriz de celdas de memoria, también conocida como cinta, cada una inicialmente a cero. Hay un puntero apuntando inicialmente a la celda de memoria tienen los siguientes comandos:
  5. 5. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática 2013 Vol. 1 Nro. 1 5 Comando Descripción Lenguaje C > Mueve el puntero hacia la derecha ++ptr; < Mueve el puntero hacia la izquierda --ptr; + Incrementa la celda de memoria ++*ptr; Comando Descripción Lenguaje C . Salida del personaje por la célula del puntero Putchar(*ptr); , Introduce un carácter y lo almacena en el puntero *ptr=getchar(); [ Ir más allá de la coincidencia ] si la celda bajo el puntero es 0 While(*ptr){ ] Ir de nuevo al juego[ si la celda bajo del puntero es 0 } Figura 8: Cuadro de comandos de Brainfuck según lenguaje C. ++++++[>+++++++>++++++++++>+++++++++++ >+++>+<<<<- ]>++.>+.+++++++..+++.>++.<<++++++++++++++ +.>.+++.------.---------.>+.>. Figura 8: Código de “Hello World” en lenguaje Brainfuck En un intérprete para Brainfuck, podríamos visualizarlo de la siguiente manera: Figura 9: Interprete de Brainfuck. VI. PROGRAMAS QUE INTERPRETAN ESTOS LENGUAJES Compiladores de algunos Lenguajes Esotéricos Existen una gran variedad de lenguajes Esotéricos por lo tanto no alcanzaría para explayarlos todos en un artículo tan ameno. Pero mostraremos algunos de los compiladores de aquellos lenguajes esotéricos [14][15][16]. A. INTERCAL: El código se crea y se compila muy bien bajo cualquier plataforma ANSI/POSIX, incluyendo a Linux y sus versiones BSD libres. Las versiones anteriores de este código se ejecutan en DOS/Windows, aunque si todavía lo hará es desconocida [17]. B. WHITESPACE: El código debería compilar en cualquier máquina Unix con el Glasgow Haskell Compiler versión 5.02 o posterior. También nos informaron de que compila correctamente en OS X 10.2.4 sin problemas. Sin embargo, esta es una versión beta temprana, así que los problemas todavía pueden existir. C. BRIANFUCK: El primer intérprete y compilador de este lenguaje fue para los sistemas Amiga. Brainfucked por otro lado es un potente y eficiente compilador brainfuck para sistemas Windows y MS-DOS. El compilador dispone de un avanzado programa de optimización de código y, por tanto creados
  6. 6. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática 2013 Vol. 1 Nro. 1 6 con Brainfucked son bastante pequeñas. Brainfucked, por supuesto, comprueba la sintaxis de los programas brainfuck para detectar errores comunes y posibles antes de compilar. También es capaz de compilar para diferentes plataformas como Windows, DOS, Linux, Unix y Mac OS X. Cada programa compilado con Brainfucked es ejecutable bajo Windows y MS- DOS. Visual brainfuck es un entorno de desarrollo compatible con Windows 7 integrado para desarrolladores de todo el mundo que prefieren el enfoque brainfuck. Tiene las herramientas necesarias para cumplir con altos estándares de calidad actuales en lo que respecta al desarrollo de aplicaciones profesionales... en brainfuck [18]. VII. CONCLUSIONES - Todos estos lenguajes fueron creados espontáneamente por universitarios, entre otros, con la única finalidad que es entretener a las personas que quieran aprenderlo, pero para que no sea simple los crearon con una sintaxis compleja para que sea todo un reto. - La plataforma apropiada para ejecutar estos lenguajes esotéricos es Linux ya que nos ofrece una flexibilidad para crear lenguajes y contar con un entorno para poder probarlo. - Podemos decir que los lenguajes esotéricos se encuentran tan ocultos, en lo más recóndito ya que no se le puede dar una buena utilidad en la vida real, sin embargo existen algunos que si se le da una acción malintencionada podría generar riesgos de muy alto nivel en la sociedad (como es el caso del lenguaje Whitespace usado por espías). - Existen unos cuantos lenguajes que con grandes ideas pueden llegar a tener una utilidad enorme como el caso del lenguaje Ook! Que interactúa con orangutanes, de manera que podría llegar a convertirse en parte la investigación del entendimiento del lenguaje de los orangutanes. - - La gran mayoría de los lenguajes se encuentran en fase experimental por ende no existe un compilador oficial, pero si se pueden probar por plataformas como ANSI/POSIX en Linux, en Windows o por MS-DOS. REFERENCIAS [1] Miguel Santirso, Lenguajes de programación esotérica, http://miguelsantirso.es/blog/2007/01/lenguajes-de- programacion-esotericos/, Enero 2003. [2] Anabella Roman, Edgardo Fernandez, Gianni Sabbione, Lisando Pardo, Mario Sacco, Matias Benitez, Max Ferzzola, Nico Veronas Whitespace : lenguaje de programación, http://www.neoteo.com/whitespace-lenguaje-de- programacion-esoterico , 2010 [3] Alan Lazalde - Programación esotérica - http://gr3p.com/2011/02/programacion-esoterica/ - Febrero 2011. [4] Fundación Wikimedia, Inc Lenguaje de programación esotérico, http://es.wikipedia.org/wiki/Lenguaje_de_programaci %C3%B3n_esot%C3%A9rico, Marzo 2013 [5] Francisco I. Leyva - Programación esotérica - http://www.panchosoft.com/blog/2006/12/05/progra macion-esoterica/ - Diciembre 2006. [6] Pedro Gimeno Fortea - Recreaciones computacionales http://www.formauri.es/personal/pgimeno/compurec/ LenguajesEsotericos.php - Mayo 2005. [7] Alvaro Graves - Lenguajes Esotéricos - http://manzanamecanica.org/2008/05/lenguajes_esote ricos.html - Mayo 2008.
  7. 7. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática 2013 Vol. 1 Nro. 1 7 [8] Fundación Wikimedia, Inc - Intercal http://es.wikipedia.org/wiki/INTERCAL - Marzo 2013 [9] Eric Raymond, Recursos de intercal- http://catb.org/esr/intercal/ , Mayo 2013 [10] Lou Scheffer, Introducción a Malbolge http://www.lscheffer.com/malbolge.shtml, diciembre del 2007. [11] Alvy , Piet: Un lenguaje de programación esotérico, bellamente matemático, http://www.microsiervos.com/archivo/ordenadores/pi et-lenguaje-programacion.html, Marzo 2009 [12] Brian Raiter, Brainfuck- www.muppetlabs.com/~breadbox/bf/ [13] Brainfuck, http://esolangs.org/wiki/brainfuck, Mayo 2013. [14] Hackerdou, http://hackerdou.com/blog/2012/10/10/lenguajes-de- programacion-esotericos/ [15] Programación en Castellano, http://www.programacion.com/articulo/lenguajes_eso tericos_207 - Enero 2003 [16] Esolangs http://esolangs.org/wiki/Language_list [17] The Intercal Resources Page, http://www.catb.org/~esr/intercal/, May 2013. [18] Visual Brianfuck https://sites.google.com/site/visualbf/, 2013

×