Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Poplog

Programación
Por DopeRider
departamento los viejos hackers nunca mueren , Sección Desarrolladores
Puesto a las Thu Aug 22nd, 2002 at 08:51:24 PM CET
Es común entre los programadores coger un afecto excesivo, incluso fanático, al lenguaje que mejor saben usar. Hace algún tiempo empecé a tener la sensación contraria. Mi lenguaje se quedaba corto. Se me ocurrían algunas construcciones que, incorporadas a la sintaxis actual, podrían subir mucho la productividad. Pensé incluso en crear un nuevo lenguaje. Pero cuando me puse a investigar en serio, descubrí que lenguajes como el que yo quería hacer ya existían hace medio siglo y, lo que es más llamativo, que los pretendidos avances que nos venden ahora, como Java o .NET, están muy por detrás de tecnologías con muchos años a sus espaldas.

Por si fuera poco fuerte la sensación de que nos toman el pelo, existen implementaciones libres.

 


El problema que pretendía resolver era la baja tasa de aprovechamiento de código. La herramienta que uso habitualmente es Delphi y su versión para Linux, Kylix, ambas productos comerciales de la empresa californiana, Borland. Normalmente quienes usamos Delphi lo comparamos con C++ y eso nos beneficia poco. No lo digo porque C++ sea más potente. Lo digo precisamente porque son prácticamente iguales. De hecho, aunque C++ tenga un par de construcciones potentes adicionales, Delphi es más productivo, no por el lenguaje, sino por el excelente sistema de componentes.

Y es que no te mosqueas es cuando comparas tu lenguajes con otros del mismo estilo. Sino cuando empiezas a echar de menos cosas nuevas que se te ocurren sobre la marcha. Te preguntas "¿cuántas veces he escrito esto?, ¿no habría manera de escribirlo de una vez por todas?". Nos dicen que la solución es la programación orientada a objetos. Francamente, después de varios años conviviendo con objetos por todas partes, creo que esta técnica está sobrevalorada. Es una característica del lenguaje útil para capturar determinadas abstracciones. Pero no es una panacea. Si la usamos tanto es... ¡porque no tenemos otra cosa!.

Un síntoma de la insuficiencia de la OOP es la proliferación de los patrones de diseño. Si tuviésemos lenguajes adecuados, no necesitaríamos patrones. ¡Los escribiríamos en el mismo código!. La característica que no encontraba en los lenguajes que conocía era la creación de sintaxis particulares para determinados problemas sobre la marcha. Tenía pensado para implementarla permitir añadir plug-in's al compilador con acceso al árbol de sintaxis.

Al profundizar algo más en los lenguajes existentes, me enteré de que Lisp ya tenía esa característica. Flipo cuando me entero de que Lisp data de finales de los años 50. Es considerablemente más antiguo que C o Pascal. Buscando causas para que no sea popular, encuentro varios artículos interesantes en la web de Paul Graham, que se puede resumir en que Lisp tiene una sintaxis poco amigable y exige una implementación que quizás no era tan eficiente en un ordenador de hace décadas.

Pero cuando las máquinas han llegado a ser más potentes, ¿por qué se han creado máquinas virtuales para lenguajes como Java, que son más de lo mismo?. ¿Por qué no han intentado aprovechar la nueva potencia de las máquinas para implementar lenguajes potentes?. Parece que Graham tiene razón y es la vieja historia de que las empresas buscan programadores mediocres, que puedan reemplazar fácilmente.

Por fin, buscando una implementación libre de Lisp, me he encontrado con una nueva sorpresa. En los años 60, poco después de Lisp se creó POP, un lenguaje incluso más flexible que Lisp y con una sintaxis algo más clara. POP-2 (primera versión estable del lenguaje) fue bastante usado en Inteligencia Artificial en ámbitos universitarios británicos. En él se escribió por primera vez el Boyer-Moore. Para situarnos más: POP es una transición entre Lisp y los lenguajes funcionales (en POP se inspiró ML).

Pero POP no sólo es un lenguaje muy potente debido a las construcciones sintácticas que permite. También su implementación, la máquina virtual llamada Poplog, tiene características peculiares que siguen por delante de cualquier cosa que yo conozca. En primer lugar, aunque hayas leído "máquina virtual", no pienses en un intérprete, ni siquiera en "bytecode". Poplog ejecuta código compilado. Las palabras mágicas son "compilación incremental". Para imaginártelo, piensa que Poplog es interactivo, como el intérprete de Pitón. Pero cuando completa una función, la compila y la incorpora a la imagen binaria del sistema, de forma que siempre trabajas con código compilado.

Los mantenedores de Poplog presumen de tener uno de los recolectores de basura más rápidos del planeta. Por cierto que el código compilado también se recolecta. Ahora cuando oigo hablar de JIT o de NET, me entra la risa. Esto se implementó casi todo por un sólo tipo, un tal Gibson, en los años 70 y 80 para unas cuantas plataformas (VMS, UNIX...). Más recientemente llegó a PC, y hay versiones para Linux y Windows.

¿Dije que me encontré con Poplog buscando una implementación de Lisp?. Es que Poplog tiene una implementación de Lisp... y de Scheme, y de Prolog, y de ML. Debido a la sintaxis extensible de POP-11 (la versión actual de POP), se pueden implementar múltiples lenguajes dentro de la máquina virtual, además simultáneamente y comunicándose entre ellos. De nuevo: ¿es NET una buena idea?. Desde luego no es una idea nueva.

Durante muchos años la Universidad de Sussex comercializó Poplog a través de varias empresas. ¡Llegó a venderse por £3.000!. En 1999 se liberó (X11/MIT) el código y ahora la distribución está disponible públicamente. Pongo los enlaces básicos para más información y para descargarse el soft:

http://www.poplog.org/ es un intento de organizar la información disponible, aunque el sitio está aún algo verde.

http://www.cs.bham.ac.uk/research/poplog/ es el directorio de la distribución en la Universidad de Birmingham, donde está Aaron Sloman, que parece ser el tipo más comprometido con Poplog y su liberación. Este directorio está un poco desorganizado y cuesta encontrar a veces las cosas entre la tonelada de documentación. Si os atascáis con la instalación, recomiendo echar un vistazo al directorio sysdoc.

No me extraña demasiado que tres años después de la liberación siga casi desconocido. La comunidad actual está formada por algunos viejos hackers y antiguos clientes que lo más que hacen es actualizar el sistema, lo cual no es demasiado trabajo porque después de muchos años, los bugs conocidos son marginales.

Las librerías de integración son algo escasas. Se echan en falta al menos para GTK, alguna base de datos más y FastCGI. En compensación tiene abundante código para aplicaciones de Inteligencia Artificial, como el SimAgent. En realidad tampoco es tan difícil su interfaz binaria. Además de POP-11 tiene otro lenguaje de más bajo nivel para crear interfaces. Otro sistema que me parece preferible a lo que se estila: se crea la interfaz desde el lenguaje, en vez de obligar al que hace la librería en C a tener que usar un API especial (Pitón, Ruby...).

Supongo que en las prioridades de muchos lectores estará más el aprender un lenguaje de moda ampliamente usado que una rareza que parece haber resucitado de unas misteriosas catacumbas. Personalmente estoy decidido a darle una oportunidad. Tengo cubiertas mis necesidades más perentorias y creo que Poplog podría encajar muy bien en un proyecto de aplicación para la web que estoy rumiando. Con un poco de curro se puede crear una distribución algo más organizada, tan cómoda como la de algunos lenguajes modernos de script como Pitón, que cada vez son más potentes, pero aún no se acercan.

En fin, que para un hacker aburrido Poplog puede ser una fuente inagotable de diversión.

< KDE 3.1 beta disponible (4 comments) | ¿Te interesa una sección de cultura? (16 comments) >
Enlaces Relacionados
· Delphi
· Borland
· comparamos con C++
· está sobrevalorada
· causas para que no sea popular
· artículos interesantes
· POP
· un tal Gibson
· Universidad de Sussex
· http://www.poplog.org/
· http://www.cs.bham.ac.uk/resea rch/poplog/
· Aaron Sloman
· More on Programación
· Also by DopeRider

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
Poplog | 7 comentarios (7 temáticos, editoriales, 0 ocultos)
Me descubro (none / 0) (#1)
por davinci (davinci at ecol org) a las Thu Aug 22nd, 2002 at 11:17:54 PM CET
(Información Usuario)

ante tan excelente artículo. Me ha dejado impresionado, tanto por su extensión y calidad, como por lo interesante del tema tratado.

Miraré los enlaces que incluyes para saber más. Una primera duda me surge. Dices que ML se basó en poplog. ¿Conoces Ocaml? Si es así, ¿sabes qué diferencias tiene con respecto a poplog?. Te lo comento porque Ocaml sí se desarrolla en la actualidad y parece tener multitud de librerías y una comunidad bastante activa.

Nada más. De nuevo, enhorabuena por la excelente investigación.

Saludos.
¡Es la guerrrrrrra!


ocaml (none / 0) (#2)
por DopeRider a las Fri Aug 23rd, 2002 at 09:57:16 AM CET
(Información Usuario)

¿Conoces Ocaml? Si es así, ¿sabes qué diferencias tiene con respecto a poplog?

pop-11 es más amplio, de hecho, hay una implementación de ML (padre de ocaml) dentro de pop-11 incluida en la distribución. ¿Se podría hacer al revés, meter pop-11 dentro de ocaml?. Sólo conozco ocaml por encima, pero creo que no.

Nota: "->" es el operador de asignación en pop-11 y va de izquierda a derecha, al revés que en la mayoría de lenguajes. Para intercambiar el valor de dos variables:

x, y -> (y, x);


Debido a que te permiten manejar la pila explícitamente. O sea que puedes escribir func(x,y);, pero también x;func(y);. Es el tipo de cosas que mamá nos dijo que no se deben hacer y el lenguaje está lleno de ellas. Algunas estarán en ocaml, otras en lisp, otras en prolog, pero sólo pop las tiene todas :-)

Ocaml sí se desarrolla en la actualidad y parece tener multitud de librerías y una comunidad bastante activa

No pretendo encontrar un lenguaje de uso común. Ya uso Delphi, que tiene más un millón y medio de licencias vendidas. Funciona en Windows y Linux y tiene librerías por un tubo. Lo que busco es un lenguaje que pueda usar a mi total satisfacción. Mete ahí que permita todo tipo de construcciones creativas :-) que vaya rápido y que tenga los fuentes para jugar. Cuando trabajaba en la consultora a mi jefe le hubiese dado pánico oír hablar de algo así :-D

