• [^] # Re: Oui, mais...

    Posté par . En réponse à la dépêche Interview de Matz le créateur de Ruby. Évalué à 2.

    Je sais bien, mais en pratique faire des dtors qui ne sont pas appelés de manière deterministe n'est pas toujours simple.

    Pas forcément, en effet.
    La question est déjà de savoir, dans le cas où un objet A dépend d'un objet B, si le GC assure bien que A soit détruit avant B, sinon l'ajout de destructeurs au langage ne marchera pas fort...

    File.open("foobar.txt") { |filehandle|
    ...
    }


    C'est un cas plus simple que celui auquel je pensais. Je précise ma pensée avec un exemple plus pratique (que je vais tenter de faire ressembler à du Ruby, bien que je n'aie plus trop ça en tête) :

    # Le constructeur me charge le fichier alias en mémoire,
    alias = AliasFile.new("/etc/aliases")

    # je travaille dessus en mémoire...
    alias.add("visiteurs", "toto")
    alias.add("employes", "toto")
    ...

    # et après, je m'attends à ce qu'un destructeur se charge d'enregistrer les modifications tout seul à la fin.

    Bon, il y a peut-être une façon de faire plus Ruby qui ne nécessite pas de destructeur (définir une fonction équivalente à File.open sur ma classe ? enfin utiliser une fonction de ce genre avec une closure n'est pas tellement moins contraignant qu'un appel explicite à une méthode finalize...), mais ça, c'est ma façon de concevoir le truc. Et, pour reprendre les expressions de Matz dans son interview, s'il faut que je contourne ma façon de penser objet habituelle, c'est un stress et ça m'empêche d'"enjoy programming" avec Ruby, donc ça me donne plutôt envie de regarder un peu Python...

    Cela dit, c'est plutôt par hobby que j'essaie de me trouver un langage sympa.
    Pour mon boulot (sysadmin), je m'en tiens au choix de raison, Perl :
    - plus répandu;
    - pratiquement la garantie de trouver tous les modules dont je pourrais avoir besoin pour mon boulot;
    - peut remplacer un script shell en un peu plus lourd, du sed et de l'awk en à peine plus lourd, mais avec la puissance d'un langage de programmation "sous le pied";
    - supporte les destructeurs ;-) (enfin il faudra voir ce que ça donne avec la version 6, qui devrait utiliser un GC...).
    Au chapitre des inconvénients, il y a la syntaxe "top space" et la POO lourdingue, mais bon, j'ai déjà fait l'effort de m'y habituer...

    « Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone