📐 AutoLISP — 1986

⬅️ Atlas · 🧟 Lenguajes que siguen vivos · 📚 Índice de clases

Probablemente el Lisp con más usuarios del mundo, y casi ninguno se considera programador. Arquitectos, ingenieros civiles, delineantes y proyectistas llevan cuarenta años automatizando AutoCAD con AutoLISP. Muchos estudios tienen miles de líneas de .lsp acumuladas que son, en la práctica, su ventaja competitiva.

🎯 Por qué está en este programa

Criterio de inclusión: AutoLISP viene incluido en AutoCAD y Autodesk lo mantiene explícitamente como el mecanismo de automatización del producto, con documentación actualizada en cada versión anual. No es un lenguaje que sobreviva en un rincón: se distribuye con uno de los programas de ingeniería más instalados del planeta.

Entra porque es el mejor ejemplo vivo de un concepto que el núcleo no toca: el lenguaje incrustado en una aplicación anfitriona. AutoLISP no tiene main, no tiene fichero ejecutable y no sirve para nada fuera de AutoCAD: su "biblioteca estándar" son los objetos del dibujo. Es la misma relación que VBA tiene con Excel y que Lua tiene con un motor de videojuegos, y es el modelo de la Parte 10: el lenguaje como capa de guion sobre un programa que ya existe. Entenderlo cambia cómo se lee cualquier sistema de plugins.

Año 1986, en AutoCAD Release 2.18
Autoría Autodesk, sobre el intérprete XLISP de David Betz
Familia Lisp — dialecto reducido y especializado
Paradigma Funcional e imperativo, orientado a la manipulación del dibujo
Tipado Dinámico, con los tipos del dibujo (puntos, nombres de entidad, conjuntos)
Memoria Gestionada por el intérprete de AutoCAD
Ejecución Interpretado dentro de AutoCAD; compilable a .fas / .vlx
Estado 🟢 Muy vivo dentro de su nicho — arquitectura, ingeniería, construcción, CAD

📜 Historia

En 1986 Autodesk necesitaba que AutoCAD fuera personalizable sin recompilarlo. La solución fue incrustar un intérprete de Lisp: se partió de XLISP, una implementación pequeña y libre de David Betz, y se le añadieron funciones para hablar con el dibujo. La elección de Lisp no fue casual — un intérprete de Lisp es notablemente pequeño y fácil de empotrar, la misma razón por la que Lua triunfó después en los videojuegos.

En 1997 Autodesk adquirió Vital LISP, de Basis Software, y lo integró como Visual LISP: un entorno de desarrollo dentro de AutoCAD (VLIDE), un compilador a ficheros .fas/.vlx para proteger el código, y —lo más importante— el acceso al modelo de objetos ActiveX de AutoCAD a través de las funciones vla-*. Eso duplicó de golpe lo que se podía hacer.

Durante casi cuarenta años Autodesk ha añadido lenguajes alternativos —VBA, ObjectARX en C++, .NET, más recientemente extensiones en JavaScript— y AutoLISP ha sobrevivido a todos. La razón es sociológica más que técnica: es el único que un ingeniero sin formación en programación aprende en una tarde y usa el mismo día.

🏭 Dónde sobrevive hoy

Existen además dialectos compatibles en clones de AutoCAD (BricsCAD, ZWCAD, GstarCAD), lo que amplía su alcance más allá de Autodesk.

🧠 Por qué no ha muerto

1. Está donde está el dibujo. Una rutina de AutoLISP accede a la geometría, a las capas, a los bloques y a los atributos directamente, sin API externa, sin instalación y sin permisos de administrador. Ese último punto no es menor: en muchas empresas, un ingeniero puede cargar un .lsp pero no puede instalar software.

2. La curva de entrada es diminuta. Tres funciones —setq, command y getpoint— bastan para ser útil. Y como el intérprete está vivo dentro de AutoCAD, se prueba escribiendo en la línea de comandos y viendo el resultado en pantalla al instante. Es un REPL con salida gráfica.

3. Cuarenta años de código acumulado. Miles de estudios dependen de rutinas escritas por alguien que ya no está, que funcionan y que nadie va a reescribir.

4. Autodesk lo mantiene deliberadamente. Romper AutoLISP rompería a una parte sustancial de su base instalada.

