L’histoire d’AutoLISP recèle de nombreuses anecdotes surprenantes et de détails méconnus qui révèlent comment ce qui devait être un simple outil expérimental est devenu l’une des interfaces de programmation les plus influentes du monde de la CAO. Cette saga débute dans les laboratoires du MIT dans les années 1950 et traverse des décennies d’innovations, d’acquisitions stratégiques et de décisions techniques audacieuses qui ont façonné l’AutoCAD® moderne.
Les Débuts Mystérieux et Expérimentaux
Un Lancement dans l’Ombre
L’une des anecdotes les plus surprenantes concernant AutoLISP est que ce langage révolutionnaire a fait ses premiers pas dans le plus grand secret1. AutoLISP est apparu pour la première fois dans AutoCAD® version 2.15, mais de manière si discrète qu’il n’était même pas documenté jusqu’à la version 2.172. Cette approche furtive révèle l’incertitude d’Autodesk® quant au potentiel de cette nouvelle fonctionnalité.
Plus révélateur encore, le terme « AutoLISP » n’existait pas initialement2. Autodesk® se référait plutôt à ces nouvelles capacités sous l’appellation énigmatique de "le nouveau ressource de Variables et Expressions"2. Cette dénomination vague témoigne du caractère expérimental de l’initiative et de l’hésitation de la société à s’engager pleinement derrière ce qui pourrait sembler être une fonctionnalité trop technique pour le grand public.
Une Simplicité Troublante
La philosophie initiale d’Autodesk® était que AutoLISP serait exclusivement destiné aux programmeurs expérimentés2. Cependant, la réalité a complètement déjoué ces prévisions. Le « brilhantisme accessible » d’AutoLISP a surpris tout le monde, y compris ses créateurs2. Des utilisateurs sans aucune expérience en programmation ont découvert qu’ils pouvaient facilement écrire quelques lignes de code pour automatiser les opérations fastidieuses et répétitives d’AutoCAD®2.
Cette révélation a créé un phénomène inattendu : un langage de programmation qui démocratisait l’automatisation CAO. L’ironie est frappante - un outil conçu pour l’élite technique est devenu accessible au commun des mortels, transformant fondamentalement la relation entre les utilisateurs et leur logiciel de conception.
;; =========================================================
;; PROGRAMME AUTOLISP : "Le Café du Dessinateur Fatigué"
;; =========================================================
;; Auteur : Un développeur qui a bu trop de café
;; But : Illustrer AutoLISP tout en restant éveillé
;; =========================================================
(defun c:cafe-break () ; Commande principale - parce qu'on a tous besoin d'une pause
;; Déclaration des variables locales (comme nos bonnes résolutions)
(setq niveau-fatigue 9000 ; Plus de 9000 ! (référence DBZ obligatoire)
tasses-cafe 0 ; Compteur de tasses (on commence toujours à zéro)
motivation-initiale 100 ; L'optimisme du matin
bugs-corriges 0 ; Toujours espérer...
patience-restante 50) ; Denrée rare en fin de journée
;; Affichage du titre avec style ASCII (parce qu'on aime se la jouer)
(princ "\n╔════════════════════════════════════════╗")
(princ "\n║ SIMULATEUR DE JOURNÉE DE TRAVAIL ║")
(princ "\n║ (Version AutoCAD Inside) ║")
(princ "\n╚════════════════════════════════════════╝\n")
;; Boucle principale - comme notre routine quotidienne
(while (and (> patience-restante 0) (< tasses-cafe 15)) ; Limite de sécurité !
;; Condition matinale (if/then/else - la base d'AutoLISP)
(if (< tasses-cafe 3)
(progn ; progn = "fais tout ça d'un coup"
(princ (strcat "\n[CAFE] Tasse n°" (itoa (setq tasses-cafe (1+ tasses-cafe)))
" - État : Zombie fonctionnel"))
(setq niveau-fatigue (- niveau-fatigue 500))) ; Le café, ça aide
;; Sinon (partie else)
(progn
(princ (strcat "\n[TURBO] Tasse n°" (itoa (setq tasses-cafe (1+ tasses-cafe)))
" - État : Hyperactif dangereux !"))
(setq niveau-fatigue (+ niveau-fatigue 200)))) ; Trop de café = stress
;; Test de conditions multiples avec cond (comme un switch amélioré)
(cond
((> niveau-fatigue 10000) ; Cas critique
(princ "\n[ALERTE] Niveau de fatigue critique ! Redémarrage du cerveau..."))
((< motivation-initiale 20) ; Motivation en berne
(princ "\n[ERREUR] Motivation.exe a cessé de fonctionner"))
(T ; Cas par défaut (T = True en LISP)
(princ "\n[POWER] Encore debout ! Les algorithmes tremblent devant moi !")))
;; Calculs mathématiques complexes (ou pas)
(setq productivite (* (/ motivation-initiale niveau-fatigue)
(sqrt tasses-cafe)
(sin patience-restante))) ; Formule scientifique™
;; Gestion des listes (très important en LISP)
(setq excuses-du-jour '("Le serveur était lent"
"Mon chat a marché sur le clavier"
"Fusion Git cosmique"
"Rétrograde de Mercure")) ; Liste des classiques
;; Sélection aléatoire d'une excuse (nth + random)
(setq excuse-active (nth (rem (getvar "DATE") 4) excuses-du-jour))
(princ (strcat "\n[EXCUSE] Excuse du moment : " excuse-active))
;; Manipulation de chaînes (strcat, substr, etc.)
(setq message-status (strcat "Productivité: "
(substr (rtos productivite 2 2) 1 5)
"% | Patience: "
(itoa patience-restante)
"/50"))
(princ (strcat "\n[STATS] " message-status))
;; Décrémentation de la patience (parce que la réalité)
(setq patience-restante (- patience-restante (+ 2 (rem tasses-cafe 3))))
;; Petit délai pour faire semblant de travailler
(command "._delay" 1000) ; 1 seconde = éternité en informatique
) ; Fin de la boucle while
;; Conclusion épique
(princ "\n\n*** SESSION TERMINÉE ! ***")
(princ (strcat "\n[RAPPORT] Statistiques finales:"
"\n > Tasses de café consommées: " (itoa tasses-cafe)
"\n > Niveau de fatigue final: " (itoa niveau-fatigue)
"\n > Bugs corrigés: " (itoa bugs-corriges) " (toujours zéro)"
"\n > Patience restante: " (itoa patience-restante) "%"))
;; Message final philosophique
(if (< patience-restante 0)
(princ "\n\n[SAGESSE] 'There is no spoon... mais il y a toujours du café !'")
(princ "\n\n[VICTOIRE] Bravo ! Tu as survécu à une journée type de développeur !"))
;; Fonction de nettoyage (bonne pratique)
(setvar "CMDECHO" 1) ; Remet l'écho des commandes
(princ "\n\n[INFO] Tapez CAFE-BREAK pour relancer le simulateur !")
(princ) ; Sortie propre (return nil silencieusement)
) ; Fin de la fonction principale
;; Fonction bonus : générateur de commentaires de code
(defun genere-commentaire-inutile (/ commentaires choix)
;; Parce qu'on n'a jamais assez de commentaires inutiles
(setq commentaires '("TODO: Optimiser cette ligne"
"FIXME: Ça marche mais je sais pas pourquoi"
"HACK: Ne pas toucher, c'est magique"
"NOTE: Future moi va me détester"
"WARNING: Abandon hope, all ye who enter here"))
(setq choix (nth (rem (fix (* (getvar "DATE") 12345)) 5) commentaires))
(princ (strcat "\n[COMMENT] Commentaire auto-généré : " choix))
)
;; Initialisation automatique du café
(princ "\n[INIT] Programme AutoLISP chargé ! Tapez CAFE-BREAK pour commencer.")
(princ "\n[INFO] Ce programme illustre : variables, boucles, conditions, listes, fonctions et strings !")
(princ)
L’Héritage Caché du LISP et les Origines Académiques
Des Racines dans l’Intelligence Artificielle
L’histoire secrète d’AutoLISP commence bien avant AutoCAD®, dans les couloirs du prestigieux MIT à la fin des années 195013. John McCarthy et son équipe de chercheurs en informatique ont développé le premier interpréteur LISP, une langue originellement conçue pour les applications d’intelligence artificielle13. Cette origine explique certaines particularités d’AutoLISP qui peuvent sembler étranges aux programmeurs habitués aux langages conventionnels.
LISP, acronyme de « LISt Processing », était la deuxième plus ancienne langue de programmation de haut niveau encore utilisée par les ordinateurs modernes, après FORTRAN12. Cette longévité exceptionnelle témoigne de la robustesse conceptuelle de l’approche, mais cache aussi pourquoi AutoLISP présente certaines caractéristiques uniques qui déroutent les nouveaux utilisateurs.
La Transition par XLISP
Un détail fascinant mais peu connu est qu’AutoLISP ne dérive pas directement du LISP original, mais d’un dialecte intermédiaire appelé XLISP (eXperimental LISP), développé par David Betz vers 198012. Cette filiation explique certaines limitations d’AutoLISP par rapport au LISP standard, notamment l’absence de système de macros, de définitions d’enregistrements, de tableaux, et de fonctions avec un nombre variable d’arguments1.
Cette simplification délibérée n’était pas un accident mais une décision stratégique. XLISP était conçu pour être léger et facilement intégrable, qualités essentielles pour son intégration future dans AutoCAD®. Cependant, cette histoire révèle aussi pourquoi AutoLISP peut parfois sembler limité aux programmeurs LISP expérimentés - il leur manque des fonctionnalités qu’ils considèrent comme fondamentales.
Les Défis Techniques Cachés et l’Architecture Interne
Une Intégration Révolutionnaire
L’aspect le plus remarquable d’AutoLISP, souvent invisible aux utilisateurs, est la manière dont il accède à la base de données interne DWG™ d’AutoCAD®1. Cette intégration profonde était révolutionnaire pour l’époque et reste impressionnante aujourd’hui. Les propriétés des entités graphiques sont exposées à AutoLISP sous forme de listes d’association où les valeurs sont appariées avec des « codes de groupe » AutoCAD® qui indiquent des propriétés telles que les points de définition, les rayons, les couleurs, les calques, et les types de lignes1.
Cette architecture révèle une décision technique audacieuse : plutôt que de créer une API abstraite, Autodesk® a choisi d’exposer directement la structure interne du fichier DWG™. Cette approche offrait une puissance et une flexibilité extraordinaires, mais créait aussi une dépendance étroite entre le code AutoLISP et l’évolution du format DWG™.
Le Mystère des Limites Volontaires
Une curiosité technique d’AutoLISP est qu’il s’agit d’un LISP délibérément simplifié1. Il manque de nombreuses fonctionnalités du LISP standard : système de macros, définitions d’enregistrements, tableaux, fonctions avec nombre variable d’arguments, et liaisons let1. Ces omissions n’étaient pas des oublis mais des choix délibérés pour maintenir la simplicité et la performance dans le contexte d’AutoCAD®.
Cette philosophie de « moins c’est plus » explique pourquoi AutoLISP a pu conquérir un public si large. En sacrifiant la puissance théorique du LISP complet, les développeurs ont créé un outil beaucoup plus accessible et prévisible pour les non-programmeurs.
L’Époque Visual LISP et les Acquisitions Stratégiques
Le Rachat Mystérieux de Vital-LISP
L’une des histoires les plus intrigantes de l’évolution d’AutoLISP concerne l’acquisition de Vital-LISP par Autodesk®1. Cette version considérablement améliorée d’AutoLISP avait été développée et commercialisée par une société tierce, Basis Software1. Vital-LISP incluait un environnement de développement intégré (IDE), un débogueur, un compilateur, et le support ActiveX - des fonctionnalités révolutionnaires pour l’époque1.
Le rachat de cette technologie par Autodesk®, son renommage en « Visual LISP », et son intégration d’abord comme module complémentaire pour AutoCAD® 14 puis comme composant standard d’AutoCAD® 2000, révèle une stratégie délibérée de la société pour maintenir la pertinence d’AutoLISP face à la concurrence émergente de VBA et .NET1. Cette acquisition représentait un investissement majeur dans l’écosystème LISP à un moment où d’autres vendeurs pariaient sur des technologies différentes.
L’Influence Inattendue sur la Concurrence
Un aspect remarquable mais souvent ignoré est l’influence qu’AutoLISP a exercée sur l’ensemble du marché CAO1. Le succès d’AutoLISP était si important qu’autres fournisseurs d’applications de conception assistée par ordinateur ont ajouté la fonctionnalité AutoLISP à leurs produits1. Bricscad, IntelliCAD, DraftSight et d’autres ont implémenté la compatibilité AutoLISP, permettant aux utilisateurs de considérer ces alternatives à AutoCAD®1.
Cette adoption généralisée a créé un phénomène unique dans l’industrie logicielle : un langage propriétaire devenu un standard de facto, forçant même les concurrents à maintenir la compatibilité. Cette situation révèle la puissance de l’écosystème créé autour d’AutoLISP, avec ses milliers d’utilitaires et d’applications développés au fil des années1.
Conclusion
L’histoire d’AutoLISP est celle d’une révolution accidentelle qui a transformé le paysage de la CAO. Parti d’un experiment non documenté inspiré de recherches académiques en intelligence artificielle, AutoLISP est devenu un standard industriel qui influence encore aujourd’hui le développement de logiciels techniques. Les anecdotes et curiosités révélées - du mystérieux lancement sans nom aux acquisitions stratégiques, en passant par les choix techniques audacieux - illustrent comment l’innovation peut émerger de décisions apparemment mineures et évoluer bien au-delà des intentions originales de ses créateurs.
Cette saga continue de nos jours, avec AutoLISP maintenant inclus même dans AutoCAD LT® 2024, marquant un retour surprenant pour un langage que certains considéraient comme dépassé1. L’héritage d’AutoLISP démontre que la simplicité accessible peut triompher de la complexité technique, et qu’un outil bien conçu peut créer un écosystème durable qui transcende les générations technologiques.
Citations:
- AutoLISP - Wikipedia
- AUTOLISP
- https://documentation.help/AutoCAD-ALISP-VLISP/documentation.pdf
- https://static.au-uw2-prd.autodesk.com/Class_Handout_SD125181_Advanced_AutoLISPfrom_Hack_to_Expert_Darren_Young_2.pdf
- Incredible AutoCAD 2018 Easter Egg | hedproject
- https://forums.autodesk.com/autodesk/attachments/autodesk/127/80864/2/autocad-lt-auto-lisp-guide-A4-fr.pdf
- https://tbn2.blogspot.com/p/autolisp.html
- https://rutube.ru/video/f6c2f93053519fc9ab567f78b17ef4a4/
- https://www.youtube.com/watch?v=_saz6NYPM8E
- https://forums.autodesk.com/t5/autocad-forum-portugues/repositorio-autolisp/td-p/11593337
- https://en.wikipedia.org/wiki/Autodesk
- https://firstratemold.com/the-history-of-autolisp/
- https://www.fourmilab.ch/autofile/e5/chapter2_35.html
- https://ukcommunity.arkance.world/hc/en-us/articles/21550217390610-AutoCAD-2016-A-Brief-History-Of-AutoLISP-And-Its-Functionality
- https://aut5826.fau.usp.br/autolisp.pdf
- https://www.linkedin.com/posts/charles-christin_autocad-lisp-also-known-as-autolisp-is-activity-7219592534719700994-J4CZ
- https://www.youtube.com/watch?v=M-RBltW4DpU
- https://tbn2.blogspot.com/p/autolisp2.html
- https://lispbox.wordpress.com/history-of-autolisp/
- https://www.youtube.com/watch?v=12PqU-zJVhs
- https://help.autodesk.com/view/OARX/2025/ENU/?guid=GUID-C2DD109E-A90A-43EC-A620-3C2A582EF7A6
- https://help.autodesk.com/view/ACDLT/2025/PTB/?guid=GUID-36F8701B-7AB7-47BE-AC31-8508A2DF46A2
- https://www.youtube.com/watch?v=fbKjkUQmlpg
- https://help.autodesk.com/view/OARX/2025/ENU/?guid=GUID-265AADB3-FB89-4D34-AA9D-6ADF70FF7D4B
- https://www.manusoft.com/resources/anecdotes.html
- https://www.reddit.com/r/lisp/comments/17pk38b/how_helpful_are_llms_with_lisp/
- https://www.manusoft.com/software/freebies/lisp.html
- https://www.youtube.com/playlist?list=PL-Uk9_AI5M32ZYUArh8ha9Dvujpn1WTUf
- https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/autolisp-for-only-read/td-p/12586123
- http://apps.autodesk.com/ECSCAD/fr/Detail/HelpDoc?id=2035634683864922563&ln=en&os=Win32_64live
- http://www.autolisp.com.br/forum/viewtopic.php?t=990
- https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/trouver-le-nom-d-origine-d-un-bloc-dynamique-commandes-de-type/td-p/7712086
- https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/implementing-oop-within-autolisp/td-p/8240671
- https://help.autodesk.com/view/ACDLT/2024/ENU/?guid=GUID-CC89231D-E10F-47D0-A1FD-A989D24C7105
- https://forums.autodesk.com/autodesk/attachments/autodesk/130/356436/1/Vlide%20and%20Vlisp%20Reference.pdf
- https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/is-it-possible-to-create-a-lisp-that-remembers-your-previous/td-p/8046334
- https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/wait-for-manual-input-before-moving-to-next-cycle-in-autolisp/td-p/8126681
- https://www.cadtutor.net/forum/topic/70282-commands-after-loop-repeat/
- https://stackoverflow.com/questions/65950073/how-to-do-looping-in-lisp
- https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/what-is-the-difference-between-lisp-common-lisp-and-autolisp/td-p/8415907
- https://help.autodesk.com/view/OARX/2025/ENU/?guid=GUID-49AAEA0E-C422-48C4-87F0-52FCA491BF2C
- https://www.reddit.com/r/lisp/comments/a5n8k5/question_is_autolisp_a_legit_form_of_lisp/
- https://doc.arcgis.com/en/arcgis-for-autocad/latest/commands-api/autolisp-samples.htm
- https://damassets.autodesk.net/content/dam/autodesk/products/autocad-lt/acdlt-visual-benefits/how-to-use-autocad-lt-and-autolisp-brochure-en.pdf
- https://pt.scribd.com/document/185780356/Comecando-Visual-LISP
- https://www.fabricadoprojeto.com.br/2011/04/apostila-de-autolisp-programando-em-autocad/
- https://pt.scribd.com/document/60856876/Auto-Lisp
- https://marketplace.visualstudio.com/items?itemName=Autodesk.autolispext
- https://documentation.help/AutoCAD-ALISP-VLISP/
- https://itocad.wordpress.com/2020/11/05/autocad-autolisp/
- https://help.autodesk.com/cloudhelp/2024/FRA/AutoCAD-AutoLISP/files/GUID-49AAEA0E-C422-48C4-87F0-52FCA491BF2C.htm
- https://pt.wikipedia.org/wiki/AutoLISP
- https://static.au-uw2-prd.autodesk.com/handout_7297_SD7297.pdf
- https://help.autodesk.com/cloudhelp/2024/PTB/AutoCAD-LT-AutoLISP/files/GUID-AD10051A-822B-4E94-A615-F2A074E878C5.htm
- https://www.autodesk.com/blogs/autocad/create-load-startup-lisp-routine/?redirected=1
- https://stackoverflow.com/questions/74193923/how-to-get-list-of-values-and-not-names-of-variables-in-autolisp
- https://www.lee-mac.com/localising.html
- https://help.autodesk.com/cloudhelp/2022/ENU/AutoCAD-AutoLISP/files/GUID-9EDF48C2-1678-4DC3-BFD6-9D1DEAC525F0.htm
- https://blog.draftsperson.net/autolisp-lesson-8-looping/
- https://www.youtube.com/watch?v=TVtjvrkksb4
- https://catalogimages.wiley.com/images/db/pdf/9781118798812.excerpt.pdf
- https://forum.arduino.cc/t/getting-a-loop-to-execute-in-a-defined-amount-of-time/919975
- https://www.youtube.com/watch?v=uAxVR9DnBgk
- http://www.geocities.ws/kamichetty.geo/lisp_ang.html
- https://help.autodesk.com/cloudhelp/2024/ESP/AutoCAD-MAC-AutoLisp/files/GUID-49AAEA0E-C422-48C4-87F0-52FCA491BF2C.htm
- https://people.uncw.edu/brownj/mathboard/help/VEF.html
- https://documentation.help/AutoCAD-ALISP-VLISP/WS73099cc142f4875516d84be10ebc87a53f-79c3.htm
- https://courses.oermn.org/mod/book/view.php?id=11665&chapterid=260
- https://www.mathplanet.com/education/algebra-1/discovering-expressions-equations-and-functions/expressions-and-variables