"String" wie in BlitzBasic (String wiederholen)
Übersicht

![]() |
mpmxyzBetreff: "String" wie in BlitzBasic (String wiederholen) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe BlitzMax schon ganze 2 Wochen testen können.
Eine Sache kann ich nicht verstehen: Gibt es in BlitzMax keinen Befehl, der wie String ![]() Sich eine Funktion dafür zu schreiben, wäre zwar ganz leicht, aber ich finde das ziemlich seltsam, dass das nicht schon eingebaut ist... Habe ich etwas in der - nicht gerade extrem übersichtlichen - Hilfe übersehen, oder gibt es tatsächlich keinen Ersatz dafür? mfG mpmxyz P.S.: Dieser Testcode kann mit dem "Import BB Project" nicht ohne Fehler umgewandelt werden: BlitzBasic: [AUSKLAPPEN] Print String("abc",3) Edit: Hier ist ein Ersatz, der sogar von der Laufzeit gesehen fast optimal sein sollte: BlitzMax: [AUSKLAPPEN] Function RepeatString:String(Str:String,Count:Int) |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Ich war zugegeben im ersten Moment sehr skeptisch, als ich mir den Code angeschaut habe ... aber das Ding ist echt verdammt fix! ![]() (10000 x "Hallo Welt" x 100 = ca. 75ms. // das selbe mit einfacher For-Next-Schleife zum Repeaten = ca. 950ms.) |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Beim Erstellen der Funktion habe ich mich von dieser Potenzfunktion inspirieren lassen.
Im Gegensatz zu der "sturen" For-Next-Methode ändert sich die Laufzeit logarithmisch statt linear zu der Anzahl an Wiederholungen. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die funktion ist ganz nett ![]() Vor allem hat der 2^x ansatz nicht nur einen einfluss darauf, wieviel mal die schleife läuft. Was eigentlich viel wichtiger ist, ist das du nur logarithmisch soviel müll produzierst, weil im normalfall jedes string = string + string / string :+ string zu 1-2 garbage objekten und einem neuen string führt, was bei strings sehr schnell viel speicher ist, speziell wenn der string so explosionsartig wächst wie hier. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mehr Ram Belastung ist fast immer der Preis für bessere Performance.
Man denke dabei mal an ein Speicherfeld mit 360 Elementen das die Sinuswerte cached. Sicherlich im späterem Verlauf 10mal so schnell, dafür hat man aber etwas Ram (sinnvoll) verschenkt. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm...
Eigentlich wollte ich einige Argumente dafür bringen, dass hazumu-kuns Aussage nicht sehr viel mit dieser Funktion/diesem Problem zu tun hat... ("Was soll man daran vorrausberechnen?" etc.) Nun ist mein PC auf seltsame Art und Weise abgestürzt und ich habe keine Lust, noch einmal das gleiche zu schreiben... (Die BlitzMax-Pointer mögen mich anscheinend nicht... ![]() Ich war dabei stehen geblieben, dass ich eben einen kleinen Geschwindigkeitstest in B3D gemacht habe. Ergebnis: String ![]() Außerdem ist mir aufgefallen, dass mein Algorithmus auch nicht optimal ist. Wenn man den Speicher für den neuen String vorreservieren kann, dann ist die Laufzeit nur noch linear von der Länge des Ergebnisstrings abhängig. (Ich schätze die maximale Laufzeit der jetztigen Funktion auf etwa O(n * log (n)) bis O(log(n) ^ 2) ) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hazumu-kun hat Folgendes geschrieben: Mehr Ram Belastung ist fast immer der Preis für bessere Performance.
Man denke dabei mal an ein Speicherfeld mit 360 Elementen das die Sinuswerte cached. Sicherlich im späterem Verlauf 10mal so schnell, dafür hat man aber etwas Ram (sinnvoll) verschenkt. Mehr RAM Belastung ist nicht das Problem hier. Sondern das alle ausser dem letzten String getrasht werden und da die Strings gigantisch lang werden, steigt die zeit für alloc und dealloc erheblich an, weil der Speicher den der GC zur Verfügung hat jeweils bei jeder einzelnen String Operation zu klein sein wird und er den RAM entsprechend vom OS erbitten muss. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group