Weitergabe von Prozeduren per DLL, User-Lib oder Source?

Für allgemeine Fragen zur Programmierung mit PureBasic.

Was haltet ihr für die sinnvollste Auslagerung und Weitergabemöglichkeit von häufig genutzten Prozeduren?

einfach als PB-Sourcecode speichern und per includefile einbinden
13
52%
eine DLL erstellen
4
16%
eine User-Library erstellen
8
32%
 
Insgesamt abgegebene Stimmen: 25

Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Weitergabe von Prozeduren per DLL, User-Lib oder Source?

Beitrag von Ynnus »

Hallöchen,

ich befasse mich gerade mit der Frage, wie man am besten häufig genutzte Prozeduren auslagert, um sie von vielen unterschiedlichen Programmen nutzen zu können.
Dabei steht zur Wahl:
- eine User-Library erstellen
- eine DLL erstellen
- einfach als PB-Sourcecode speichern und per includefile einbinden

Wichtig ist dabei auch der Aspekt, dass die Prozedur auch an andere weitergegeben werden können soll, diese also die Prozedur nutzen können für ihre eigenen Programme, aber ohne den Sourcecode manipulieren oder entziffern zu können.

Dabei fällt eigentlich der Sourcecode per Include schonmal raus, denn da könnte man den Source beliebig ändern. Aber für NUR eigene Projekte imo ganz nützlich, direkt als Code eingefügt.
Bei einer User-Lib ist es so eine Sache mit der Kompatiblität zu den einzelnen Versionen. 3.90 Libs können nicht mit 3.91 verwendet werden, und umgekehrt. Da besteht die Gefahr, dass es schnell durch Updates nicht mehr läuft. Wer das aber auf dem neuesten Stand immer hält, hat mit der User-Lib eine gute Möglichkeit die PB-Befehle zu erweitern, ohne dass man merkt, dass diese nicht direkt PB-eigene-Befehle sind.
Eine DLL bietet die Möglichkeit, den Source zu verschlüsseln (wie die User-Lib ja auch) und die Prozedur somit als Bibliothek mitzuliefern welche erst geöffnet werden muss. Nachteil der DLL ist, dass sie erst umständlich geöffnet und dann per CallFunction[Fast] gestartet werden muss, und Parameter etwas eingeschränkt sind (20 max. z.B.).
Außerdem wird eine DLL in der Regel ja als Datei mitgeliefert. (Kann man aber imo auch als binary einfügen, oder? Weiß da jemand was zu?)

Das wären mal meine Gedankengänge dazu. Habt ihr da eigene Erfahrungen gemacht, was besser wäre, und was sich leichter handhaben lässt?
Ich dachte nämlich daran, mal ein paar Winkel-Funktionen für 2D-Spiele zu veröffentlichen und suche daher auch eine geeignete Möglichkeit. User-Lib ist mir aufgrund der Kompatiblitätsproblemen eigentlich zu unsicher, aber wenn sich hier gute Gründe einfinden, eine Userlib einer DLL vorzuziehen, kann man ja nochmal drüber nachdenken.

mfg.

Sunny
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag von Lars »

Ich persönlich finde Include am schönsten, auch für das Weitergeben,
denn so kann jeder Anfänger aus dem Source lernen und auch Fehler
fixen, die u.U. vorhanden sind.

Da wäre mal als ein Beispiel die MCI Include von GPI. So als Include kann
ich mir auch die einzelnen Befehle im MCI angucken und wenn etwas nicht
so will, wie ich, kann ich die Include auch analysieren. Das bietet mir
weder DLL noch Userlib.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Da eine DLL ja schon kompiliert ist, kann man die dann eigentlich auch von anderen Programmiersprachen aus öffnen und nutzen? Das wäre dann ja ein klarer Vorteil für die DLL gegenüber der User-Lib. Bisher haben sich ja alle für die Userlib ausgesprochen, und ein paar für Sourcecode.
Wäre auch hilfreich wenn ihr hier eure Entscheidung begründen würdet. Warum das eine und nicht das andere.
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

ganz klar UserLib: kein Umständliches rumschleppen von externen Dateien, keine sehr großartige Installation oder so, sofort verwendbar. Man muss seinen Sourcecode nichtmal abspeichern.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Ich bin für Inludes. Die kann man immer wieder an seine Bedürfnisse anpassen, falls sie doch nicht richtig funktioniert oder ein paar Sachen fehlen, die man vermisst. Außerdem kann man dadurch auch viel lernen.

DLLs wären mir zu umständlich zum Ansprechen, außer es ist eine Wrapper-Userlib dabei, aber dann kann man das ja gleich als Userlib machen.

Userlibs mag ich deswegen schon nicht, weil es schon viel zu viele gibt und man so langsam den Überblick verliert. Irgendwann benutzt jemand für seine Userlib zu machen noch die Befehle einer anderen Userlib, die auch schon Userlibs verwendet hatte oder sowas und dann wird das immer langsamer und größer und bliblablubb...
Seit Tailbite habe ich sowieso schon Angst vor der großen Userlib-Flut.
Bild
Icke
Beiträge: 143
Registriert: 08.09.2004 13:19

Beitrag von Icke »

Includes, eindeutig. Man kann dann auch auf änderungen mal reagieren oder den Code vielleicht mal in Schnipseln woanders einsetzen. Man lernt doch daraus auch einen Menge...
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1756
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Wenn der Source offengelegt werden kann/soll, dann sind Includes eindeutig die beste Wahl, da sowohl ein Lerneffekt für andere User möglich ist als auch eine Optimierung/Bug-Beseitigung.

Im anderen Falle würde ich UserLibs eindeutig vorziehen (davon natürlich auch wieder die ASM/C-optimierten und gesplitteten, die "TailBite-Kreationen" mit Abstrichen), da diese direkt in das fertige Executable eingebunden werden und nicht wie die Dlls extern mit rumgeschleppt werden.

DLLs sehe ich eigentlich nur dort im Vorteil, wenn diese NICHT bei PureBasic-Programmen eingesetzt werden sollen, also anderen Programmiersprachen oder als Plugin für existierende Anwendungssoftware.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Andre hat geschrieben:DLLs sehe ich eigentlich nur dort im Vorteil, wenn diese NICHT bei PureBasic-Programmen eingesetzt werden sollen, also anderen Programmiersprachen oder als Plugin für existierende Anwendungssoftware.
DLLs haben auch den Vorteil dass, sollten Sie mal funktionieren, sie relativ stabil sind und nicht mit einer neuen Version von PB unbrauchbar sind, wie schon des Öfteren geschehen.

Das Handling spricht allerdings sehr für die Userlibs und die Anpassbarkeit für die Includes. Es gibt halt keine "beste Lösung".
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Antworten