OVH Cloud OVH Cloud

Programmation orientée objets en C ANSI

22 réponses
Avatar
Le Python
Bonjour,

Je suis recherche de documentation et de retour d'exp=E9rience
concernant la programmation orient=E9e objet en C ANSI. Je suis en train
d'=E9tudier l'approche utilis=E9e par la biblioth=E8que GObjet du projet
Glib et l'excellente documentation propos=E9e par Laurent Deniau
(http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html). Je serais
int=E9ress=E9 =E0 d=E9couvrir d'autres approches. Quelqu'un as-t'il lu
l'ouvrage =E9crit par Alain Gourdin concernant la programmation par
objets en langage C publi=E9 chez Eyrolles?

Je vous remercie d'avance pour vos pr=E9cieux commentaires.

Meilleures salutations

Thierry

10 réponses

1 2 3
Avatar
loufoque

Je suis recherche de documentation et de retour d'expérience
concernant la programmation orientée objet en C ANSI. Je suis en train
d'étudier l'approche utilisée par la bibliothèque GObjet du projet
Glib et l'excellente documentation proposée par Laurent Deniau
(http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html). Je serais
intéressé à découvrir d'autres approches. Quelqu'un as-t'il lu
l'ouvrage écrit par Alain Gourdin concernant la programmation par
objets en langage C publié chez Eyrolles?

Je vous remercie d'avance pour vos précieux commentaires.


Je ne connaissais pas du tout ce genre d'outils. Bien sûr j'avais
entendu parler de GObject mais n'avait pas vraiment étudié le sujet.

Il n'y a pas d'approche qui, comme en C++, utilise la mémoire
automatique plutôt que des pointeurs vers des objets dynamiquement
alloués sur la mémoire libre?

Avatar
Jean-Marc Bourguet
Laurent Deniau writes:

C'est un bon debut. Les languages fonctionnels a typage statique (Haskell,
SML, OCaml, Clean) apportent surtout qqchose dans le domaine des types
(inference) mais assez peu cote polymorphisme compare a C++ par exemple
(meme s'ils en parle tout le temps ;-) ). CLOS est le summum de la
flexibilite, je recommande http://www.dreamsongs.com/CLOS.html et le livre
qui y est cite (meme si ca date un peu). On y trouve la base des generiques
(Dylan, COS ;-) ) et aussi un systeme d'initialisation ultra complique. Si
CLOS vous interesse, alors l'algorithme C3 aussi (Perl6, Python,
Cecil). Perso, dans COS j'ai opte pour un algo avec ordre total, un
heritage simple et une delegation tres rapide, et un schema initialisation
different plus simple et plus proche de l'idiome super.init() de Java et
Objective-C mais etendu aux multimethodes.

Regardez aussi Cecil, Slate, Dylan, Self, Beta. Tous on des modeles
differents. Dans les variantes, il y a Java et ses nombreuses extensions, D
(relativement commun), Eiffel, C# (idem D), Ada, Objective-C. Ensuite, il y
a les languages interpretes, mais la c'est un peu different (Erlang, Lua,
Ruby, Perl6, Python).


Est-ce que tu as regarde Scala? http://scala.epfl.ch

A+

--
Jean-Marc

Avatar
Laurent Deniau
Jean-Marc Bourguet wrote:
Laurent Deniau writes:


C'est un bon debut. Les languages fonctionnels a typage statique (Haskell,
SML, OCaml, Clean) apportent surtout qqchose dans le domaine des types
(inference) mais assez peu cote polymorphisme compare a C++ par exemple
(meme s'ils en parle tout le temps ;-) ). CLOS est le summum de la
flexibilite, je recommande http://www.dreamsongs.com/CLOS.html et le livre
qui y est cite (meme si ca date un peu). On y trouve la base des generiques
(Dylan, COS ;-) ) et aussi un systeme d'initialisation ultra complique. Si
CLOS vous interesse, alors l'algorithme C3 aussi (Perl6, Python,
Cecil). Perso, dans COS j'ai opte pour un algo avec ordre total, un
heritage simple et une delegation tres rapide, et un schema initialisation
different plus simple et plus proche de l'idiome super.init() de Java et
Objective-C mais etendu aux multimethodes.

