Wann "lohnt" es sich eine UserLib zu nutzen statt Include

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Wann "lohnt" es sich eine UserLib zu nutzen statt Include

Beitrag von STARGÅTE »

Tachchen

Passend zum neuen Jahr hab ich mich man an das Gebiet UserLibs rangesetzt.
Hab mir mal tailbite gesorgt und schon erfolgreiche Tests gemacht.

Hintergrund ist eigentlich, dass ich ein paar wirklich wichtige Includes von mir
(die ist fast immer einbinden "muss") nun mal zu UserLibs machen will,
sodass sie von da an immer mit dabei sind.

Die frage nach dem "lohnt es sich" bezieht sich darauf,
dass UserLibs nicht mehr so flexibel sind wie Includes (bei PB Updates usw.)
Hinzu kommt, dass ich dann meine Projekte nicht mehr so leicht anderen geben kann,
da denen dann u.u. eine meiner Libs fehlt.

Sachen die ich zB in solchen Libs einbinden würde sind:

Code: Alles auswählen

; Gibt eine zufällige Fließkommazahl im Intervall [0,1] zurück.
Procedure.f RandomFloat()
  ProcedureReturn Random(2147483647)*4.6566128752457969241e-10 ; Random * 1/MaxRandom
EndProcedure

; Gibt ein zufälliges Vorzeichen {-1,1} zurück.
Procedure.i RandomSign()
  ProcedureReturn Random(1)*2-1 
EndProcedure
 
; Gibt einen zufälligen Winkel im Bogenmaß im Intervall [0,2*Pi[ zurück.
Procedure.f RandomAngle()
  ProcedureReturn Random(2147483647)*2.9258361585343193621e-9 ; Random * 2*Pi/(MaxRandom+1)
EndProcedure
weil ich die wirklich in nahezu allen Sachen benutze (wo es halt um Zufall geht).

Das "lohnen" aus dem Titel bezieht sich also weniger auf den Aufwand jetzt überall DLL hinter zu setzen
und u.u. noch Debug-Versionen zu schreiben, sonden darauf,
ob es sich lohnt deswegen die Flexibilität zu verlieren,
und dafür die Zugriftserleichterung zu erhalten.

Wann erstellt ihr (wenn überhaupt) UserLibs ?
Wenn, dann auch zum weitergeben oder nur private Nutzung ?
Wie groß waren die Probleme, die u.u. durch PB-Updates entstanden ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Wann "lohnt" es sich eine UserLib zu nutzen statt Includ

Beitrag von ts-soft »

STARGÅTE hat geschrieben:Wann erstellt ihr (wenn überhaupt) UserLibs ?
Wenn ich einen neuen globalen Scope benötige. Die Lib so groß ist, das eine Kontextsensitive Hilfe
hilfreich ist. Wenn fremder Code (Include) so hässlich ist, das ich den nicht sehen möchte.
STARGÅTE hat geschrieben:Wenn, dann auch zum weitergeben oder nur private Nutzung ?
Wenn, dann auch zum weitergeben, außer bei den hässlichen Includes (ist ja nicht mein Code).
STARGÅTE hat geschrieben:Wie groß waren die Probleme, die u.u. durch PB-Updates entstanden ?
Bei jedem Update neukompilieren wenn man Tailbite genutzt hat. Wer UserLibs ohne Source nutzt,
hat selber schuld, wenn es dann mal Probleme gibt.

Bei Deinem obigem Beispiel ist eine UserLib blödsinnig, Templates reichen dafür.
Erst wenn sehr viele Bausteine voneinander abhängig sind, sollte man drüber nachdenken

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Wann "lohnt" es sich eine UserLib zu nutzen statt Includ

Beitrag von c4s »

Offtopic zu Random:
Ich hatte bisher folgendes genutzt:

Code: Alles auswählen

Macro RandomFloat()
	(Random(2147483647) / 2147483647.0)
EndMacro
...aber deine Lösung scheint mir performanter zu sein wegen der Multiplikation. Was ich mich nun Frage ist, ob es sich lohnt das Ganze als Macro zu verwenden oder doch eher als Procedure?

Hier noch ein Gebrauch von RandomFloat():

Code: Alles auswählen

Procedure RandomDecision(Possibility.f=0.5)  ; Gibt #True oder #False zurück
	Protected Range.f, Chance.f
	Protected Result

	If Possibility >= 1.0
		Result = #True
	ElseIf Possibility <= 0.0
		Result = #False
	Else
		Range = 1.0 - Possibility
		Chance = RandomFloat()
		If Range < Chance
			Result = #True
		Else
			Result = #False
		EndIf
	EndIf

	ProcedureReturn Result
EndProcedure
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Wann "lohnt" es sich eine UserLib zu nutzen statt Includ

Beitrag von edel »

Eine Userlib mit Tailbite zu erstellen, lohnt sich ueberhaupt nicht. Man wird dabei nicht nur
von PB abhaengig, du musst auch zusehen das Tailbite immer funktioniert. In den letzten
Jahren konnte man sehen, dass es eher eine schlechte Loesung war und auch immer sein
wird.
Das einzige was sich wohl auch weiterhin halten wird, ist das Containerformat der Userlib.
Wenn du also weg von der Include willst, schreibe deine Funktionen in einer Sprache deren
Compiler gut optimieren, und keine (oder nur minimale) weiteren Abhaengigkeiten mit
bringen und bau dir daraus deine Userlib. Damit braucht dich ein PB Update ueberhaupt nicht
mehr zu stoeren.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Wann "lohnt" es sich eine UserLib zu nutzen statt Includ

Beitrag von STARGÅTE »

@ts-soft

Verstehe, UserLibs sind also ehr für größere Routieren, z.b. eine eigene 3D-Engine

@c4s
Jo, im vorhinein 1/2147483647 zu berechnen und dann diese Konstante zu nutzen ist schneller (auch wenn es vermutlich nie entscheident sein wird ^^)
Ein Macro ist dort auf jedefall auch die bessere Variante (spart halt einen Prozeduraufruf) nur hab ich es jetzt als Prozedur geschreiben, falls ich es übersetzen würde.

@edel
Alles klar, was ich halt befürchtet habe.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten