www-es-general
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNU-traductores] /gnu/rms-lisp.html. (just adding some translation chec


From: RSM
Subject: [GNU-traductores] /gnu/rms-lisp.html. (just adding some translation checking of this loving piece of speech)
Date: Mon, 4 Mar 2019 12:12:34 +0000


"Since none of my usual speeches have anything to do with Lisp, none of them "
"were appropriate for today. So I'm going to have to wing it.  Since I've "
"done enough things in my career connected with Lisp I should be able to say "
"something interesting."

"ninguna era apropiada para hoy. Así que voy a tener que improvisar. Como he "
> "hecho bastantes cosas relacionadas con Lisp a lo largo de mi carrera, "
> "debería ser capaz de decir algo interesante."

"ninguna era apropiada para hoy. Así que voy a tener que improvisar. Por otro lado, la cantidad de trabajo conectado con Lisp hecho a lo largo de mi carrera es bastante amplia que debería ser capaz de decir algo interesanteal respecto."

The interesting idea about Emacs was that it had a programming language, and the user's editing commands would be written in that interpreted programming language, so that you could load new commands into your editor while you were editing. You could edit the programs you were using and then go on editing with them. So, we had a system that was useful for things other than programming, and yet you could program it while you were using it. I don't know if it was the first one of those, but it certainly was the first editor like that."

"interesante de Emacs era que incluía un lenguaje de programación, y las "
> "órdenes de edición de texto a utilizar por usted como usuario serían "
> "escritas en ese lenguaje de programación interpretado, de forma que  podría "
> "cargar nuevas órdenes en el editor mientras estaba editando. Podría "
> "modificar los programas que estaba utilizando e, inmediatamente, editar "
> "utilizando los programas recién modificados. Es decir, teníamos un sistema "
> "que resultaba útil para algo más que para programar, y, sin embargo, "
> "permitía que usted lo programara mientras lo estaba usando. No sé si era el "
> "primer sistema de estas características, pero, desde luego, sí el primer "
> "editor así."

"interesante de Emacs era que no solo incluía un lenguaje de programación, además, los comandos de edición del que disponía el usuario estaban escritos en ese mismo lenguaje, de forma que permitía cargar nuevas instrucciones mientras las estaba editando. Podía modificar los programas que estaba utilizando e, inmediatamente, editar utilizando los programas recién modificados. Es decir, teníamos un sistema que resultaba útil para tratar con texto para mucho más que programar, que sin embargo, permitía al usuario programar el editor mientras lo estaba usando. No sé si era el primer sistema de estas características, pero, desde luego, sí el primer editor de tales prestaciones."

I think that Lisp got its unwind-protect facility from "
"<acronym>TECO</acronym>."

"style=\"font-style:italic;\">unwind-protect</span> de <acronym>TECO</"
> "acronym>."

"style=\"font-style:italic;\">unwind-protect</span>, llamémosle, "de-aplicación-abierta", de <acronym>TECO</acronym>."

it should be designed as a programming language. In fact, we "
"discovered that the best programming language for that purpose was Lisp."

"como un lenguaje de programación desde un principio. De hecho, nosotros "
> "descubrimos que el mejor lenguaje de programación para ese propósito era "
> "Lisp."

"como un lenguaje de programación desde un principio. De hecho, descubrimos que el mejor lenguaje de programación para ese propósito era Lisp."

"So Bernie saw that an application &mdash; a program that does something "
"useful for you &mdash; which has Lisp inside it and which you could extend "
"by rewriting the Lisp programs, is actually a very good way for people to "
"learn programming. It gives them a chance to write small programs that are "
"useful for them, which in most arenas you can't possibly do. They can get "
"encouragement for their own practical use &mdash; at the stage where it's "
"the hardest &mdash; where they don't believe they can program, until they "
"get to the point where they are programmers."

"Así que Bernie vio que una aplicación, un programa que hace algo útil para "
> "usted, con Lisp en su interior y que pueda extender reescribiendo los "
> "programas Lisp, es realmente una muy buena manera de que la gente aprenda a "
> "programar. Le da la oportunidad de escribir pequeños programas que le son "
> "útiles, algo que, en la mayoría de las situaciones, no puede hacer. Le puede "
> "estimular para transitar mediante su propio uso en la práctica, en la que es "
> "la fase más dura, desde su creencia en su propia incapacidad para programar, "
> "hasta el momento en el que ya es un programador."

"Así que Bernie vio que una aplicación, un programa creado para solucionar problemas prácticos, que llevara incorporado LISP, de forma que pudiera extender las funcionalidades que trae de diseño, incluso reescribirlas enteramente, era en sí misma una muy buena manera de aprender a programar. Le da a uno la oportunidad de ajustar dichas utilidades a la propia medida, algo que en la mayoría de las situaciones simplemente no puede hacer. Lo cual es estimulante en sí mismo y le mueve a extender personalizar las aplicaciones, y, de hecho transitar desde el momento más duro en el que asume que no es capaz de programar hasta aquel en el que está, de hecho, programando."

making the data structures of the internals of the editor "
"exposable and manipulable by the user's Lisp programs."

"y haciendo visibles y manipulables por los programas Lisp del usuario las "
> "estructuras de datos internas del editor."

"y haciendo las estructuras de datos internas del editor visibles y manipulables por los programas Lisp del usuario."

"be free to do the things we did in the old days at <abbr>MIT</abbr>,

"libre de hacer lo que nosotros hacíamos en el <abbr>MIT</abbr> en los viejos "

"debería tener la libertad de hacer lo que nosotros hacíamos en el <abbr>MIT</abbr> de los viejos tiempos: "

"not have scruples, and do everything possible to win."

"financiación externa, no tendrían escrúpulos y harían todo lo posible para "

"financiación externa, no tendrían escrúpulos y harían todo lo posible por "

It was a three-way contract where both companies licensed the "
"use of Lisp machine system sources.

"bandas por el que ambas empresas autorizaban el uso de los fuentes del "

"bandas por el que ambas empresas autorizaban el uso de las fuentes del "

To have something like the Lisp machine "
"system, you needed special purpose microcode.

"como el sistema de la máquina Lisp, necesita microcódigo de propósito "

"como el sistema de la máquina Lisp, se necesita un tipo de microcode llamado "de propósito específico "

The programs would be faster, but unstable.

"programas h abrían sido más rápidos, pero inestables.

programas habrían sido más rápidos, pero inestables.

on a timesharing system &mdash; if one program crashes, that's not a disaster, that's something your program occasionally does. But that didn't make it good for writing the operating system in, so I rejected the idea of making a "
"system like the Lisp machine."

un sistema de tiempo compartido: que un programa falle no es un desastre, es algo que ocurre con su programa ocasionalmente. Pero no es admisible cuando lo que escribimos es el sistema operativo, así que rechacé la idea de hacer un sistema como la máquina Lisp."

"tiempo compartido: que un programa falle no es un desastre, es algo que ocurre ocasionalmente. Pero no es admisible cuando lo que escribimos es el sistema operativo, así que rechacé la idea de hacer un sistema como la máquina Lisp."

We didn't have &lsquo;caar&rsquo; and &lsquo;cadr&rsquo; and so on; &ldquo;squeeze out everything possible&rdquo; was the spirit of GNU Emacs, the spirit of Emacs Lisp, from the beginning."

"No teníamos «caar», «cadr», etc., el espíritu de "Emacs de GNU, el espíritu de Emacs Lisp fue, desde el principio, «sácale todo el jugo posible»."

"No teníamos «caar», «cadr», etc., había que «exprimirlo lo más posible» ese fué el espíritu del Emacs de GNU, el espíritu de Emacs Lisp desde el principio."

If you are using a non-free program, you have lost crucial freedom, so don't ever do that."

"que no sea libre, pierde una libertad crucial, así que no lo haga nunca."

"que no sea libre, pierde una libertad crucial, así que no lo haga nunca."

What bothers me is making simple basic functions such as "
"&ldquo;member&rdquo; use them."

"como «miembro»."

"como «member»."











Project:rms-list.html
Language:Spanish
 
Translated: 65 of 65 (100 %)
Source text — English Translation — Spanish
My Lisp Experiences and the Development of GNU Emacs - GNU Project - Free Software Foundation Mis experiencias con Lisp y el desarrollo de Emacs de GNU - Proyecto GNU - Free Software Foundation

type: Content of: <title>

# type: Content of: <title>

My Lisp Experiences and the Development of GNU Emacs Mis experiencias con Lisp y el desarrollo de Emacs de GNU

type: Content of: <h2>

# type: Content of: <h2>

(Transcript of Richard Stallman's Speech, 28 Oct 2002, at the International Lisp Conference). (Transcripción de la conferencia pronunciada por Richard Stallman el 28 de octubre de 2002 en el Congreso Internacional de Lisp [<span style="font-style:italic;">International Lisp Conference</span>]).

type: Content of: <blockquote><p>

# type: Content of: <h3>

Since none of my usual speeches have anything to do with Lisp, none of them were appropriate for today. So I'm going to have to wing it. Since I've done enough things in my career connected with Lisp I should be able to say something interesting. Dado que ninguna de mis charlas habituales tiene nada que ver con Lisp, ninguna era apropiada para hoy. Así que voy a tener que improvisar. Por otro lado, la cantidad de trabajo conectado con Lisp hecho a lo largo de mi carrera es bastante amplia que debería ser capaz de decir algo interesante al respecto.

type: Content of: <p>

# type: Content of: <p>

My first experience with Lisp was when I read the Lisp 1.5 manual in high school. That's when I had my mind blown by the idea that there could be a computer language like that. The first time I had a chance to do anything with Lisp was when I was a freshman at Harvard and I wrote a Lisp interpreter for the <abbr title="Programmed Data Processor">PDP</abbr>-11. It was a very small machine &mdash; it had something like 8k of memory &mdash; and I managed to write the interpreter in a thousand instructions. This gave me some room for a little bit of data. That was before I got to see what real software was like, that did real system jobs. Mi primera experiencia con Lisp tuvo lugar en la escuela secundaria, cuando leí el manual de Lisp 1.5. Entonces quedé maravillado con la idea de que pudiera haber un lenguaje de programación así. La primera vez que tuve la oportunidad de hacer algo en Lisp fue siendo un novato en Harvard, cuando escribí un intérprete de Lisp para el <abbr title="Programmed Data Processor" lang="en">PDP</abbr>-11. Era una máquina muy pequeña, tenía algo así como 8k de memoria, y me las arreglé para escribir el intérprete en unas mil instrucciones. Eso me dejó sitio para unos pocos datos. Aquello fue antes de que llegara a conocer cómo era el software real, el que hacía el trabajo en los sistemas reales.

type: Content of: <p>

# type: Content of: <p>

I began doing work on a real Lisp implementation with JonL White once I started working at <abbr title="Massachusetts Institute of Technology">MIT</abbr>. I got hired at the Artificial Intelligence Lab not by JonL, but by Russ Noftsker, which was most ironic considering what was to come &mdash; he must have really regretted that day. Fue tras comenzar mi trabajo en el <abbr title="Instituto de Tecnología de Massachusetts">MIT</abbr> cuando empecé a trabajar en una implementación real de Lisp con JonL White. No fui contratado para el Laboratorio de Inteligencia Artificial gracias a JonL, sino por Russ Noftsker, lo que es de lo más irónico teniendo en cuenta lo que vendría después, debe de haber lamentado realmente lo ocurrido aquel día.

type: Content of: <p>

# type: Content of: <p>

During the 1970s, before my life became politicized by horrible events, I was just going along making one extension after another for various programs, and most of them did not have anything to do with Lisp. But, along the way, I wrote a text editor, Emacs. The interesting idea about Emacs was that it had a programming language, and the user's editing commands would be written in that interpreted programming language, so that you could load new commands into your editor while you were editing. You could edit the programs you were using and then go on editing with them. So, we had a system that was useful for things other than programming, and yet you could program it while you were using it. I don't know if it was the first one of those, but it certainly was the first editor like that. En la década de los 70, antes de que mi vida se politizara a causa de terribles sucesos, simplemente me dedicaba a hacer una extensión tras otra de varios programas, la mayoría de los cuales no tenía nada que ver con Lisp. Pero, al mismo tiempo, escribí un editor de textos: Emacs. Lo interesante de Emacs era que no solo incluía un lenguaje de programación, además, los comandos de edición del que disponía el usuario estaban escritos en ese mismo lenguaje, de forma que permitía cargar nuevas instrucciones mientras las estaba editando. Podía modificar los programas que estaba utilizando e, inmediatamente, editar utilizando los programas recién modificados. Es decir, teníamos un sistema que resultaba útil para tratar con texto para mucho más que programar, que sin embargo, permitía al usuario programar el editor mientras lo estaba usando. No sé si era el primer sistema de estas características, pero, desde luego, sí el primer editor de tales prestaciones.

type: Content of: <p>

# type: Content of: <p>

This spirit of building up gigantic, complicated programs to use in your own editing, and then exchanging them with other people, fueled the spirit of free-wheeling cooperation that we had at the AI Lab then. The idea was that you could give a copy of any program you had to someone who wanted a copy of it. We shared programs to whomever wanted to use them, they were human knowledge. So even though there was no organized political thought relating the way we shared software to the design of Emacs, I'm convinced that there was a connection between them, an unconscious connection perhaps. I think that it's the nature of the way we lived at the AI Lab that led to Emacs and made it what it was. Esta construcción de programas complejos y gigantescos para usarlos en las ediciones de textos de uno, y después intercambiarlos con otros, alimentó el espíritu de cooperación espontánea que teníamos entonces en el Laboratorio de Inteligencia Artificial. La idea era que podía dar una copia de cualquier programa que tuviera a quien quisiera una. Compartíamos programas con todo el que deseara usarlos, eran conocimiento humano. Así que, a pesar de que no había un pensamiento político organizado que relacionara la forma en que compartíamos software con el diseño de Emacs, estoy convencido de que había una conexión entre ellos, quizá una conexión inconsciente. Creo que fue la naturaleza de la forma de vida que llevábamos en el Laboratorio de Inteligencia Artificial lo que condujo a Emacs e hizo de él lo que fue.

type: Content of: <p>

# type: Content of: <p>

The original Emacs did not have Lisp in it. The lower level language, the non-interpreted language &mdash; was <abbr>PDP</abbr>-10 Assembler. The interpreter we wrote in that actually wasn't written for Emacs, it was written for <acronym title="Text Editor and COrrector">TECO</acronym>. It was our text editor, and was an extremely ugly programming language, as ugly as could possibly be. The reason was that it wasn't designed to be a programming language, it was designed to be an editor and command language. There were commands like &lsquo;5l&rsquo;, meaning &lsquo;move five lines&rsquo;, or &lsquo;i&rsquo; and then a string and then an ESC to insert that string. You would type a string that was a series of commands, which was called a command string. You would end it with ESC ESC, and it would get executed. El Emacs original no incluía Lisp. Su lenguaje, de más bajo nivel y no interpretado, era Ensamblador del <abbr>PDP</abbr>-10. El intérprete que escribimos nosotros en realidad no fue escrito para Emacs, sino para <acronym title="Text Editor and COrrector" lang="en">TECO</acronym>. <acronym>TECO</acronym> era nuestro editor de textos y era un lenguaje de programación extremadamente feo, no podía haber sido más feo. La razón era que no fue diseñado para ser un lenguaje de programación, sino como un lenguaje de órdenes y un editor de textos. Había órdenes como «5l», que significaba «mover cinco líneas», o «i» seguido de una cadena de caracteres y después ESC para insertar esa cadena de caracteres. Podría escribir una cadena de caracteres que fuera una secuencia de órdenes, lo que se llamaba una cadena de órdenes, terminada con ESC ESC, y sería ejecutada.

type: Content of: <p>

# type: Content of: <p>

Well, people wanted to extend this language with programming facilities, so they added some. For instance, one of the first was a looping construct, which was &lt; &gt;. You would put those around things and it would loop. There were other cryptic commands that could be used to conditionally exit the loop. To make Emacs, we <a href="">(1)</a> added facilities to have subroutines with names. Before that, it was sort of like Basic, and the subroutines could only have single letters as their names. That was hard to program big programs with, so we added code so they could have longer names. Actually, there were some rather sophisticated facilities; I think that Lisp got its unwind-protect facility from <acronym>TECO</acronym>. Bien. La gente quería extender este lenguaje con elementos útiles para la programación, así que añadió algunos. Por ejemplo, uno de los primeros fue una estructura iterativa: &lt; &gt;. Encerrar algo entre estos signos hacía que se ejecutara en un bucle. Había otras crípticas órdenes que podían usarse para salir del bucle condicionalmente. Para construir Emacs, nosotros <a href="">(1)</a> añadimos mecanismos para tener subrutinas con nombres. Antes de esto, de forma análoga a lo que ocurre con Basic, los nombres de las subrutinas sólo podían estar formados por una letra. Con esta limitación era difícil escribir programas grandes, así que añadimos código que permitió que pudieran tener nombres más largos. De hecho, había algunos mecanismos bastante sofisticados; creo que Lisp tomó su mecanismo <span style="font-style:italic;">unwind-protect</span>, llamémosle, de \"aplicación-abierta\" de <acronym>TECO</acronym>.

type: Content of: <p>

# type: Content of: <p>

We started putting in rather sophisticated facilities, all with the ugliest syntax you could ever think of, and it worked &mdash; people were able to write large programs in it anyway. The obvious lesson was that a language like <acronym>TECO</acronym>, which wasn't designed to be a programming language, was the wrong way to go. The language that you build your extensions on shouldn't be thought of as a programming language in afterthought; it should be designed as a programming language. In fact, we discovered that the best programming language for that purpose was Lisp. Empezamos a añadir otros mecanismos sofisticados, todos ellos con la sintaxis más horrible que puedan imaginar, y funcionó, por lo menos la gente fue capaz de escribir programas extensos con él. La lección obvia fue que utilizar un lenguaje como <acronym>TECO</acronym>, que no había sido diseñado como lenguaje de programación, fue una opción equivocada. El lenguaje sobre el que construye sus extensiones no debería ser considerado como un lenguaje de programación a posteriori, sino que debería ser diseñado como un lenguaje de programación desde un principio. De hecho, descubrimos que el mejor lenguaje de programación para ese propósito era Lisp.

type: Content of: <p>

# type: Content of: <p>

It was Bernie Greenberg, who discovered that it was <a href="">(2)</a>. He wrote a version of Emacs in Multics MacLisp, and he wrote his commands in MacLisp in a straightforward fashion. The editor itself was written entirely in Lisp. Multics Emacs proved to be a great success &mdash; programming new editing commands was so convenient that even the secretaries in his office started learning how to use it. They used a manual someone had written which showed how to extend Emacs, but didn't say it was a programming. So the secretaries, who believed they couldn't do programming, weren't scared off. They read the manual, discovered they could do useful things and they learned to program. Fue Bernie Greenberg quien descubrió que lo era <a href="">(2)</a> . Escribió una versión de Emacs en Multics MacLisp, y programó sus órdenes en MacLisp de forma sencilla. El propio editor estaba escrito enteramente en Lisp. Multics Emacs fue un gran éxito: programar nuevas órdenes de edición era tan práctico que incluso los administrativos empezaron a aprender a hacerlo en sus oficinas. Utilizaban un manual que mostraba cómo extender Emacs, pero que no lo llamaba programación, de forma que los administrativos, que pensaban que no sabían programar, no se asustaran. Leyeron el manual, descubrieron que podían hacer cosas útiles y aprendieron a programar.

type: Content of: <p>

# type: Content of: <p>

So Bernie saw that an application &mdash; a program that does something useful for you &mdash; which has Lisp inside it and which you could extend by rewriting the Lisp programs, is actually a very good way for people to learn programming. It gives them a chance to write small programs that are useful for them, which in most arenas you can't possibly do. They can get encouragement for their own practical use &mdash; at the stage where it's the hardest &mdash; where they don't believe they can program, until they get to the point where they are programmers. Así que Bernie vio que una aplicación, un programa creado para solucionar problemas prácticos, que llevara incorporado LISP, de forma que pudiera extender las funcionalidades que trae de diseño, incluso reescribirlas enteramente, era en sí misma una muy buena manera de aprender a programar. Le da a uno la oportunidad de ajustar dichas utilidades a la propia medida, algo que en la mayoría de las situaciones simplemente no puede hacer. Lo cual es estimulante en sí mismo y le mueve a extender personalizar las aplicaciones y de hecho transitar desde el momento más duro en el que asume que no es capaz de programar hasta aquel en el que está, de hecho, programando.

type: Content of: <p>

# type: Content of: <p>

At that point, people began to wonder how they could get something like this on a platform where they didn't have full service Lisp implementation. Multics MacLisp had a compiler as well as an interpreter &mdash; it was a full-fledged Lisp system &mdash; but people wanted to implement something like that on other systems where they had not already written a Lisp compiler. Well, if you didn't have the Lisp compiler you couldn't write the whole editor in Lisp &mdash; it would be too slow, especially redisplay, if it had to run interpreted Lisp. So we developed a hybrid technique. The idea was to write a Lisp interpreter and the lower level parts of the editor together, so that parts of the editor were built-in Lisp facilities. Those would be whatever parts we felt we had to optimize. This was a technique that we had already consciously practiced in the original Emacs, because there were certain fairly high level features which we re-implemented in machine language, making them into <acronym>TECO</acronym> primitives. For instance, there was a <acronym>TECO</acronym> primitive to fill a paragraph (actually, to do most of the work of filling a paragraph, because some of the less time-consuming parts of the job would be done at the higher level by a <acronym>TECO</acronym> program). You could do the whole job by writing a <acronym>TECO</acronym> program, but that was too slow, so we optimized it by putting part of it in machine language. We used the same idea here (in the hybrid technique), that most of the editor would be written in Lisp, but certain parts of it that had to run particularly fast would be written at a lower level. Llegado este punto, la gente se empezó a preguntar cómo podría conseguir algo así en una plataforma que no poseyera una implementación de Lisp completa. Multics MacLisp tenía tanto un compilador como un intérprete, era un sistema Lisp con todas las de la ley, pero la gente quería implementar algo similar en otros sistemas para los cuales todavía no había programado un compilador de Lisp. Bien, si no tenía el compilador de Lisp no podía escribir todo el editor en Lisp: resultaría demasiado lento, especialmente al refrescar la pantalla, si tenía que ejecutarse en Lisp interpretado. Así que desarrollamos una técnica híbrida. La idea era escribir conjuntamente un intérprete de Lisp y los fragmentos de nivel más bajo del editor, de forma que algunos fragmentos del editor fueran mecanismos incorporados en el intérprete de Lisp. Estos fragmentos serían todas aquellas partes que consideráramos que teníamos que optimizar. Ya habíamos utilizado esta técnica en el Emacs original, cuando reescribimos en lenguaje máquina algunas funciones de nivel relativamente alto, transformándolas en primitivas <acronym>TECO</acronym>. Por ejemplo, había una primitiva <acronym>TECO</acronym> para rellenar un párrafo (en realidad, para hacer casi todo el trabajo necesario para rellenar un párrafo, porque algunas de las tareas que menos tiempo consumían eran realizadas en un nivel superior por un programa <acronym>TECO</acronym>). Se podría haber hecho todo el trabajo con un programa <acronym>TECO</acronym>, pero habría resultado demasiado lento, por eso lo optimizamos escribiendo parte de él en lenguaje máquina. Esa misma idea es la que usamos aquí (en la técnica híbrida): escribimos la mayoría del editor en Lisp, pero escribimos en un nivel inferior algunas partes que tenían que ejecutarse particularmente rápido.

type: Content of: <p>

# type: Content of: <p>

Therefore, when I wrote my second implementation of Emacs, I followed the same kind of design. The low level language was not machine language anymore, it was C. C was a good, efficient language for portable programs to run in a Unix-like operating system. There was a Lisp interpreter, but I implemented facilities for special purpose editing jobs directly in C &mdash; manipulating editor buffers, inserting leading text, reading and writing files, redisplaying the buffer on the screen, managing editor windows. Por lo tanto, cuando escribí mi segunda implementación de Emacs seguí el mismo esquema. El lenguaje de bajo nivel ya no era lenguaje máquina, sino C. C era un lenguaje bueno y eficiente para programas portátiles que fueran a ejecutarse en un sistema operativo tipo Unix. Había un intérprete de Lisp, pero implementé directamente en C funciones para tareas de edición de propósito específico: manipular las zonas de memoria intermedia [buffers] del editor, insertar texto por delante, leer y escribir ficheros, refrescar la pantalla con el contenido de la memoria intermedia y gestionar la ventanas del editor.

type: Content of: <p>

# type: Content of: <p>

Now, this was not the first Emacs that was written in C and ran on Unix. The first was written by James Gosling, and was referred to as GosMacs. A strange thing happened with him. In the beginning, he seemed to be influenced by the same spirit of sharing and cooperation of the original Emacs. I first released the original Emacs to people at <abbr>MIT</abbr>. Someone wanted to port it to run on Twenex &mdash; it originally only ran on the Incompatible Timesharing System we used at <abbr>MIT</abbr>. They ported it to Twenex, which meant that there were a few hundred installations around the world that could potentially use it. We started distributing it to them, with the rule that &ldquo;you had to send back all of your improvements&rdquo; so we could all benefit. No one ever tried to enforce that, but as far as I know people did cooperate. Ahora bien, este no fue el primer Emacs escrito en C y que se ejecutaba en Unix. El primero lo escribió James Gosling, y era conocido como GosMacs. Con James ocurrió algo extraño. Al principio parecía estar influido por el mismo espíritu de participación y cooperación del Emacs original. En primer lugar liberé el Emacs original para personal del <abbr>MIT</abbr>. Alguien quería adaptarlo para su ejecución en Twenex, inicialmente sólo se podía ejecutar sobre el <span style="font-style:italic;">Incompatible Timesharing System</span> [sistema de tiempo compartido incompatible] que usábamos en el <abbr>MIT</abbr>. Lo adaptaron a Twenex, lo cual significaba que había unos pocos cientos de instalaciones alrededor del mundo que podían, potencialmente, usarlo. Empezamos a distribuírselo junto con la norma de que «usted debía enviarnos todas sus mejoras» para que así todos nos pudiéramos beneficiar. Nadie intentó nunca hacer cumplir esta norma pero, hasta donde yo sé, la gente cooperaba.

type: Content of: <p>

# type: Content of: <p>

Gosling did, at first, seem to participate in this spirit. He wrote in a manual that he called the program Emacs hoping that others in the community would improve it until it was worthy of that name. That's the right approach to take towards a community &mdash; to ask them to join in and make the program better. But after that he seemed to change the spirit, and sold it to a company. Inicialmente Gosling parecía participar de este espíritu. Escribió en un manual que llamó Emacs al programa con la esperanza de que otros miembros de la comunidad lo mejoraran hasta que llegara a ser merecedor de ese nombre. Esa es la forma correcta de enfocar la relación con la comunidad, pedirle que se una al proyecto y mejore el programa. Pero más adelante pareció cambiar el espíritu, y lo vendió a una empresa.

type: Content of: <p>

# type: Content of: <p>

At that time I was working on the GNU system (a free software Unix-like operating system that many people erroneously call &ldquo;Linux&rdquo;). There was no free software Emacs editor that ran on Unix. I did, however, have a friend who had participated in developing Gosling's Emacs. Gosling had given him, by email, permission to distribute his own version. He proposed to me that I use that version. Then I discovered that Gosling's Emacs did not have a real Lisp. It had a programming language that was known as &lsquo;mocklisp&rsquo;, which looks syntactically like Lisp, but didn't have the data structures of Lisp. So programs were not data, and vital elements of Lisp were missing. Its data structures were strings, numbers and a few other specialized things. Por aquel entonces yo estaba trabajando en el sistema GNU (un sistema operativo libre tipo Unix al que mucha gente llama erróneamente «Linux»). No había ningún editor Emacs que pudiera ejecutarse en Unix y que fuera software libre. No obstante, tenía un amigo que había participado en el desarrollo del Emacs de Gosling. Gosling le había dado permiso, por correo electrónico, para distribuir su propia versión. Me propuso que usara esa versión. Entonces me di cuenta de que el Emacs de Gosling no incluía un Lisp real. Tenía un lenguaje de programación conocido como «mocklisp», que sintácticamente parece Lisp pero que no tiene sus estructuras de datos. Así, los programas no eran datos, y carecía de elementos vitales de Lisp. Sus estructuras de datos eran cadenas de caracteres, números y unos pocos elementos especializados más.

type: Content of: <p>

# type: Content of: <p>

I concluded I couldn't use it and had to replace it all, the first step of which was to write an actual Lisp interpreter. I gradually adapted every part of the editor based on real Lisp data structures, rather than ad hoc data structures, making the data structures of the internals of the editor exposable and manipulable by the user's Lisp programs. Llegué a la conclusión de que no podía utilizarlo y tuve que reemplazarlo por completo, para lo cual el primer paso fue escribir un intérprete de Lisp real. Gradualmente adapté cada componente del editor basándolo en estructuras de datos de Lisp real, en lugar de estructuras de datos ad hoc, y haciendo las estructuras de datos internas del editor visibles y manipulables por los programas Lisp del usuario.

type: Content of: <p>

# type: Content of: <p>

The one exception was redisplay. For a long time, redisplay was sort of an alternate world. The editor would enter the world of redisplay and things would go on with very special data structures that were not safe for garbage collection, not safe for interruption, and you couldn't run any Lisp programs during that. We've changed that since &mdash; it's now possible to run Lisp code during redisplay. It's quite a convenient thing. La excepción fue <span style="font-style:italic;">redisplay</span>. Durante mucho tiempo, <span style="font-style:italic;">redisplay</span> fue una especie de universo paralelo. El editor pasaba al universo de <span style="font-style:italic;">redisplay</span> y todo funcionaba con estructuras de datos muy especiales que no eran seguras para la recolección de memoria [<span style="font-style:italic;">garbage collection</span>], no eran seguras frente a interrupciones, y no podía ejecutar ningún programa Lisp mientras tanto. Posteriormente lo hemos modificado, ahora se puede ejecutar código Lisp concurrentemente con <span style="font-style:italic;">redisplay</span>. Es algo muy práctico.

type: Content of: <p>

# type: Content of: <p>

This second Emacs program was &lsquo;free software&rsquo; in the modern sense of the term &mdash; it was part of an explicit political campaign to make software free. The essence of this campaign was that everybody should be free to do the things we did in the old days at <abbr>MIT</abbr>, working together on software and working with whomever wanted to work with us. That is the basis for the free software movement &mdash; the experience I had, the life that I've lived at the <abbr>MIT</abbr> AI lab &mdash; to be working on human knowledge, and not be standing in the way of anybody's further using and further disseminating human knowledge. Este segundo Emacs era «software libre» en el sentido moderno del término: formaba parte de una campaña política explícita para la elaboración de software libre. La esencia de la campaña era que todo el mundo, debería tener la libertad de hacer lo que nosotros hacíamos en el <abbr>MIT</abbr> de los viejos tiempos: trabajar conjuntamente en el software y colaborar con todo el que quisiera trabajar con nosotros. Esta es la base del movimiento por el software libre, la experiencia que tuve, la vida que viví en el Laboratorio de Inteligencia Artificial del <abbr>MIT</abbr>: trabajar para el conocimiento, y no obstaculizar su uso ni su expansión.

type: Content of: <p>

# type: Content of: <p>

At the time, you could make a computer that was about the same price range as other computers that weren't meant for Lisp, except that it would run Lisp much faster than they would, and with full type checking in every operation as well. Ordinary computers typically forced you to choose between execution speed and good typechecking. So yes, you could have a Lisp compiler and run your programs fast, but when they tried to take <tt>car</tt> of a number, it got nonsensical results and eventually crashed at some point. En esa época, podía construir un ordenador por un precio similar al de otros ordenadores que no estaban pensados para usar Lisp, en el cual Lisp se ejecutaría mucho más rápido y que incluiría validación de tipos en cada operación. Los ordenadores normales típicamente le forzaban a elegir entre velocidad de ejecución y buena validación de tipos. O sea que sí, podía tener un compilador de Lisp y ejecutar sus programas con velocidad, pero cuando sus programas intentaban tomar <tt>car</tt> de un número, obtenían resultados absurdos y terminaban por fallar o bloquearse.

type: Content of: <p>

# type: Content of: <p>

The Lisp machine was able to execute instructions about as fast as those other machines, but each instruction &mdash; a car instruction would do data typechecking &mdash; so when you tried to get the car of a number in a compiled program, it would give you an immediate error. We built the machine and had a Lisp operating system for it. It was written almost entirely in Lisp, the only exceptions being parts written in the microcode. People became interested in manufacturing them, which meant they should start a company. La máquina Lisp podía ejecutar instrucciones aproximadamente a la misma velocidad que esas otras máquinas, pero cada instrucción validaría los tipos de los datos, así cuando usted intentara obtener el <tt>car</tt> de un número en un programa compilado, obtendría un error inmediato. Construimos la máquina y un sistema operativo Lisp para ella. Estaba escrito en Lisp casi en su totalidad, con las únicas excepciones de algunos fragmentos escritos en microcódigo. Hubo quien se interesó en fabricarla, lo que significaba fundar una empresa.

type: Content of: <p>

# type: Content of: <p>

There were two different ideas about what this company should be like. Greenblatt wanted to start what he called a &ldquo;hacker&rdquo; company. This meant it would be a company run by hackers and would operate in a way conducive to hackers. Another goal was to maintain the AI Lab culture <a href="">(3)</a>. Unfortunately, Greenblatt didn't have any business experience, so other people in the Lisp machine group said they doubted whether he could succeed. They thought that his plan to avoid outside investment wouldn't work. Había dos visiones diferentes sobre cómo debería ser esa empresa. Greenblatt quería fundar lo que él llamaba una empresa «hacker». Esto quería decir que sería una empresa gestionada por hackers y que operaría de un modo propicio para hackers. Otro objetivo era mantener la cultura del Laboratorio de Inteligencia Artificial <a href="">(3)</a>. Desafortunadamente, Greenblatt no tenía experiencia empresarial, por lo que otros miembros del grupo de la máquina Lisp expresaron sus dudas sobre el éxito de la empresa. Pensaban que su plan para evitar inversiones externas no funcionaría.

type: Content of: <p>

# type: Content of: <p>

Why did he want to avoid outside investment? Because when a company has outside investors, they take control and they don't let you have any scruples. And eventually, if you have any scruples, they also replace you as the manager. ¿Por qué quería evitar la inversión externa?. Porque cuando una empresa tiene inversores externos, éstos toman el control y no permiten que tenga ningún escrúpulo. Y, si usted tiene algún escrúpulo, finalmente le relevan de sus funciones directivas.

type: Content of: <p>

# type: Content of: <p>

So Greenblatt had the idea that he would find a customer who would pay in advance to buy the parts. They would build machines and deliver them; with profits from those parts, they would then be able to buy parts for a few more machines, sell those and then buy parts for a larger number of machines, and so on. The other people in the group thought that this couldn't possibly work. La idea de Greenblatt era encontrar un cliente que pagara sus máquinas por adelantado para poder comprar las piezas necesarias. Construirían las máquinas y las entregarían; con los beneficios obtenidos podrían comprar las piezas para unas pocas máquinas más, venderlas, comprar piezas para un número mayor de máquinas, y así sucesivamente. Los otros miembros del grupo pensaban que lo más probable era que el plan no saliera bien.

type: Content of: <p>

# type: Content of: <p>

Greenblatt then recruited Russell Noftsker, the man who had hired me, who had subsequently left the AI Lab and created a successful company. Russell was believed to have an aptitude for business. He demonstrated this aptitude for business by saying to the other people in the group, &ldquo;Let's ditch Greenblatt, forget his ideas, and we'll make another company.&rdquo; Stabbing in the back, clearly a real businessman. Those people decided they would form a company called Symbolics. They would get outside investment, not have scruples, and do everything possible to win. Entonces Greenblatt reclutó a Russell Noftsker, la persona que me había contratado, quien había dejado el Laboratorio de Inteligencia Artificial y creado una empresa exitosa. Russell era considerado una persona con aptitudes para los negocios. Demostró serlo al decir a los otros miembros del grupo: «deshagámonos de Greenblatt, olvidad sus ideas y fundaremos otra empresa». Apuñalando por la espalda, sin duda un auténtico hombre de negocios. Decidieron crear una empresa llamada Symbolics. Obtendrían financiación externa, no tendrían escrúpulos y harían todo lo posible por ganar.

type: Content of: <p>

# type: Content of: <p>

But Greenblatt didn't give up. He and the few people loyal to him decided to start Lisp Machines Inc. anyway and go ahead with their plans. And what do you know, they succeeded! They got the first customer and were paid in advance. They built machines and sold them, and built more machines and more machines. They actually succeeded even though they didn't have the help of most of the people in the group. Symbolics also got off to a successful start, so you had two competing Lisp machine companies. When Symbolics saw that LMI was not going to fall flat on its face, they started looking for ways to destroy it. Pero Greenblatt no se dio por vencido. Fundó, junto con los pocos que permanecieron leales a él, Lisp Machines Inc. y siguió adelante con sus planes. ¡Y tuvieron éxito! Consiguieron el primer cliente y éste les pagó por adelantado. Construyeron las máquinas y las vendieron, y construyeron más y más máquinas. Tuvieron éxito a pesar de no contar con la ayuda de la mayor parte de los miembros del grupo. Symbolics también empezó con buen pie, así que había dos empresas de máquinas Lisp compitiendo. Cuando Symbolics vio que LMI no se iba a caer de bruces empezó a buscar maneras de destruirla.

type: Content of: <p>

# type: Content of: <p>

Thus, the abandonment of our lab was followed by &ldquo;war&rdquo; in our lab. The abandonment happened when Symbolics hired away all the hackers, except me and the few who worked at LMI part-time. Then they invoked a rule and eliminated people who worked part-time for <abbr>MIT</abbr>, so they had to leave entirely, which left only me. The AI lab was now helpless. And <abbr>MIT</abbr> had made a very foolish arrangement with these two companies. It was a three-way contract where both companies licensed the use of Lisp machine system sources. These companies were required to let <abbr>MIT</abbr> use their changes. But it didn't say in the contract that <abbr>MIT</abbr> was entitled to put them into the <abbr>MIT</abbr> Lisp machine systems that both companies had licensed. Nobody had envisioned that the AI lab's hacker group would be wiped out, but it was. Por lo tanto, al abandono de nuestro laboratorio le siguió la «guerra» en nuestro laboratorio. El abandono tuvo lugar cuando Symbolics se llevó a todos los hackers, excepto a los pocos que trabajaban a tiempo parcial en LMI y a mí mismo. Luego apelaron a una norma y eliminaron a la gente que trabajaba a tiempo parcial para el <abbr>MIT</abbr>, que tuvo que marcharse, lo cual me dejo sólo a mí. En ese momento el Laboratorio de Inteligencia Artificial estaba indefenso. Y, además, el <abbr>MIT</abbr> había llegado a un acuerdo muy poco sensato con esas dos empresas. Era un contrato a tres bandas por el que ambas empresas autorizaban el uso de las fuentes del sistema de la máquina Lisp. Estas empresas debían permitir al <abbr>MIT</abbr> usar sus modificaciones. Pero el contrato no decía que el <abbr>MIT</abbr> tuviera derecho a instalarlas en las máquinas Lisp para cuyo uso le habían otorgado licencia ambas empresas. Nadie había previsto que el grupo de hackers del Laboratorio de Inteligencia Artificial sería aniquilado, pero lo fue.

type: Content of: <p>

# type: Content of: <p>

So Symbolics came up with a plan <a href="">(4)</a>. They said to the lab, &ldquo;We will continue making our changes to the system available for you to use, but you can't put it into the <abbr>MIT</abbr> Lisp machine system. Instead, we'll give you access to Symbolics' Lisp machine system, and you can run it, but that's all you can do.&rdquo; A Symbolics se le ocurrió un plan <a href="">(4)</a>. Dijeron al laboratorio: «seguiremos permitiéndoles que usen nuestras modificaciones al sistema, pero no podrán instalarlas en la máquina Lisp del <abbr>MIT</abbr>. En su lugar, les daremos acceso al sistema de la máquina Lisp de Symbolics, y podrán ejecutarlo, pero eso será todo lo que podrán hacer.».

type: Content of: <p>

# type: Content of: <p>

This, in effect, meant that they demanded that we had to choose a side, and use either the <abbr>MIT</abbr> version of the system or the Symbolics version. Whichever choice we made determined which system our improvements went to. If we worked on and improved the Symbolics version, we would be supporting Symbolics alone. If we used and improved the <abbr>MIT</abbr> version of the system, we would be doing work available to both companies, but Symbolics saw that we would be supporting LMI because we would be helping them continue to exist. So we were not allowed to be neutral anymore. Esto, en la práctica, significaba que nos exigían posicionarnos en un bando y utilizar, o bien la versión del <abbr>MIT</abbr> del sistema, o bien la versión de Symbolics. Nuestra decisión determinaría a qué sistema irían nuestras mejoras. Si mejorábamos la versión de Symbolics, estaríamos apoyando a Symbolics exclusivamente. Si utilizábamos y mejorábamos la versión del sistema del <abbr>MIT</abbr>, ambas empresas tendrían acceso a nuestro trabajo. Pero Symbolics vio que estaríamos dando apoyo a LMI porque estaríamos ayudando a que siguiera existiendo. Así, no se nos permitió seguir siendo neutrales.

type: Content of: <p>

# type: Content of: <p>

Up until that point, I hadn't taken the side of either company, although it made me miserable to see what had happened to our community and the software. But now, Symbolics had forced the issue. So, in an effort to help keep Lisp Machines Inc. going <a href="">(5)</a> &mdash; I began duplicating all of the improvements Symbolics had made to the Lisp machine system. I wrote the equivalent improvements again myself (i.e., the code was my own). Hasta ese momento yo no había tomado partido por ninguna de las dos empresas, aunque me entristecía ver lo que le había ocurrido a nuestra comunidad y al software. Pero ahora, Symbolics había forzado la situación. Así que, en un intento por ayudar a mantener Lisp Machines Inc. a flote <a href="">(5)</a>, empecé a duplicar todas las mejoras que había hecho Symbolics al sistema de la máquina Lisp. Escribí por mí mismo las mejoras equivalentes de nuevo (es decir, el código era mío).

type: Content of: <p>

# type: Content of: <p>

After a while <a href="">(6)</a>, I came to the conclusion that it would be best if I didn't even look at their code. When they made a beta announcement that gave the release notes, I would see what the features were and then implement them. By the time they had a real release, I did too. Después de un tiempo <a href="">(6)</a>, llegué a la conclusión de que sería mejor ni siquiera mirar su código. Cuando anunciaban la liberación de una actualización del código, podía ver en las notas correspondientes a la nueva liberación cuáles eran las modificaciones introducidas e implementarlas. Cuando ellos hacían finalmente la liberación de las modificaciones, yo también liberaba las mías.

type: Content of: <p>

# type: Content of: <p>

In this way, for two years, I prevented them from wiping out Lisp Machines Incorporated, and the two companies went on. But, I didn't want to spend years and years punishing someone, just thwarting an evil deed. I figured they had been punished pretty thoroughly because they were stuck with competition that was not leaving or going to disappear <a href="">(7)</a>. Meanwhile, it was time to start building a new community to replace the one that their actions and others had wiped out. De esta manera, durante dos años evité que acabaran con Lisp Machines Incorporated, y las dos empresas siguieron adelante. Pero no quería pasarme años y años castigando a alguien, evitando que se cometiera un acto malvado. Supuse que ya habían sido castigados bastante puesto que estaban inmersos en una competición que no tendría fin <a href="">(7)</a>. Por otro lado, había llegado el momento de formar una nueva comunidad que reemplazara a la que las acciones suyas y de otros exterminaron.

type: Content of: <p>

# type: Content of: <p>

The Lisp community in the 70s was not limited to the <abbr>MIT</abbr> AI Lab, and the hackers were not all at <abbr>MIT</abbr>. The war that Symbolics started was what wiped out <abbr>MIT</abbr>, but there were other events going on then. There were people giving up on cooperation, and together this wiped out the community and there wasn't much left. La comunidad Lisp en los setenta no estaba limitada al Laboratorio de Inteligencia Artificial del <abbr>MIT</abbr>, y no todos los hackers estaban en el <abbr>MIT</abbr>. La guerra iniciada por Symbolics fue lo que aniquiló el <abbr>MIT</abbr>, pero había otras actividades en marcha. Había gente que abandonó la cooperación, y esto también contribuyó a extinguir la comunidad.

type: Content of: <p>

# type: Content of: <p>

Once I stopped punishing Symbolics, I had to figure out what to do next. I had to make a free operating system, that was clear &mdash; the only way that people could work together and share was with a free operating system. Una vez que dejé de castigar a Symbolics, tuve que pensar qué hacer a continuación. Tenía que hacer un sistema operativo libre, eso estaba claro. La única forma de que la gente pudiera trabajar conjuntamente y compartir era con un sistema operativo libre.

type: Content of: <p>

# type: Content of: <p>

At first, I thought of making a Lisp-based system, but I realized that wouldn't be a good idea technically. To have something like the Lisp machine system, you needed special purpose microcode. That's what made it possible to run programs as fast as other computers would run their programs and still get the benefit of typechecking. Without that, you would be reduced to something like the Lisp compilers for other machines. The programs would be faster, but unstable. Now that's okay if you're running one program on a timesharing system &mdash; if one program crashes, that's not a disaster, that's something your program occasionally does. But that didn't make it good for writing the operating system in, so I rejected the idea of making a system like the Lisp machine. Al principio pensé en hacer un sistema basado en Lisp, pero me di cuenta de que no sería una buena idea desde el punto de vista técnico. Para tener algo como el sistema de la máquina Lisp, se necesita un tipo de microcódigo llamado "de propósito específico". Eso es lo que hizo posible ejecutar programas con la misma velocidad con la que se ejecutaban programas en otros ordenadores y con el beneficio adicional de la validación de tipos. Sin eso, se habría visto limitado a algo similar a los compiladores Lisp para otras máquinas. Los programas habrían sido más rápidos, pero inestables. Ahora bien, eso puede ser admisible si está ejecutando un programa en un sistema de tiempo compartido: que un programa falle no es un desastre, es algo que ocurre ocasionalmente. Pero no es admisible cuando lo que escribimos es el sistema operativo, así que rechacé la idea de hacer un sistema como la máquina Lisp.

type: Content of: <p>

# type: Content of: <p>

I decided instead to make a Unix-like operating system that would have Lisp implementations to run as user programs. The kernel wouldn't be written in Lisp, but we'd have Lisp. So the development of that operating system, the GNU operating system, is what led me to write the GNU Emacs. In doing this, I aimed to make the absolute minimal possible Lisp implementation. The size of the programs was a tremendous concern. En su lugar, decidí hacer un sistema operativo tipo Unix que tuviera implementaciones Lisp, las cuales serían ejecutadas como programas de usuario. El núcleo no estaría escrito en Lisp, pero tendríamos Lisp. Así que el desarrollo de ese sistema operativo, el sistema operativo GNU, fue lo que me llevó a escribir Emacs de GNU. Al hacerlo, me propuse como meta hacer la implementación de Lisp mínima posible. El tamaño de los programas era algo a tener muy en cuenta.

type: Content of: <p>

# type: Content of: <p>

There were people in those days, in 1985, who had one-megabyte machines without virtual memory. They wanted to be able to use GNU Emacs. This meant I had to keep the program as small as possible. Había gente en aquellos días, en 1985, que tenía máquinas con un megabyte de memoria y sin memoria virtual. Querían poder usar Emacs de GNU. Esto significaba que tenía que hacer que el programa fuera lo más pequeño posible.

type: Content of: <p>

# type: Content of: <p>

For instance, at the time the only looping construct was &lsquo;while&rsquo;, which was extremely simple. There was no way to break out of the &lsquo;while&rsquo; statement, you just had to do a catch and a throw, or test a variable that ran the loop. That shows how far I was pushing to keep things small. We didn't have &lsquo;caar&rsquo; and &lsquo;cadr&rsquo; and so on; &ldquo;squeeze out everything possible&rdquo; was the spirit of GNU Emacs, the spirit of Emacs Lisp, from the beginning. Por ejemplo, en aquel entonces la única estructura iterativa era «while», implementada de forma extremadamente simple. No había ningún mecanismo para interrumpir la ejecución de la sentencia «while» y transferir el control a la instrucción siguiente a dicha sentencia, usted tenía que ejecutar un <tt>catch</tt> y un <tt>throw</tt>, o monitorizar una variable para salir del bucle. Esto muestra hasta dónde estaba llevando las cosas para mantener los programas pequeños. No teníamos «caar», «cadr», etc., había que «exprimirlo lo más posible» ese fué el espíritu del Emacs de GNU, el espíritu de Emacs Lisp desde el principio.

type: Content of: <p>

# type: Content of: <p>

Obviously, machines are bigger now, and we don't do it that way any more. We put in &lsquo;caar&rsquo; and &lsquo;cadr&rsquo; and so on, and we might put in another looping construct one of these days. We're willing to extend it some now, but we don't want to extend it to the level of common Lisp. I implemented Common Lisp once on the Lisp machine, and I'm not all that happy with it. One thing I don't like terribly much is keyword arguments <a href="">(8)</a>. They don't seem quite Lispy to me; I'll do it sometimes but I minimize the times when I do that. Evidentemente, las máquinas actuales tienen mayor capacidad, y ya no hacemos las cosas así. Ahora incluimos «caar», «cadr», etc. Y podríamos añadir otra estructura iterativa un día de estos. Queremos ampliarlo en cierta medida, pero no hasta el punto de Common Lisp. Una vez implementé Common Lisp en una máquina Lisp, y no estoy muy satisfecho con el resultado. Algo que no me gusta gran cosa son los parámetros de palabra clave<a href="">(8)</a>. No me parecen muy de Lisp; los utilizo a veces pero intento hacerlo lo menos posible.

type: Content of: <p>

# type: Content of: <p>

That was not the end of the GNU projects involved with Lisp. Later on around 1995, we were looking into starting a graphical desktop project. It was clear that for the programs on the desktop, we wanted a programming language to write a lot of it in to make it easily extensible, like the editor. The question was what it should be. Ese no fue el fin de los proyectos de GNU implicados con Lisp. Más tarde, alrededor de 1995, estábamos estudiando el inicio de un proyecto de escritorio gráfico. Teníamos claro que queríamos un lenguaje de programación que hiciera fácilmente extensibles, como el editor, los programas accesibles desde el escritorio. La cuestión era cuál.

type: Content of: <p>

# type: Content of: <p>

At the time, <acronym title="Tool Command Language">TCL</acronym> was being pushed heavily for this purpose. I had a very low opinion of <acronym>TCL</acronym>, basically because it wasn't Lisp. It looks a tiny bit like Lisp, but semantically it isn't, and it's not as clean. Then someone showed me an ad where Sun was trying to hire somebody to work on <acronym>TCL</acronym> to make it the &ldquo;de-facto standard extension language&rdquo; of the world. And I thought, &ldquo;We've got to stop that from happening.&rdquo; So we started to make Scheme the standard extensibility language for GNU. Not Common Lisp, because it was too large. The idea was that we would have a Scheme interpreter designed to be linked into applications in the same way <acronym>TCL</acronym> was linked into applications. We would then recommend that as the preferred extensibility package for all GNU programs. En aquel momento, <acronym title="Tool Command Language" lang="en">TCL</acronym> estaba recibiendo un fuerte impulso como lenguaje a utilizar para este propósito. Yo tenía una opinión muy negativa de <acronym>TCL</acronym>, básicamente porque no era Lisp. Tiene un ligerísimo parecido con Lisp, pero no semánticamente, y no es tan limpio. Después, me mostraron un anuncio en el que Sun ofrecía un puesto de trabajo para trabajar con <acronym>TCL</acronym> y hacer de él el «lenguaje de extensión estándar, de facto» en el mundo. Y pensé: «Tenemos que evitar que eso llegue a ocurrir.». Así que empezamos a hacer de Scheme el lenguaje para extensiones estándar para GNU. No Common Lisp, porque era demasiado voluminoso. La idea era tener un intérprete Scheme diseñado para ser enlazado en las aplicaciones de la misma manera que se enlazaba <acronym>TCL</acronym>. Entonces lo recomendaríamos como el paquete para extensiones prefererido para todos los programas GNU.

type: Content of: <p>

# type: Content of: <p>

There's an interesting benefit you can get from using such a powerful language as a version of Lisp as your primary extensibility language. You can implement other languages by translating them into your primary language. If your primary language is <acronym>TCL</acronym>, you can't very easily implement Lisp by translating it into <acronym>TCL</acronym>. But if your primary language is Lisp, it's not that hard to implement other things by translating them. Our idea was that if each extensible application supported Scheme, you could write an implementation of <acronym>TCL</acronym> or Python or Perl in Scheme that translates that program into Scheme. Then you could load that into any application and customize it in your favorite language and it would work with other customizations as well. Usted puede obtener un beneficio interesante del uso de un lenguaje tan potente como un dialecto de Lisp como su lenguaje primario de extensión: puede implementar otros lenguajes traduciéndolos a su lenguaje primario. Si su lenguaje primario es <acronym>TCL</acronym>, usted no podrá implementar Lisp fácilmente mediante su traducción a <acronym>TCL</acronym>. Pero si su lenguaje primario es Lisp, no es tan difícil implementar otros lenguajes traduciéndolos. Nuestra idea era que si cada aplicación extensible admitía Scheme, usted podría escribir una implementación de <acronym>TCL</acronym> o Python o Perl en Scheme que tradujera los programas en esos lenguajes a Scheme. Entonces, usted podría cargar su traductor en cualquier aplicación y extender dicha aplicación usando su lenguaje favorito.

type: Content of: <p>

# type: Content of: <p>

As long as the extensibility languages are weak, the users have to use only the language you provided them. Which means that people who love any given language have to compete for the choice of the developers of applications &mdash; saying &ldquo;Please, application developer, put my language into your application, not his language.&rdquo; Then the users get no choices at all &mdash; whichever application they're using comes with one language and they're stuck with [that language]. But when you have a powerful language that can implement others by translating into it, then you give the user a choice of language and we don't have to have a language war anymore. That's what we're hoping &lsquo;Guile&rsquo;, our scheme interpreter, will do. We had a person working last summer finishing up a translator from Python to Scheme. I don't know if it's entirely finished yet, but for anyone interested in this project, please get in touch. So that's the plan we have for the future. Mientras los lenguajes de extensión sean débiles, los usuarios sólo pueden usar los lenguajes proporcionados por el programador. Lo que significa que a quien le guste utilizar un lenguaje de programación determinado tiene que competir por la elección de los diseñadores de aplicaciones diciendo «por favor, programador, ponga mi lenguaje en su aplicación, no el lenguaje de aquél.». Después los usuarios no tienen ninguna opción, la aplicación viene con un lenguaje y tienen que quedarse con él. Pero cuando dispone de un lenguaje potente que puede implementar otros mediante la traducción, da al usuario la posibilidad de elegir el lenguaje y ya no hay necesidad de una guerra de lenguajes. Esto es lo que esperamos que haga «Guile», nuestro intérprete Scheme. El verano pasado tuvimos a una persona trabajando en la finalización de un traductor de Python a Scheme. No sé si ya está completamente terminado, pero cualquiera que esté interesado en este proyecto, por favor póngase en contacto. Este es nuestro plan para el futuro.

type: Content of: <p>

# type: Content of: <p>

I haven't been speaking about free software, but let me briefly tell you a little bit about what that means. Free software does not refer to price; it doesn't mean that you get it for free. (You may have paid for a copy, or gotten a copy gratis.) It means that you have freedom as a user. The crucial thing is that you are free to run the program, free to study what it does, free to change it to suit your needs, free to redistribute the copies of others and free to publish improved, extended versions. This is what free software means. If you are using a non-free program, you have lost crucial freedom, so don't ever do that. Esta charla no es sobre software libre, pero déjenme comentarles brevemente lo que significa. Software libre no se refiere al precio<sup><a href="" id="IniTransNote1">1</a></sup>, no significa que usted lo obtiene gratis (puede haber pagado por una copia, o haberla obtenido gratis.). Lo que significa es que usted tiene libertad como usuario. Lo fundamental es que es libre de ejecutar el programa, libre de estudiar qué hace, libre de modificarlo para adaptarlo a sus necesidades, libre de redistribuir las copias de otros y libre de publicar versiones mejoradas, ampliadas. Esto es lo que significa software libre. Si utiliza un programa que no sea libre, pierde una libertad crucial, así que no lo haga nunca.

type: Content of: <p>

# type: Content of: <p>

The purpose of the GNU project is to make it easier for people to reject freedom-trampling, user-dominating, non-free software by providing free software to replace it. For those who don't have the moral courage to reject the non-free software, when that means some practical inconvenience, what we try to do is give a free alternative so that you can move to freedom with less of a mess and less of a sacrifice in practical terms. The less sacrifice the better. We want to make it easier for you to live in freedom, to cooperate. El propósito del proyecto GNU es hacer más fácil para la gente rechazar el software que no sea libre, pisotea libertades y domina usuarios, proporcionándole software libre para sustituirlo. Para aquellos que no tienen el valor moral de rechazar el software que no es libre cuando hacerlo representa un inconveniente práctico, lo que intentamos hacer es ofrecer una alternativa libre de forma que puedan mudarse a la libertad de forma más ordenada y con menos sacrificios en términos prácticos. Cuanto menor el sacrificio, mejor. Queremos hacer más fácil vivir en libertad, cooperar.

type: Content of: <p>

# type: Content of: <p>

This is a matter of the freedom to cooperate. We're used to thinking of freedom and cooperation with society as if they are opposites. But here they're on the same side. With free software you are free to cooperate with other people as well as free to help yourself. With non-free software, somebody is dominating you and keeping people divided. You're not allowed to share with them, you're not free to cooperate or help society, anymore than you're free to help yourself. Divided and helpless is the state of users using non-free software. Es una cuestión de libertad para cooperar. Solemos pensar en la libertad y en la cooperación con la sociedad como si fueran opuestos. Pero aquí están del mismo lado. Con software libre es libre de cooperar con otros así como libre de ayudarse a usted mismo. Con software que no es libre, alguien le está dominando y está manteniendo dividida a la gente. No se le permite compartir con el resto, no es libre de cooperar ni de ayudar a la sociedad, como tampoco es libre de ayudarse a usted mismo. Divididos y desamparados es como se encuentran los usuarios de software que no es libre.

type: Content of: <p>

# type: Content of: <p>

We've produced a tremendous range of free software. We've done what people said we could never do; we have two operating systems of free software. We have many applications and we obviously have a lot farther to go. So we need your help. I would like to ask you to volunteer for the GNU project; help us develop free software for more jobs. Take a look at <a href="">http://www.gnu.org/help</a> to find suggestions for how to help. If you want to order things, there's a link to that from the home page. If you want to read about philosophical issues, look in /philosophy. If you're looking for free software to use, look in /directory, which lists about 1900 packages now (which is a fraction of all the free software out there). Please write more and contribute to us. My book of essays, &ldquo;Free Software and Free Society&rdquo;, is on sale and can be purchased at <a href="">www.gnu.org</a>. Happy hacking! Hemos producido una enorme variedad de software libre. Hemos hecho lo que la gente decía que nunca lograríamos hacer; tenemos dos sistemas operativos de software libre. Tenemos muchas aplicaciones y, obviamente, todavía tenemos mucho camino por recorrer. Así que necesitamos su ayuda. Me gustaría pedirles que colaboraran como voluntarios para el proyecto GNU; ayúdennos a desarrollar software libre para más tareas. Echen un vistazo a <a href="">http://www.gnu.org/help/help.es.html</a> para encontrar sugerencias sobre cómo ayudar. Si quieren hacer algún pedido, hay un enlace disponible en la página principal. Si quieren leer sobre cuestiones filosóficas, miren en /philosophy. Si están buscando el software libre disponible, miren en /directory, donde se listan alrededor de 1900 paquetes en la actualidad (lo cual es una fracción de todo el software libre disponible ahí fuera). Por favor, escriban más software y contribuyan. Mi libro de ensayos, «<span style="font-style:italic,">Free Software and Free Society</span>» se encuentra a la venta y puede adquirirse en <a href="">www.gnu.org</a><sup><a href="" id="IniTransNote2">2</a></sup>. ¡Feliz hacking!.

type: Content of: <p>

# type: Content of: <p>

Guy Steele designed the original symmetrical Emacs command set; then he and I began implementing Emacs (on top of TECO), but after one long joint development session, Steele began drifting away, so I finished Emacs. Others particularly including Eugene C. Cicciarelli and Mike McMahon contributed substantially later on. Guy Steele diseñó el conjunto de órdenes simétrico original de Emacs; luego, él y yo empezamos a implementar Emacs (sobre TECO), pero, tras una larga sesión conjunta de desarrollo, Steele empezó a distanciarse, así que yo finalicé Emacs. Otros, entre los que destacan Eugene C. Cicciarelli y Mike McMahon, contribuyeron más tarde de forma sustancial.

type: Content of: <ol><li>

# type: Content of: <p>

Bernie Greenberg says that Dan Weinreb's implementation of Emacs for the Lisp Machine came before Greenberg's implementation for Multics. I apologize for the mistake. Bernie Greenberg dice que Dan Weinreb implementó Emacs para la Máquina Lisp antes de que Greenberg lo implementara para Multics. Pido disculpas por el error.

type: Content of: <ol><li>

# type: Content of: <p>

Greenblatt's plan, as I understood it, was to hire lab people part time, so that they could continue working at the AI Lab. Symbolics hired them full time instead, so they stopped working at MIT. El plan de Greenblatt, según lo entendía yo, era contratar a la gente del laboratorio a tiempo parcial, de forma que pudieran seguir trabajando en el Laboratorio de Inteligencia Artificial. En cambio, Symbolics les contrató a jornada completa, así que dejaron de trabajar en el MIT.

type: Content of: <ol><li>

# type: Content of: <p>

The background of this plan, which I did not state explicitly in the talk, is that during an initial period the ex-AI-Lab hackers, whether at Symbolics or LMI, continued contributing their changes to the MIT Lisp Machine system &mdash; even though the contract did not require this. Symbolics' plan was to rupture this cooperation unilaterally. Las circunstancias de este plan, que no expuse explícitamente en la charla, fueron las siguientes: durante un periodo inicial los hackers que habían dejado el Laboratorio de Inteligencia Artificial, tanto los que trabajaban para Symbolics como los que lo hacían para LMI, continuaron aportando al sistema de la máquina Lisp del MIT sus modificaciones, a pesar de que el contrato no lo exigía. El plan de Symbolics era provocar unilateralmente la ruptura de esta cooperación.

type: Content of: <ol><li>

# type: Content of: <p>

It was not that I cared particularly about the fate of LMI, but rather I did not want to let Symbolics gain through its aggression against the AI Lab. No era que me preocupara especialmente el destino de LMI, sino más bien que no quería que Symbolics saliera vencedora gracias a haber agredido como lo hizo al Laboratorio de Inteligencia Artificial.

type: Content of: <ol><li>

# type: Content of: <p>

This statement has been misconstrued as saying that I never, ever looked at Symbolics' code. Actually it says I did look, at first. The Symbolics source code was available at MIT, where I was entitled to read it, and at first that's how I found out about their changes. Esta afirmación ha sido malinterpretada atribuyéndole el significado de que nunca miré el código de Symbolics. En realidad dice que sí lo hice, al principio. El código fuente de Symbolics estaba disponible en el MIT, por lo tanto yo podía leerlo, y al principio era así como me enteraba de sus modificaciones.

type: Content of: <ol><li>

# type: Content of: <p>

But that meant I had to make a special effort to solve each problem differently, in order to avoid copying Symbolics code. After a while, I concluded it was better not to even look. That way I could write code in whatever way was best, without concern for what might be in Symbolics' code. Pero eso significaba que tenía que hacer un esfuerzo especial para resolver cada problema de forma diferente, para evitar que mi código fuera una copia del código de Symbolics. Pasado un tiempo, llegué a la conclusión de que era mejor no mirarlo. De esa forma podía escribir el código de la forma que considerara mejor sin preocuparme de lo que contenía el código de Symbolics.

type: Content of: <ol><li><p>

# type: Content of: <p>

Symbolics at one point protested to MIT that my work, by thwarting their plan, had cost Symbolics a million dollars. En una ocasión Symbolics se quejó al MIT de que mi trabajo, al frustrar sus planes, le había costado un millón de dólares.

type: Content of: <ol><li>

# type: Content of: <p>

I don't mind if a very complex and heavyweight function takes keyword arguments. What bothers me is making simple basic functions such as &ldquo;member&rdquo; use them. No me molesta si una función muy compleja y avanzada toma parámetros de palabras clave. Lo que me molesta es ponerlas en funciones simples y básicas como «member».

type: Content of: <ol><li>

*GNUN-SLOT: TRANSLATOR'S NOTES* <b>Notas del traductor</b>:
<ol>
<li id="TransNote1">Software Libre es la traducción de <span style="font-style:italic;">Free Software</span>. Aquí se hace referencia al doble significado del término inglés <span style="font-style:italic;">Free</span>, que puede significar tanto «libre» como «gratis». <a href="" >Regresar al texto</a>.</li>
<li id="TransNote2">Existe una traducción del libro publicada en España por el editorial Traficantes de Sueños. <a href="">Regresar al texto</a>.</li></ol>

TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.
type: Content of: <div>

# type: Content of: <div>

Please send general FSF &amp; GNU inquiries to <a href="">&lt;address@hidden&gt;</a>. There are also <a href="">other ways to contact</a> the FSF. Broken links and other corrections or suggestions can be sent to <a href="">&lt;address@hidden&gt;</a>. Envíe sus consultas acerca de la FSF y GNU a <a href="">&lt;address@hidden&gt;</a>. Existen también <a href="">otros medios para contactar</a> con la FSF. <br /> Para avisar de enlaces rotos y proponer otras correcciones o sugerencias, diríjase a <a href="">&lt;address@hidden&gt;</a>.

type: Content of: <div><div><p>

# type: Content of: <div><p>

Please see the <a href="">Translations README</a> for information on coordinating and submitting translations of this article. El equipo de traductores al español se esfuerza por ofrecer traducciones fieles al original y de buena calidad, pero no estamos libres de cometer errores.<br /> Por favor envíe sus comentarios y sugerencias sobre las traducciones a <a href="">&lt;address@hidden&gt;</a>. </p><p>Consulte la <a href="">Guía para las traducciones</a> para obtener información sobre la coordinación y el envío de traducciones de las páginas de este sitio web.

TRANSLATORS: Ignore the original text in this paragraph,
replace it with the translation of these two:
We work hard and do our best to provide accurate, good quality
translations. However, we are not exempt from imperfection.
Please send your comments and general suggestions in this regard
to <a href="">
&lt;address@hidden&gt;</a>.</p>
<p>For information on coordinating and submitting translations of
our web pages, see <a
href="">Translations
README</a>.
type: Content of: <div><div><p>

#

Copyright &copy; 2003, 2007, 2013, 2014 Free Software Foundation, Inc. Copyright &copy; 2003, 2007, 2013, 2014 Free Software Foundation, Inc.

type: Content of: <div><p>

# type: Content of: <div><p>

This page is licensed under a <a rel="license" href="">Creative Commons Attribution-NoDerivs 3.0 United States License</a>. Esta página está bajo licencia <a rel="license" href="">Creative Commons Reconocimiento-SinObraDerivada 3.0 Estados Unidos de América</a>.

type: Content of: <div><p>

*GNUN-SLOT: TRANSLATOR'S CREDITS* <span style="text-weight:bold;">Traducción</span>: Rafa Pereira, julio 2009.

TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.
type: Content of: <div><div>

# type: Content of: <div><div>

Updated: Última actualización:

timestamp start
type: Content of: <div><p>

# type: Content of: <div><p>

Attachment: my-rms-lisp.es.po
Description: Text Data

Attachment: my-rms-lisp.es.mo
Description: application/gettext-translation


reply via email to

[Prev in Thread] Current Thread [Next in Thread]