C++ et Libraries amiga

8 sujets de 1 à 8 (sur un total de 8)

  • Lanza

      #1935

      J’ai une question purement existentielle pour l’instant mais qui me titille depuis plusieurs années :

      Imaginons que j’aie le temps (on peut rêver :-( ) de porter un truc écrit dans un langage (orienté) objet du style C++ vers l’Amiga/MOS/AROS et que des bouts du truc en question méritent de se retrouver dans des bibliothèques partagées.

      Je vois trois solutions, et j’aimerais savoir s’il en existe une qui m’a échappé :

      – soit on explose toutes les classes en structures et en fonctions C standards pour les faire rentrer dans une lib. Ça fait du boulot.

      – soit on fait une sorte de wrapper qui va se charger d’accèder à des objets internes à la lib via des fonctions de la lib en question. Ça fait du boulot aussi et je trouve ça bancal.

      – soit on fait rentrer ça dans des classes BOOSPI et ça fait aussi du boulot.

      Y a t’il une solution plus directe ?

      Alex

        #39635

        Salut Lanza,

        je ne vois pas trop où est ton problème rien ne t’empêche d’avoir une fonction style “object factory” qui te permet de créer des objets C/C++ que tu utiliseras par la suite dans tes programmes. Le problème, c’est que dans ce cas là ta library sera C++ only ce qui n’est pas trés fair play pour tes petits camarades qui programmes dans des langages autres (mais y en a t’il encore qui programme en autre chose que C ou C++ ?)…

        Sinon une autre solution (mais qui sera C/C++ only) est d’utiliser des structures avec pointeurs de fonction (comme les interfaces de l’OS4) ce qui te permet d’avoir toujours la notation élégante de l’appel d’une méthode d’un objet même en C…

        Lanza

          #39636

          Mwais.

          La première solution, effectivement ça peut marcher mais c’est carrément Hybride comme truc. Ni objet, ni amiga style. On peut plus hériter d’une classe qui est dans la lib, puisqu’on est obligé de passer par la factory, cependant on est obligé de faire du C++ quand même. Beurk.

          La seconde impose un gros travail de réécriture dans le cas d’un portage, mais est à peu près amiga compliant. Mais, quitte à réécrire, autant exploser les classe et en faire des structures et des fonctions bêtes et méchantes.

          Bref l’objet sur amiga, c’est pas encore ça.

          Il y a pas des exemples de trucs qui auraient été portés du C++ vers le miga ?

          Screetch

            #39637

            c’est carrément Hybride

            Tiens, tu sous-traites ?

            :-D :-D :-D

            /me sort… Faut l’excuser, on est vendredi…

            Abonnez-vous à ma nouvelle chronique "En Route vers le Futur" sur Youtube !

            Alex

              #39638

              Je ne comprends pas pourquoi tu dis que c’est hybride.

              En ce qui concerne l’héritage bhein dans ce cas soit tu fais de la composition plutôt que de l’héritage, soit si c’est vraiment de l’héritage que tu veux faire bhein alors je ne vois pas trop l’intérêt de la library : une library c’est pour fournir des objets qui sont tout prêt à l’emploi si c’est pas le cas, et que l’utilisateur doit en hériter je vois pas comment tu vas pouvoir garantir la backward compatibilité qui est normalement l’une des qualités majeures de library (IMHO).

              Dans ce cas les libs statiques sont tes amies.

              Quoi qu’il en soit je vois pas pourquoi tu dis que l’amiga et l’objet c’est pas ça !! Rien ne t’empêche de faire de l’objet c’est juste que les library qui sont sensées être utilisables par tout langage doivent respecter certaines rêgles qui du coup sont le plus petit dénominateur commun des langages de programmation (càd pas d’objet) ne sont pas adaptées pour faire exporter des objets.

              D’ailleurs je ne suis même pas certain qu’un quelconque OS permette de faire ce que tu veux faire…

              Lanza

                #39639

                D’ailleurs je ne suis même pas certain qu’un quelconque OS permette de faire ce que tu veux faire…

                A peu près tous les autres :-P

                Les bibliothèques sont des bibliothèques d’objets et plus de fonctions mais ça marche, si si.

                L’intérêt de l’héritage c’est que tu peux utiliser une classe telle quelle ou de la dérvier tu as le choix, quoi. Mais les lib amiga sont pas prévues pour ça, c’est clair. Sauf BOOPSI, masi c’est un pneu galère pour un portage.

                Ce que je veux faire c’est éventuellement un *portage* d’une petite app en C++, avec le moins de boulot possible. Pas un création de toutes pièces auquel cas je code en C pas objet et y’a pas de problème. Et sinon ben ce sera pas une lib et pis c’est tout.

                henes

                  #39640

                  D’ailleurs je ne suis même pas certain qu’un quelconque OS permette de faire ce que tu veux faire…

                  A peu près tous les autres

                  Ce n’est pas vrai. Tous les autres OS ont la même contrainte.

                  Le C++ n’utilise aucune ABI prédéfinie, et cela quelque soit la plateforme. Tout dépend du compilateur.

                  Il n’est donc pas possible de créer une bibliothèque partagée offrant une API C++, à moins de se contrefoutre de la compatibilité ascendante et de forcer tout le monde à utiliser l’exacte version du compilateur avec lequel a été compilée la bibliothèque.

                  C’est malheureusement ce que font de trop nombreux idiots (c’est mon avis, hein)… mais ils s’en fichent puisque c’est la plupart du temps destiné à des OS opensource où l’ensemble des bibliothèques et applications est en permanence recompilé pour cacher ce genre de problème.

                  Par exemple, l’ABI C++ a encore changé dans GCC3.4… et hop, les bibliothèques C++ compilées avec un précédent GCC arrêtent de fonctionner.

                  Par contre, il est tout à fait possible d’écrire une bibliothèque en C++ si elle offre une API C classique.

                  C’est ce que fait le projet ODE. Ils ont même recréé une petite API C++ par dessus l’API C elle même écrite en C++ :-)

                  Cela fonctionne très bien et continuera de fonctionner avec les applis C++ compilées par GCC5 ou tout autre compilateur (Intel, Microsoft…).

                  Donc, lorsque l’on porte un bidule utilisant des bibliothèques offrant une API C++, le mieux est certainement de les lier statiquement pour ne pas avoir de problème.

                  Pour être tout à fait exact, il est possible de faire une bibliothèque partagée offrant une API C++ sur Amiga mais on retombe dans les même travers que sur les autres OS, évidemment.

                  Heureusement, faire une telle .library est vraiment difficile sur Amiga et du coup il y a peu de chance pour qu’une telle erreur devienne possible :-)

                  Lanza

                    #39641

                    Ce n’est pas vrai. Tous les autres OS ont la même contrainte.

                    Yes, tu as raison, j’avais zappé la contrainte du langage. Les bibliothèques auquelles je pensais sont effectivement liées à un langage et/ou compilateur.

                    Bon, ok d’accord. Pas d’API C++ ou pas de lib partagée.

                  8 sujets de 1 à 8 (sur un total de 8)

                  • Vous devez être connecté pour répondre à ce sujet.

                  Forums AmigaOS, MorphOS et AROS Développement C++ et Libraries amiga

                  Amiga Impact