Pour avoir utilisé libyaml, le truc utilisé par le module de python, ben, je ne conseille pas d'utiliser ce truc, en tout cas pas si on veut de la performance et de la stabilité...
Je me suis tapé des segfaults que j'ai pu corriger en moins de 4H (patch envoyé à l'époque en même temps que le rapport de bug, je ne suis pas certain que le rapport ait été accepté, vu que le dépôt semblait mort. Du coup, itou pour le patch logiquement). Et non, ce n'était pas un cas d'utilisation à la con, c'était même un truc très simple.
Pour la performance, quand on commence a hijacker malloc pour qu'il alloue toujours au moins 1 octet, ça crains, et dans la pratique, quand mon code tournait, le CPU faisait du malloc de petites quantités de RAM en permanence, et prenait plusieurs minutes pour parser un fichier de quelques kibi octets.
Du coup, j'ai cherché d'autres lib qui correspondraient à mes standards et dont le code me semblait assez propre. Je n'ai rien trouvé de satisfaisant.
Conséquence, j'ai commencé à lire le standard de yaml, et j'ai compris l'état de l'existant: certes, le yaml, c'est joli et lisible... mais une horreur à traiter, les règles sont floues et multiples et de mémoire, le comportement quand on rencontre un token dépend du contexte...
[^] # Yaml est une usine à gaz
Posté par freem . En réponse au journal Tous les parsers JSON sont mauvais. Évalué à 4.
Pour avoir utilisé libyaml, le truc utilisé par le module de python, ben, je ne conseille pas d'utiliser ce truc, en tout cas pas si on veut de la performance et de la stabilité...
Je me suis tapé des segfaults que j'ai pu corriger en moins de 4H (patch envoyé à l'époque en même temps que le rapport de bug, je ne suis pas certain que le rapport ait été accepté, vu que le dépôt semblait mort. Du coup, itou pour le patch logiquement). Et non, ce n'était pas un cas d'utilisation à la con, c'était même un truc très simple.
Pour la performance, quand on commence a hijacker malloc pour qu'il alloue toujours au moins 1 octet, ça crains, et dans la pratique, quand mon code tournait, le CPU faisait du malloc de petites quantités de RAM en permanence, et prenait plusieurs minutes pour parser un fichier de quelques kibi octets.
Du coup, j'ai cherché d'autres lib qui correspondraient à mes standards et dont le code me semblait assez propre. Je n'ai rien trouvé de satisfaisant.
Conséquence, j'ai commencé à lire le standard de yaml, et j'ai compris l'état de l'existant: certes, le yaml, c'est joli et lisible... mais une horreur à traiter, les règles sont floues et multiples et de mémoire, le comportement quand on rencontre un token dépend du contexte...