Tail-call optimization in C is relatively recent (2025)
Historiquement, la convention d'appel en C laissait au programme appelant le soin de retirer les arguments de la pile, ce qui empêchait l'élimination des appels en position finale. En 1994, les compilateurs C de l'époque ne réalisaient pas cette optimisation pour ce cas d'usage, mais en 2001 Mark Probst a introduit dans GCC une optimisation de type tail-call avec une convention d'appel distincte présentant notamment l'incapacité à gérer les appels indirects. L'auteur n'a pas suivi le sujet pendant des années, mais après avoir lu l'article de Xu et Kjolstad sur la compilation Copy-and-Patch il a testé GCC et Clang et constaté qu'ils peuvent désormais effectuer l'optimisation sur ce type d'appels en position finale. Xu et Kjolstad utilisent cent mille fragments de code dans leur travail alors que Gforth se limite à moins de deux mille variantes, et pouvoir gérer cent mille extraits permettrait d'employer des techniques inaccessibles dans un système basé sur goto*. Cette capacité n'a pas encore été intégrée à Gforth, et l'auteur félicite la communauté Python d'avoir été la première à en profiter.