Nada más. De nuevo, enhorabuena por la excelente investigación.

Gracias :-)

[ Padre ]


 
A falta de Pan... (none / 0) (#3)
por runlevel0 (exterATvullferPUNTes) a las Fri Aug 23rd, 2002 at 11:11:33 AM CET
(Información Usuario) http://perso.wanadoo.es/exter

Hombre, si el lenguaje es tan buneo que vale la pena, se podría usar un lenguaje de scripting como TCL/TK para crear GUIs.
Ahora mismo estaba probando uno con C++; creo pequeños programas de pocas funciones y los ejecuto y les paso parámetros desde TCL/TK, que hace como "glue" de todo.
Un poco chapuzas, pero está bien para generar GUI de manera QAD (Quick And Dirty).
-- S41002


Se me olvidó (none / 0) (#4)
por DopeRider a las Fri Aug 23rd, 2002 at 12:09:11 PM CET
(Información Usuario)

Se me olvidó decir que tienen una librería bastante completa para programar en XWindow directamente sobre el API. Y otras extensiones gráficas de las que aún sé poco. Personalmente me parecen más útiles la que dices tú, TCL/TK, y GTK, que también las hay para Windows.

[ Padre ]


 
Peacho de articulo (none / 0) (#5)
por sinner a las Fri Aug 23rd, 2002 at 06:10:23 PM CET
(Información Usuario) http://www.escomposlinux.org/sinner/

Ostras!

Este es un articulo genial! Que bueno! Mucho mejor que "otros" articulos que pueden encontrarse em webs de tanto... prestigio como ... bueno, todos sabeis de quien hablo.

Si tienes mas articulos, y te veo en la lista de pendientes, te ia a dar mi voto.

Eres un figura!


--
Sinner from the Prairy
Pogüered bai Mandrake
BOFHers Syndicate http://bofhers.org


 
Otro lenguaje interesante (none / 0) (#6)
por Anónimo a las Sun Aug 25th, 2002 at 02:39:28 AM CET

Hay otro lenguaje bastante más antiguo que POP y también con posibilidades increíbles, es el APL, (hay un derivado más moderno que es el J).
Lo que pasa con estos lenguajes es que son bastante más difíciles que los más populares. De hecho el lenguaje más popular hoy en día es Java por ser tan fácil.
La palabra clave en el desarrollo de software actual es productividad, que en realidad significa programadores baratos y abundantes.




APL (none / 0) (#7)
por DopeRider a las Sun Aug 25th, 2002 at 04:24:54 PM CET
(Información Usuario)

Hay otro lenguaje bastante más antiguo que POP y también con posibilidades increíbles, es el APL, (hay un derivado más moderno que es el J).

Gracias por la referencia. Efectivamente APL es de 1960 y la primera versión de POP es de 1966. Supongo que, tratándose de programación, puedes decir "mucho más antiguo" :-)

Lo que pasa con estos lenguajes es que son bastante más difíciles que los más populares.

C++ ha sido durante mucho tiempo el lenguaje más popular. Posiblemente aún lo sea. C++ es mucho más difícil que POP-11. Creo que si le echas un vistazo al manual básico de POP-11 te darás cuenta. Es muy sencillo. Un dato significativo es que se usa fundamentalmente para la enseñanza.

De hecho el lenguaje más popular hoy en día es Java por ser tan fácil.

A mí Java no me parece nada fácil. Lo usé profesionalmente una buena temporada y fue frustante. Java convierte lo fácil en difícil. El manejo de cadenas por ejemplo es innecesariamente engorroso y eso es pecado en cualquier lenguaje.

Para mí un lenguaje fácil es Pitón. Pero no se estila en el tipo de empresas que usan Java. Por otra parte, Pitón incorpora cada vez más construcciones como las de Lisp o POP-11.

La palabra clave en el desarrollo de software actual es productividad, que en realidad significa programadores baratos y abundantes.

Estoy de acuerdo en que la productividad es la palabra clave. Y no sólo actualmente. Pero estoy en completo desacuerdo en que los programadores baratos y abundantes sean productivos. Lo he oído muchas veces a los jefes, pero después la realidad les daba coletazos como los anuncio de los "pezqueñines" :-)
Te podría poner varios ejemplos de primera mano, pero los artículos de Paul Graham cuentan lo mismo y mejor de lo que yo lo haría.

[ Padre ]


 
Poplog | 7 comentarios (7 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda