Les librairies statiques

Sujets variés concernant le développement en PureBasic
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Les librairies statiques

Message par nico »

Je me pose la question suivante, lors de la création d'une librairie statique; qu'est ce qui peut faire que celle-ci ne fonctionne plus par exemple lorsque'une nouvelle version de Pure Basic sort.

Et quelles sont les moyens de limiter les dégats.

Je me demandais si c'est pas à cause de cela que Denis fait ses Libs en assembleur.

:)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Les librairies statiques

Message par Anonyme2 »

nico a écrit :Je me pose la question suivante, lors de la création d'une librairie statique; qu'est ce qui peut faire que celle-ci ne fonctionne plus par exemple lorsque'une nouvelle version de Pure Basic sort.

Et quelles sont les moyens de limiter les dégats.

Je me demandais si c'est pas à cause de cela que Denis fait ses Libs en assembleur.

:)
J'écris mes lib en asm simplement pour le plaisir mais c'est parfois fastidieux car j'ai peu de commandes qui fonctionnent du 1er coup mais en général je trouve rapidement la solution (sauf une fois ou j'ai passé 2 jours complet sur un bug)

Un exemple simple qui me vient à l'esprit
Tu utilises par exemple une variable structurée et en particulier la fonction SizeOf()

Si tu mets comme bien souvent le premier élément de la structure avec la valeur SizeOf(), PB va transformer cette valeur directement en sa valeur. Si à la version suivante, la structure est corrigée car elle comportait une erreur, SizeOf a de grande chances de ne plus valoir ce qu'elle valait avant mais ta librairie transformée en asm va toujours avoir l'ancienne valeur. D'ou il faut recompiler pour appliquer la bonne valeur.

Un autre problème a eu lieu avec les listes chaînées, la structure même a changé et l'accès se retrouvait décalé d'ou des erreurs et donc obligation de recompiler.

Parfois, corriger une fonction entraîne un fonctionnement différent d'autres fonctions et il n'est pas évident de faire le rapprochement car souvent les fonctions écrites en lib s'appelent entre elles.

Il doit y avoir encore bien des cas, on retrouve le même problème avec l'écriture en asm avec une grande différence, il faut réécrire une partie du code avant de recompiler, c'est moins drôle et ça m'a refroidi un peu.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Merci Denis,

Ma question fait suite aux discussions actuellement sur le Forum Anglais.

Pour résumé, beaucoup pensent que l'utilisation de Libs Statiques n'est pas envisageable dans un Soft car le risque de problème avec une Lib n'est pas négligeable. Et le fonctionnement du soft reposerait sur une portion de code et sur la volonté de celui qui l'a codé de bien vouloir le mettre à jour si un problème survenait; encore faut-il que cette personne continue le dévelloppement, car pour la plupart d'entre nous, c'est un loisir.

Certaines personnes souhaiteraient avoir le code source de ces Libs; c'est vrai que sur beaucoup de sites de programmation, on a le source complet du projet, dommage que l'on est pas les connaissances nécessaires pour les exploiter; n'est-ce pas. :lol:

Donc apparemment beaucoup s'abstiennent d'utiliser des libs externes; mais la question se résume peut être à la licence même du logiciel, freeware ou shareware et de l'importance du projet.

Pour ma part, pour des projets personnels, l'utilisation de libs ne me poserait pas de problème, mais pour des projet à grande diffusion j'éviterais.

Moi qui fait des Libs, pourquoi je ne diffuse pas les sources , tout simplement parce que je me réserve le droit de continuer à les dévellopper car j'y passe beaucoup de temps. Et aussi certainement éviter par la même que quelqu'un ne s'approprie tout le travail.

Il est quand même important de partager du code et de s'échanger des idées. C'est pour cela que les codes sources de mes Libs sont disponibles sur demande mais sont réservés à une minorité des membres du Forum; c'est à dire ceux qui ont une certaine maturité du language.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je suis comme toi, je ne diffuse pas mes codes sources de mes libs asm car ça représente beaucoup de travail, elles ne sont presque pas commentées et j'ai parfois des problèmes pour me souvenir de ce que je voulais faire :roll:

Après chacun utilise ou non les libs mais il faut reconnaître que c'est souvent pratique et facilite la vie car on ne connais pas tout et on a pas forcément le temps de rechercher et même parfois on tourne en rond...
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

Je post ici a defaut de creer un nouveau sujet.

Je souhaite poser quelques questions (qui eclairera aussi d'autres utilisateurs qui debutent). J'entend parler de "bibliotheque", de "library statique" et probablement de "library" probablement dynamique (c'est ca ?).

La definition de "bibliotheque" doit pas mal s'eloigner de la definition de library; bien que je ne sache pas ce que c'est.

Pour les library, est-ce une routine que l'on fait en PB; accompagné ou non d'ASM, puis sauvegardé sur le diskdur et qui servira pour d'autres programmes d'espece de procedure que l'on "inclu" dans notre nouveau programme avec une instruction genre "include" ??
Je pense que c'est a peu pret ca. Mais quelle est la difference entre statique et dynamique ?

Autre chose : j'ai l'impression que les libs personnelles se multiplient grandement comme les voitures sur une route de vacances. N'est-ce pas la une source de "dilution" et de "confusion" de la puissance de PB ?
Par exemple, si quelqu'un fait une lib mais qu'elle n'est pas optimisé, beaucoup d'utilisateurs "subiront" les lenteurs de la lib !
Encore autre chose : je parlais de "confusion" car j'ai l'impression qu'il y a mille et une facon d'aborder et d'utiliser une lib. Je me trompe ? Ou sont les notices de chacune des libs ??

Merci de m'avoir lu. :mad:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

les lib statiques sont celles du répertoire purelibraries, les dynamiques sont les fichiers dll (dynamic-link library)

avec l'apparition de tailbite tout le monde crée sa lib (statique) en PB (alors qu'en théorie c'est uniqement en C ou en ASM)

en gros gâce ou à cause de ce tool elles pulullent...

Dri
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Mais quelle est la difference entre statique et dynamique ?

Pour expliquer :
une librairie statique c'est une ou plusieurs procédures que tu vas créer
par exemple "procédure TOTO (a,b,c)"
puis grâce a tailbite tu va "transformer ce code en lib_user mis dans
le dossier "\PureBasic\PureLibraries\UserLibraries"
tu pourra par la suite appeler directement toto(a,b,c)
dans ton code Purebasic comme si TOTO était une commande Native de purebasic ! , cette librairie statique, ne peut servir qu'au possesseur de Purebasic !

L’inconvénient viens du partage de ton source, si personne ne dispose de ta librairie avec la fonction TOTO , le pure basic marquera une erreur a l'exécution de cette commande inconnue !!
Bien sur si tu compiles un exe , là, pas de problème car le code de la fonction TOTO sera intégré dans l'exe !! .... :D



la librairie Dynamique ( DLL )
contient aussi des procédures, mais cette librairie est autonome !!
Elle peut être appelée par n'importe quel langage (en théorie) qui est capable de ce servir de DLL

inconvénient : il faut que cette DLL soit présente pour que le programme
Fonctionne !





Les includes : c'est simplement une partie de ton listing que tu sauve dans un fichier ; ce peut être par exemple un petit code que tu réutilise pour tout tes programmes, cela évite de retaper a chaque fois la même chose !

Puis au moment ou ce petit code doit intervenir dans ton mega programme tu insère la commande include Fichier$
pour que au moment de la compilation Purebasic incorpore ce petit code situé dans un fichier, dans ton listing !

Cela permet d'avoir un code plus clair aussi, mais bon avec le repliage des Morceaux de code .... :D
Répondre