Langages de développement du logiciel AutoCAD

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 :

  1. Portabilité : devoir fonctionner sur 11 plateformes différentes (UNIX, DEC VAX, IBM PC, etc.)
  2. Performance : exploitation optimale des ressources limitées des machines 16/32 bits
  3. 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 :

  1. Compilation hybride C/C++ avec des wrappers objet autour des fonctions C
  2. Réécriture complète des modules critiques (base de données DWG™, moteur de rendu)
  3. 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 à :

  1. Déporter les calculs sur GPU via SYCL (ray tracing, simulations physiques)
  2. Unifier les backends graphiques (Vulkan, Metal, DirectX 12 Ultimate)
  3. 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:

  1. https://forums.autodesk.com/t5/autocad-tous-produits-francais/les-langages-de-programmation-et-autocad/td-p/6378387
  2. https://www.reddit.com/r/AutoCAD/comments/xjevqw/programming_in_autocad/
  3. AutoCAD — Wikipédia
  4. https://geospatialfrance.typepad.com/geospatialfrance/2009/11/langage-developper-outils-autodesk.html
  5. Linking and communication to AutoCAD in C++ - Stack Overflow
  6. https://georezo.net/forum/viewtopic.php?pid=50977
  7. https://search.worldcat.org/title/Autocad-programming-in-CC++/oclc/928145236
  8. https://cadernos.proarq.fau.ufrj.br/public/docs/Proarq18_CadScripting_CelaniVaz.pdf
  9. https://georezo.net/forum/viewtopic.php?pid=89202
  10. https://www.keanw.com/2008/07/choosing-the-pr.html
  11. https://stackoverflow.com/questions/779639/what-are-cad-apps-written-in-and-how-are-they-organized
  12. https://dessein-tech.com/t/histoire-concise-de-la-programmation-dans-autocad/20
  13. https://www.univ-chlef.dz/ft/wp-content/uploads/2024/01/COURS-PROGRAMMATION-Cpp-TAHRAOUI-Souad-Chlef-final-L3-Automatique-2018_compressed.pdf
  14. https://cad-magazine.com/wp-content/uploads/2019/09/autocad__20_versions.pdf
  15. https://www.cadtutor.net/forum/topic/47149-running-a-lisp-from-a-c-code/
  16. https://www.aplicit.com/developper-programme-autocad/
  17. https://www.cadida.de/fr/les-technologies/cao/cao-addons/autocao
  18. https://stackoverflow.com/questions/19045894/is-autocad-and-adobe-software-written-in-c-or-in-net
  19. https://www.autodesk.com/br/support/technical/article/caas/tsarticles/ts/4sI2GEnGmiwCYHh7hS4Nsx.html
  20. https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/6zcH4hmHofZMLbnaJkBly2.html
  21. https://cadxp.com/topic/42740-avec-quel-langage-programmer-sur-autocad/
  22. https://forums.autodesk.com/t5/net/most-efficient-language-to-code-with-in-autocad/td-p/9425423
  23. https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/2edY5Oczsv93tDF1ugCKHU.html
  24. https://forums.autodesk.com/autodesk/attachments/autodesk/127/80864/2/autocad-lt-auto-lisp-guide-A4-fr.pdf
  25. https://forums.autodesk.com/t5/autocad-portugues/linguagens-de-programacao-em-autocad/td-p/6378634
  26. https://www.infoq.com/presentations/autocad-webassembly/
  27. https://bimware.com/fr/societe/histoire.html
  28. https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/u5CP3BZNs2tQNEG6jeog3.html
  29. https://dessein-tech.com/t/autocad-petite-histoire-d-un-grand-succes/22
  30. https://www.youtube.com/watch?v=ddI_hh6fHSc
  31. https://www.autodesk.com/support/technical/article/caas/tsarticles/ts/34IYhOWDfXtQl6h5gvTwB7.html
  32. https://documentation.help/AutoCAD-Land-Desktop-ActiveX-VBA/idh_program_guide_c__.htm
  33. https://www.editions-eyrolles.com/livre/programmer-autocad
  34. https://fr.wikipedia.org/wiki/Lisp
  35. https://www.betterworldbooks.com/product/detail/autocad-programming-in-c-c-9780471963363
  36. https://hyperpics.blogs.com/beyond_the_ui/2017/03/autocad-developer-documentation-suvery-_-part-1.html
  37. https://www.academia.edu/70802808/AutoCAD_Programming_in_C_C_
  38. https://www.cadtutor.net/forum/topic/76045-autocad-programming-in-cc-by-owen-ransen/
  39. https://help.autodesk.com/view/ACD/2024/PTB/?guid=GUID-17DB37A2-FA71-4351-B88B-61456570E767
  40. https://rosa-cad.com/2019/05/12/evolucao-do-cad/
  41. https://softwareengineering.stackexchange.com/questions/77199/c-and-the-suitable-libraries-to-develop-autocad-autodesk-cad-applications
  42. https://www.eyrolles.com/Informatique/Livre/autocad-2024-9782409043703/
  43. https://forums.autodesk.com/t5/inventor-programming-ilogic/would-you-use-c-or-c-for-a-new-project/td-p/10287412
  44. https://www.eyrolles.com/Sciences/Theme/297/cao-autocad/
  45. https://www.youtube.com/watch?v=_hjJR2wcz84
  46. https://adndevblog.typepad.com/autocad/2012/07/the-right-tools-for-the-job-autocad-part-2.html
  47. https://framalibre.org/par-tag?tag=gestion+de+projet
  48. https://forums.autodesk.com/t5/net/opening-autocad-and-autocad-electrical-simultaneouly-using-c/td-p/10587201
  49. https://help.autodesk.com/view/OARX/2023/ENU/?guid=GUID-01354898-965C-4340-9A39-607B56DAB888
  50. https://www.keanw.com/2007/11/metaprogramming.html
  51. https://www.reddit.com/r/csharp/comments/16rafxp/why_is_c_used_instead_of_c/
  52. https://forum.bricsys.com/discussion/33384/examples-and-documentation-for-c-and-c-using-bricscad-v18-pro-sdks
  53. https://www.academia.edu/107901323/AutoCAD_Programming_in_C_C_