Plus précisément : un binding C++ pour une bibliothèque C est intrinsèquement moins bon qu'une lib écrite directement en C++.
Cela dépend. Il y a deux cas extrêmes:
- soit tu écris simplement une interface pour chaque fonction d'origine
- soit tu reconçois l'ensemble et tu écris en quelque sorte une nouvelle bibliothèque (qui va tout de même faire des appels à celle en-dessous)
Dans le premier cas, c'est de la cosmétique. Elle est d'ailleurs à peu près inutile entre le C++ et le C car le C++ comprend directement le C (pratiquement). Alors, les bindings ne collent pas à la philosophie du langage.
Dans le second cas, les bindings se sont libérés du design sous-jacent et ça peut être véritablement propre. Mais ça demande un gros effort. Peut-être que tout réécrire paraît séduisant en pareil situation. Surtout que, en pratique, il demeure toujours des contraintes dû à la bibliothèque sous-jacente. Par exemple, le constructeur en C++ fera plus que l'allocation de la mémoire, disons une ouverture de fichier. Et le plus qu'il pourra faire sera peut-être une partie d'une fonction C, qui, en plus d'ouvrir le fichier, le lira. A moins de découper la fonction C, l'objet restera avec un constructeur mal conçu.
[^] # Re: personnellement : je préfère gnome à kde
Posté par Veiovis . En réponse à la dépêche LinuxFR, vainqueur du choix des lecteurs du Linux Journal. Évalué à 1.
Cela dépend. Il y a deux cas extrêmes:
- soit tu écris simplement une interface pour chaque fonction d'origine
- soit tu reconçois l'ensemble et tu écris en quelque sorte une nouvelle bibliothèque (qui va tout de même faire des appels à celle en-dessous)
Dans le premier cas, c'est de la cosmétique. Elle est d'ailleurs à peu près inutile entre le C++ et le C car le C++ comprend directement le C (pratiquement). Alors, les bindings ne collent pas à la philosophie du langage.
Dans le second cas, les bindings se sont libérés du design sous-jacent et ça peut être véritablement propre. Mais ça demande un gros effort. Peut-être que tout réécrire paraît séduisant en pareil situation. Surtout que, en pratique, il demeure toujours des contraintes dû à la bibliothèque sous-jacente. Par exemple, le constructeur en C++ fera plus que l'allocation de la mémoire, disons une ouverture de fichier. Et le plus qu'il pourra faire sera peut-être une partie d'une fonction C, qui, en plus d'ouvrir le fichier, le lira. A moins de découper la fonction C, l'objet restera avec un constructeur mal conçu.