Regardez aussi Cecil, Slate, Dylan, Self, Beta. Tous on des modeles
differents. Dans les variantes, il y a Java et ses nombreuses extensions, D
(relativement commun), Eiffel, C# (idem D), Ada, Objective-C. Ensuite, il y
a les languages interpretes, mais la c'est un peu different (Erlang, Lua,
Ruby, Perl6, Python).



Est-ce que tu as regarde Scala? http://scala.epfl.ch


J'avais regarder il y a qques temps, mais il semble qu'il a beaucoup
evolue en 2006. Je vais rejeter un oeil. Merci.

a+, ld.


Avatar
Laurent Deniau
loufoque wrote:

Je suis recherche de documentation et de retour d'expérience
concernant la programmation orientée objet en C ANSI. Je suis en train
d'étudier l'approche utilisée par la bibliothèque GObjet du projet
Glib et l'excellente documentation proposée par Laurent Deniau
(http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html). Je serais
intéressé à découvrir d'autres approches. Quelqu'un as-t'il lu
l'ouvrage écrit par Alain Gourdin concernant la programmation par
objets en langage C publié chez Eyrolles?

Je vous remercie d'avance pour vos précieux commentaires.



Je ne connaissais pas du tout ce genre d'outils. Bien sûr j'avais
entendu parler de GObject mais n'avait pas vraiment étudié le sujet.

Il n'y a pas d'approche qui, comme en C++, utilise la mémoire
automatique plutôt que des pointeurs vers des objets dynamiquement
alloués sur la mémoire libre?


A ma connaissance non mais je peux me tromper. Les compilateurs peuvent
optimiser en interne un equivalent ou fournir une syntaxe qui s'y
reporte (e.g. let rule en Haskell), mais semantiquement, Eiffel, Java,
C#, D, Ada, Fortran, Objective-C et tous les languages fonctionnels ne
proposent pas utilisation explicite de la memoire automatique pour les
instances de classes (ou equivalent suivant les languages). Certains
langages permettent au programmeur de construire manuellement des objets
automatiques (e.g. C# unsafe+stackalloc, Objective-C @def).

a+, ld.


Avatar
Jean-Marc Bourguet
Laurent Deniau writes:

loufoque wrote:

Je suis recherche de documentation et de retour d'expérience
concernant la programmation orientée objet en C ANSI. Je suis en train
d'étudier l'approche utilisée par la bibliothèque GObjet du projet
Glib et l'excellente documentation proposée par Laurent Deniau
(http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html). Je serais
intéressé à découvrir d'autres approches. Quelqu'un as-t'il lu
l'ouvrage écrit par Alain Gourdin concernant la programmation par
objets en langage C publié chez Eyrolles?

Je vous remercie d'avance pour vos précieux commentaires.
Je ne connaissais pas du tout ce genre d'outils. Bien sûr j'avais entendu

parler de GObject mais n'avait pas vraiment étudié le sujet.
Il n'y a pas d'approche qui, comme en C++, utilise la mémoire automatique
plutôt que des pointeurs vers des objets dynamiquement alloués sur la
mémoire libre?


A ma connaissance non mais je peux me tromper. Les compilateurs peuvent
optimiser en interne un equivalent ou fournir une syntaxe qui s'y reporte
(e.g. let rule en Haskell), mais semantiquement, Eiffel, Java, C#, D, Ada,
Fortran, Objective-C et tous les languages fonctionnels ne proposent pas
utilisation explicite de la memoire automatique pour les instances de
classes (ou equivalent suivant les languages).


Tu te trompes en ce qui concerne Ada. Les records, qu'ils soient tagged ou
non, limités ou non, peuvent se trouver sur la pile. De plus, le langage
est tel qu'il autorise un compilateur a generer du code qui libere la
memoire utilisee par les objets pointes des qu'un type pointeur sort
d'existance. Les compilateurs le font et les utilisateurs utilisent ce
fait. Mais c'est (c'etait? j'ai pas suivi Ada 200X et le probleme etait
reconnu, ce n'est pas impossible qu'il ait ete regle) malheureusement peut
utile pour les types tagges (en langage C++, ceux qui ont des fonctions
virtuelles).