🔄 Lo que se ha modernizado

Autodesk ha invertido en AutoLISP más recientemente de lo que la gente supone:

⚙️ Cómo se ejecuta hoy

AutoLISP solo existe dentro de AutoCAD (o de un clon compatible). No hay intérprete de línea de comandos, no hay ejecutable, no hay CI posible.

; Cargar desde la línea de comandos de AutoCAD:
(load "C:/rutinas/totalventa.lsp")

; O con el cuadro de diálogo:  APPLOAD
; Y para que se cargue en cada dibujo: incluirlo en acaddoc.lsp

Ficheros del ecosistema: .lsp (fuente), .fas (compilado con Visual LISP), .vlx (aplicación empaquetada), .mnl (se carga automáticamente con el menú del mismo nombre), acad.lsp y acaddoc.lsp (carga automática al arrancar y por cada dibujo, respectivamente).

Herramientas: el editor integrado VLIDE (VLISP en la línea de comandos), y hoy también la extensión AutoCAD AutoLISP Extension para Visual Studio Code, que Autodesk publica y que permite editar y depurar contra una sesión de AutoCAD abierta.

🧪 El programa de la clase 041 en AutoLISP

⚠️ Contrato adaptado, y declarado. AutoLISP no tiene stdin ni stdout: sus entradas son la línea de comandos de AutoCAD y el usuario, y su salida es el dibujo o la propia línea de comandos. El cálculo es el mismo; la forma de entrar y salir es la del anfitrión. No se verifica en CI: requiere una instalación de AutoCAD.

;;; totalventa.lsp — clase 041 adaptada a AutoCAD
;;; El prefijo c: convierte la función en un COMANDO de AutoCAD.

(defun c:TOTALVENTA ( / precio cantidad descuento total )

  (setq precio    (getreal "\nPrecio unitario: "))
  (setq cantidad  (getreal "\nCantidad: "))
  (setq descuento (getreal "\nDescuento (0 a 1): "))

  (setq total (* precio cantidad (- 1.0 descuento)))

  (princ (strcat "\nTotal: " (rtos total 2 2)))
  (princ)
)

Recorrido, línea a línea.

Y ahora lo que hace de AutoLISP lo que es: el acceso al dibujo.

(defun c:RADIO ( / ent datos )
  (setq ent   (car (entsel "\nSelecciona un círculo: ")))
  (setq datos (entget ent))
  (princ (strcat "\nTipo: "  (cdr (assoc 0  datos))))
  (princ (strcat "\nRadio: " (rtos (cdr (assoc 40 datos)) 2 3)))
  (princ)
)

entsel deja al usuario señalar un objeto con el ratón; entget devuelve ese objeto como una lista de asociaciones, y assoc extrae un campo por su número. Esos números son los códigos de grupo DXF: el 0 es el tipo de entidad, el 8 la capa, el 10 el punto de inserción, el 40 el radio. No son arbitrarios: son el formato de intercambio de AutoCAD, y aprenderlos es aprender el modelo de datos del programa.

Ahí está la lección: la biblioteca estándar de un lenguaje incrustado es el modelo de objetos del anfitrión. Aprender AutoLISP es, en un 20 %, aprender Lisp, y en un 80 %, aprender AutoCAD.

🔍 Qué reconocer si vienes de otro lenguaje

Si conoces… En AutoLISP es…
x = 5 (setq x 5)
def f(a, b): (defun f (a b / locales) ...)
Variable local Detrás de la / en la lista de argumentos — no hay let clásico
print(x) (princ x) / (prompt x) / (alert x)
str(x) (rtos x 2 2) para reales, (itoa x) para enteros
int(s) / float(s) (atoi s) / (atof s)
a + b (+ a b)
if / else (if condicion entonces si-no)
for x in lista (foreach x lista ...)
dict["clave"] (cdr (assoc clave lista)) — listas de asociación
Llamar a la app anfitriona (command "_LINE" p1 p2 "") — ejecuta un comando de AutoCAD
API orientada a objetos Las funciones vla-* de Visual LISP sobre ActiveX

⚠️ Errores comunes al leerlo

📚 Fuentes y bibliografía


⏮️ Volver al Atlas · 🧟 Los lenguajes que siguen vivos · 🔗 Relacionadas: Common Lisp · VBA · Tcl/Tk