Langages de développement du logiciel AutoCAD® : une analyse technique approfondie
Depuis sa création en 1982, l’architecture logicielle d’AutoCAD® a été façonnée par des choix technologiques stratégiques, reflétant l’évolution des paradigmes de programmation et des contraintes matérielles. Contrairement aux langages de script destinés aux utilisateurs (AutoLISP, VBA), le développement du cœur d’AutoCAD® repose sur des langages systèmes optimisés pour les performances et la portabilité.
L’ère fondatrice : le langage C (1982–1990)
L’architecture initiale en C pur
Le code source originel d’AutoCAD® a été intégralement écrit en C, un choix dicté par trois impératifs techniques des années 1980 :
- Portabilité : devoir fonctionner sur 11 plateformes différentes (UNIX, DEC VAX, IBM PC, etc.)
- Performance : exploitation optimale des ressources limitées des machines 16/32 bits
- Maintenabilité : structuration modulaire facilitant les adaptations spécifiques à chaque OS
Cette base C incluait des mécanismes bas niveau pour :
- La gestion mémoire manuelle (allocations dynamiques via
malloc()
/free()
) - L’abstraction des périphériques d’entrée/sortie (souris, tablettes numériques)
- Le rendu graphique via des appels directs au matériel (sans API unifiée)
Un exemple concret se trouve dans le traitement des entités graphiques, stockées sous forme de structures C imbriquées permettant un accès rapide aux coordonnées et attributs36.
Transition vers le C++ orienté objet (1990–2000)
L’introduction progressive des classes C++
Avec AutoCAD® R12 (1992), Autodesk® entame une refonte architecturale majeure en intégrant le C++, notamment pour :
- L’encapsulation des données via des classes (ex :
AcDbObject
) - L’héritage polymorphe pour les entités dérivées (lignes, cercles, blocs)
- La gestion des exceptions via
try
/catch
pour la stabilité
Cette transition s’est opérée par étapes :
- Compilation hybride C/C++ avec des wrappers objet autour des fonctions C
- Réécriture complète des modules critiques (base de données DWG™, moteur de rendu)
- Adoption des templates STL pour les conteneurs de données post-1998
Le module ObjectARX (1997), écrit en C++, illustre cette évolution avec son système de classes runtime permettant l’extension dynamique via des DLL46.
L’intégration du .NET Framework (2000–2010)
Hybridation C++/C# pour l’interface utilisateur
La version AutoCAD® 2004 marque un tournant avec l’adoption du framework .NET pour :
- L’interface graphique WPF (Windows Presentation Foundation)
- L’interopérabilité COM entre composants C++ et C#
- La gestion des événements via des délégués managés
L’architecture devient alors hybride :
- Noyau : 85% en C++ natif (optimisations SSE, multithreading)
- Couche UI : 15% en C# (rubans, palettes d’outils, boîtes de dialogue)
- Pont interlangage : Marshalling personnalisé pour les appels entre mondes managé/natif
Cette période voit aussi l’apparition de compilateurs cross-platform (gcc, clang) pour les versions Linux/Mac, bien que le code reste majoritairement en C++ ISO5.
Modernisation et outils contemporains (2010–2025)
Adoption de C++11/17/20 et outils associés
Les récentes versions exploitent les avancées du C++ moderne :
- Smart pointers (
unique_ptr
,shared_ptr
) pour la gestion mémoire automatisée - Lambda functions dans le traitement asynchrone (calculs de rendu)
- Parallel STL pour l’exploitation des multicœurs (opérations sur les pointclouds)
Le build system a migré vers CMake (2018), permettant :
- La compilation unifiée Windows/Linux/macOS
- L’intégration de bibliothèques tierces (Boost, Qt, OpenCASCADE)
- La génération de packages MSI/DEB/RPM via CPack
Les outils d’analyse statique (Clang-Tidy, Coverity) et de profiling (VTune, Nsight) font désormais partie du pipeline CI/CD35.
Perspectives futures et défis techniques
Vers un noyau GPU-native avec SYCL/DPC++
Les développements en cours visent à :
- Déporter les calculs sur GPU via SYCL (ray tracing, simulations physiques)
- Unifier les backends graphiques (Vulkan, Metal, DirectX 12 Ultimate)
- Intégrer le machine learning via TorchScript (optimisation de paramètres)
Ces évolutions s’accompagnent d’une refonte des anciens modules C en C++23, avec adoption progressive de concepts comme :
- Les coroutines pour le streaming de données
- Les modules C++20 pour réduire les temps de compilation
- Le pattern ECS (Entity-Component-System) pour la gestion des scènes 3D
Conclusion : une base code historiquement ancrée en C/C++
L’examen du codebase AutoCAD® révèle une fidélité remarquable au C/C++ malgré 40 ans d’évolution technologique. Ce choix s’explique par :
- La criticité des performances dans le traitement de millions d’entités
- L’investissement massif dans une base code mature (25+ millions de lignes)
- La nécessité d’un contrôle précis sur l’allocation mémoire et le parallélisme
Les langages de script (AutoLISP, Python) et environnements managés (.NET) restent cantonnés aux couches hautes du logiciel, le cœur restant résolument ancré dans les langages systèmes compilés.
Citations:
- https://forums.autodesk.com/t5/autocad-tous-produits-francais/les-langages-de-programmation-et-autocad/td-p/6378387
- https://www.reddit.com/r/AutoCAD/comments/xjevqw/programming_in_autocad/
- AutoCAD — Wikipédia
- https://geospatialfrance.typepad.com/geospatialfrance/2009/11/langage-developper-outils-autodesk.html
- Linking and communication to AutoCAD in C++ - Stack Overflow
- https://georezo.net/forum/viewtopic.php?pid=50977
- https://search.worldcat.org/title/Autocad-programming-in-CC++/oclc/928145236
- https://cadernos.proarq.fau.ufrj.br/public/docs/Proarq18_CadScripting_CelaniVaz.pdf
- https://georezo.net/forum/viewtopic.php?pid=89202
- https://www.keanw.com/2008/07/choosing-the-pr.html
- https://stackoverflow.com/questions/779639/what-are-cad-apps-written-in-and-how-are-they-organized
- https://dessein-tech.com/t/histoire-concise-de-la-programmation-dans-autocad/20
- https://www.univ-chlef.dz/ft/wp-content/uploads/2024/01/COURS-PROGRAMMATION-Cpp-TAHRAOUI-Souad-Chlef-final-L3-Automatique-2018_compressed.pdf
- https://cad-magazine.com/wp-content/uploads/2019/09/autocad__20_versions.pdf
- https://www.cadtutor.net/forum/topic/47149-running-a-lisp-from-a-c-code/
- https://www.aplicit.com/developper-programme-autocad/
- https://www.cadida.de/fr/les-technologies/cao/cao-addons/autocao
- https://stackoverflow.com/questions/19045894/is-autocad-and-adobe-software-written-in-c-or-in-net
- https://www.autodesk.com/br/support/technical/article/caas/tsarticles/ts/4sI2GEnGmiwCYHh7hS4Nsx.html
- https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/6zcH4hmHofZMLbnaJkBly2.html
- https://cadxp.com/topic/42740-avec-quel-langage-programmer-sur-autocad/
- https://forums.autodesk.com/t5/net/most-efficient-language-to-code-with-in-autocad/td-p/9425423
- https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/2edY5Oczsv93tDF1ugCKHU.html
- https://forums.autodesk.com/autodesk/attachments/autodesk/127/80864/2/autocad-lt-auto-lisp-guide-A4-fr.pdf
- https://forums.autodesk.com/t5/autocad-portugues/linguagens-de-programacao-em-autocad/td-p/6378634
- https://www.infoq.com/presentations/autocad-webassembly/
- https://bimware.com/fr/societe/histoire.html
- https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/u5CP3BZNs2tQNEG6jeog3.html
- https://dessein-tech.com/t/autocad-petite-histoire-d-un-grand-succes/22
- https://www.youtube.com/watch?v=ddI_hh6fHSc
- https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/34IYhOWDfXtQl6h5gvTwB7.html
- https://documentation.help/AutoCAD-Land-Desktop-ActiveX-VBA/idh_program_guide_c__.htm
- https://www.editions-eyrolles.com/livre/programmer-autocad
- https://fr.wikipedia.org/wiki/Lisp
- https://www.betterworldbooks.com/product/detail/autocad-programming-in-c-c-9780471963363
- https://hyperpics.blogs.com/beyond_the_ui/2017/03/autocad-developer-documentation-suvery-_-part-1.html
- https://www.academia.edu/70802808/AutoCAD_Programming_in_C_C_
- https://www.cadtutor.net/forum/topic/76045-autocad-programming-in-cc-by-owen-ransen/
- https://help.autodesk.com/view/ACD/2024/PTB/?guid=GUID-17DB37A2-FA71-4351-B88B-61456570E767
- https://rosa-cad.com/2019/05/12/evolucao-do-cad/
- https://softwareengineering.stackexchange.com/questions/77199/c-and-the-suitable-libraries-to-develop-autocad-autodesk-cad-applications
- https://www.eyrolles.com/Informatique/Livre/autocad-2024-9782409043703/
- https://forums.autodesk.com/t5/inventor-programming-ilogic/would-you-use-c-or-c-for-a-new-project/td-p/10287412
- https://www.eyrolles.com/Sciences/Theme/297/cao-autocad/
- https://www.youtube.com/watch?v=_hjJR2wcz84
- https://adndevblog.typepad.com/autocad/2012/07/the-right-tools-for-the-job-autocad-part-2.html
- https://framalibre.org/par-tag?tag=gestion+de+projet
- https://forums.autodesk.com/t5/net/opening-autocad-and-autocad-electrical-simultaneouly-using-c/td-p/10587201
- https://help.autodesk.com/view/OARX/2023/ENU/?guid=GUID-01354898-965C-4340-9A39-607B56DAB888
- https://www.keanw.com/2007/11/metaprogramming.html
- https://www.reddit.com/r/csharp/comments/16rafxp/why_is_c_used_instead_of_c/
- https://forum.bricsys.com/discussion/33384/examples-and-documentation-for-c-and-c-using-bricscad-v18-pro-sdks
- https://www.academia.edu/107901323/AutoCAD_Programming_in_C_C_