A+

--
Jean-Marc



Avatar
Laurent Deniau
Jean-Marc Bourguet wrote:
Laurent Deniau writes:


loufoque wrote:



Je suis recherche de documentation et de retour d'expérience
concernant la programmation orientée objet en C ANSI. Je suis en train
d'étudier l'approche utilisée par la bibliothèque GObjet du projet
Glib et l'excellente documentation proposée par Laurent Deniau
(http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html). Je serais
intéressé à découvrir d'autres approches. Quelqu'un as-t'il lu
l'ouvrage écrit par Alain Gourdin concernant la programmation par
objets en langage C publié chez Eyrolles?

Je vous remercie d'avance pour vos précieux commentaires.


Je ne connaissais pas du tout ce genre d'outils. Bien sûr j'avais entendu
parler de GObject mais n'avait pas vraiment étudié le sujet.
Il n'y a pas d'approche qui, comme en C++, utilise la mémoire automatique
plutôt que des pointeurs vers des objets dynamiquement alloués sur la
mémoire libre?


A ma connaissance non mais je peux me tromper. Les compilateurs peuvent
optimiser en interne un equivalent ou fournir une syntaxe qui s'y reporte
(e.g. let rule en Haskell), mais semantiquement, Eiffel, Java, C#, D, Ada,
Fortran, Objective-C et tous les languages fonctionnels ne proposent pas
utilisation explicite de la memoire automatique pour les instances de
classes (ou equivalent suivant les languages).



Tu te trompes en ce qui concerne Ada. Les records, qu'ils soient tagged ou
non, limités ou non, peuvent se trouver sur la pile.


Je dois dire qu'au moment de poster, j'ai eu un doute pour Ada, Pascal
et Fortran, languages que je n'ai pas regarde depuis des lustres.

Pour etre precis, je parlais de moyen explicite de forcer un objet a
etre automatique. Mais j'ai surement ete un peu vite en besogne. Ceci
dit, je n'ai jamais vu d'objet polymorphe creer autrement qu'avec new en
Ada. Mais la quantite de code Ada que j'ai lu se reduit au strict minimum.

Sinon je sais que Ada permet des 'region-based storage management' qui
sont sur la pile. Je n'ai jamais experimente ca, mais meme si c'est sur
la pile, ca ressemble a une gestion de la memoire par zone que l'on
retrouve aussi dans les autres languages en vu d'obtenir un meilleur
determinisme dans la gestion de la vie des objets (et accessoirement
etre plus efficace) par opposition au GC.

Et comme je l'ai dit, je ne connais pas parfaitement tout les languages,
loin de la!

a+, ld.




Avatar
Jean-Marc Bourguet
Laurent Deniau writes:

Jean-Marc Bourguet wrote:

Tu te trompes pour Ada.


Je dois dire qu'au moment de poster, j'ai eu un doute pour Ada, Pascal et
Fortran, languages que je n'ai pas regarde depuis des lustres.

Pour etre precis, je parlais de moyen explicite de forcer un objet a etre
automatique.


C'est bien ce que j'avais compris.

Mais j'ai surement ete un peu vite en besogne. Ceci dit, je
n'ai jamais vu d'objet polymorphe creer autrement qu'avec new en Ada. Mais
la quantite de code Ada que j'ai lu se reduit au strict minimum.

Sinon je sais que Ada permet des 'region-based storage management' qui sont
sur la pile. Je n'ai jamais experimente ca, mais meme si c'est sur la pile,
ca ressemble a une gestion de la memoire par zone que l'on retrouve aussi
dans les autres languages en vu d'obtenir un meilleur determinisme dans la
gestion de la vie des objets (et accessoirement etre plus efficace) par
opposition au GC.


C'est ce dont je parlais avec l'utilisateur des types de pointeurs.

Et comme je l'ai dit, je ne connais pas parfaitement tout les languages,
loin de la!


