• [^] # Re: C'est pourtant évident.

    Posté par . En réponse à la dépêche Coder efficacement, bonnes pratiques et erreurs à éviter. Évalué à 3.

    J'oubliais de répondre à ceci :

    Le problème c’est que ce n’ai pas une question d’optimisation mais de validité.

    Le code que tu proposes, que je traduis en C ainsi :

    void 
    loop(void)
    {
     char* msg = receive_msg();
     puts(msg);
     loop();
    }

    ... est récursif terminal, et est un programme valide en C. Comme je le disais précédemment, le C n'a pas de notion de pile (même si c'était je pense implicite dans les specs avant la normalisation du langage). Donc il n'y a pas de notion de dépassement de pile en termes de langage. Évidemment, en termes d'implémentation, le risque est grand.

    Ceci étant dit, un langage comme Perl est capable d'effectuer des récursions bien plus profondes que ce qu'une simple pile UNIX propose, ce qui implique que la VM de Perl et le langage lui-même implémentent un truc permettre que cela arrive...