Moi non plus. Mais Ada est le langage que je connais le mieux a part C++
et C meme si je ne le pratique plus depuis cinq ou six ans. Ca m'arrive de
parler -- et vraissemblablement de dire des betises -- d'autres langages
que je connais beaucoup moins bien.

A+

--
Jean-Marc


Avatar
Thierry Chappuis

Est-ce que tu as regarde Scala? http://scala.epfl.ch

Scala est pas mal utilisé pour l'enseignement, ici, à l'EPFL. Je n'ai

jamais encore expérimenté avec ce langage.


Thierry

Avatar
Laurent Deniau
Jean-Marc Bourguet wrote:
Laurent Deniau writes:


C'est un bon debut. Les languages fonctionnels a typage statique (Haskell,
SML, OCaml, Clean) apportent surtout qqchose dans le domaine des types
(inference) mais assez peu cote polymorphisme compare a C++ par exemple
(meme s'ils en parle tout le temps ;-) ). CLOS est le summum de la
flexibilite, je recommande http://www.dreamsongs.com/CLOS.html et le livre
qui y est cite (meme si ca date un peu). On y trouve la base des generiques
(Dylan, COS ;-) ) et aussi un systeme d'initialisation ultra complique. Si
CLOS vous interesse, alors l'algorithme C3 aussi (Perl6, Python,
Cecil). Perso, dans COS j'ai opte pour un algo avec ordre total, un
heritage simple et une delegation tres rapide, et un schema initialisation
different plus simple et plus proche de l'idiome super.init() de Java et
Objective-C mais etendu aux multimethodes.

Regardez aussi Cecil, Slate, Dylan, Self, Beta. Tous on des modeles
differents. Dans les variantes, il y a Java et ses nombreuses extensions, D
(relativement commun), Eiffel, C# (idem D), Ada, Objective-C. Ensuite, il y
a les languages interpretes, mais la c'est un peu different (Erlang, Lua,
Ruby, Perl6, Python).



Est-ce que tu as regarde Scala? http://scala.epfl.ch


J'ai lu hier soir leur rapport technique 'an overview of the scala
programming language'. Je ne crois pas que ce langage apporte qqchose de
nouveau aux modeles objets existant et je le souspconne d'etre en
interne assez proche d'un slate (ou d'un dylan). Il disent s'inspirer de
sather qui en son temps se voulait compatible avec C et C++, alors que
scala se veut aujourd'hui compatible avec Java et C# et autre machine
virtuelle. Je pense que le gros de l'inovation est sur l'unification des
systemes de types empruntes (OO+FP) et sur l'unification des syntaxes
(tout en etant plus clair que OCaml). L'objectif est louable et
interessant et j'aime l'approche tout lib et tout message (a-la-slate),
mais je serais curieux de voir les performances et le degre
d'optimisation atteind. Un langage a suivre...

a+, ld.


Avatar
Jean-Marc Bourguet
Laurent Deniau writes:

Jean-Marc Bourguet wrote:

Est-ce que tu as regarde Scala? http://scala.epfl.ch


J'ai lu hier soir leur rapport technique 'an overview of the scala
programming language'.


J'aurais du preciser que j'ai entendu parler de ce langage a plusieurs
reprises et de sources differentes. C'est sur ma liste des choses a
regarder mais je ne l'ai pas encore fait.

Je ne crois pas que ce langage apporte qqchose de nouveau aux modeles
objets existant et je le souspconne d'etre en interne assez proche d'un
slate (ou d'un dylan).


Tiens, est-ce que tu connais un papier qui ferait une comparaison des
differents modeles objets?

Il disent s'inspirer de sather qui en son temps se voulait compatible
avec C et C++, alors que scala se veut aujourd'hui compatible avec Java
et C# et autre machine virtuelle. Je pense que le gros de l'inovation est
sur l'unification des systemes de types empruntes (OO+FP) et sur
l'unification des syntaxes (tout en etant plus clair que
OCaml). L'objectif est louable et interessant et j'aime l'approche tout
lib et tout message (a-la-slate), mais je serais curieux de voir les
performances et le degre d'optimisation atteind. Un langage a suivre...


Donc ca vaut la peine de le laisser sur ma liste.

A+

--
Jean-Marc


1 2 3