Anregungen und Vorschläge zu PROFAN
Hier können Vorschläge für künftige PROFAN-Versionen, Ausgestaltung der PROFAN-Seiten und -Foren, etc. gemacht werden.
  Suchen
Seiten: 1 2Zurück zur Übersicht
 AutorThema: zukünftiges Profan sollte enthalten
Stefan Stroehlein
Datum:04.01.02 09:18 Antwortenals Email verschicken (eMailTo@StefanStroehlein.de) 


Meine Wünsche an Roland für zukünftige Profanversionen:

1. INC longinteger (wert)
Eine einfache Anweisung wie INC,x&,5 liest sich im Programm einfach besser als ein x&=x&+5. Vor allem wenn man Variablenname benutzt die aussagekräftiger sind als x& (zB Datensatznr& = Datensatznr& + 5). Außerdem ist in Zeiten von Gigabyte eine Einschränkung auf Integer nicht mehr angebracht.

2. FOR – NEXT - (STEP)
Die Schleifenprogrammierung mit WHILE-WEND ist umständlich und bläht ein Programm unnötig auf.
Ein einfaches:
FOR x& = 50 TO 500 STEP 50
NEXT x&
sieht besser aus als ein:
x& = 50
WHILE x& < 500
x& = x& + 50
WEND

3. Stringverarbeitung
Die langsame Stringverarbeitung ist mir ein Rätsel. In anderen Programmiersprachen wird dies in einem Bruchteil der Zeit erledigt. Man sollte vielleicht einmal die Routinenen dafür optimieren. Einige Sachen binde ich mit DLLs ein, die mit PowerBasic geschrieben sind. Das geht zwar, aber ist umständlich und macht Programme schlecht lesbar. Außerdem wird durch die Übergaben der Strings wieder Zeit verloren.

4. ARRAYSORT Routine
Durch die langsame Stringverarbeitung wird eine manuell programmierte Routine indiskutabel langsam. Außerdem gehört eine Array-Sortier-Routine einfach zur Grundaussattung jeder modernen Programiersprache.




Stefan Stroehlein
Datum:04.01.02 09:25 Antwortenals Email verschicken (eMailTo@StefanStroehlein.de) 


Mir ist noch ein Punkt eingefallen.

Ein Funktion die PowerBasic und anderen Sprachen besitzen.

SELECT CASE x&
CASE 1, 2, 3' Wird ausgeführt wenn x& den Wert 1 oder 2 oder 3 hat.
>Anweisungsblock<
CASE 4, 5' Wird ausgeführt wenn x& den Wert 4 oder 5 hat.
>Anweisungsblock<
END SELECT


Sven Schmidts
Datum:04.01.02 11:05 Antwortenals Email verschicken (schmidts@flat2serv.de) 


Ich mochte dieses "Select Case" von der Syntax her noch nie, besser wäre daher:

Case Wert% of
1:
2:
3:
EndCase

Zur Sortierung: Eine pauschale Sortierung hast Du in anderen Sprachen nicht, zumindest nicht vom hersteller vorgegeben. Hier eine Sortierung, die ich für Array's unter Delphi verwende. Problem ist, dass sich die Prozedur selbst aufruft, was unter Profan² (nach letzten Stand) nicht möglich ist. Sollte aber leicht zu konvertieren sein.

procedure QuickSort(iLo,iHi:Integer);
var
Lo,Hi:Integer;
Mid:Double;
TempCacheIndex:Array of RCacheIndex;
begin
Lo:=iLo;
Hi:=iHi;
Mid:=CacheIndex[(Lo+Hi) div 2].LastAccess;
repeat
while CacheIndex[Lo].LastAccess < Mid do Inc(Lo);
while CacheIndex[Hi].LastAccess > Mid do Dec(Hi);
if Lo<=Hi then begin
SetLength(TempCacheIndex,1);
TempCacheIndex[0] := CacheIndex[Lo];
CacheIndex[Lo] := CacheIndex[Hi];
CacheIndex[Hi] := TempCacheIndex[0];
Inc(Lo);
Dec(Hi);
SetLength(TempCacheIndex,0);
end;
until Lo>Hi;
if Hi>iLo then QuickSort(iLo,Hi);
if Lo<iHi then QuickSort(Lo,iHi);
end;

Mfg.
Sven Schmidts



Sven Schmidts
Datum:04.01.02 11:07 Antwortenals Email verschicken (schmidts@flat2serv.de) 


Sorry, und hier nochmal für String-Arrays:

procedure QuickSort(var A:array of String;iLo,iHi:Integer);
var
Lo,Hi:Integer;
Mid,T:String;
begin
Lo:=iLo;
Hi:=iHi;
Mid:=A[(Lo+Hi) div 2];
repeat
while A[Lo]<Mid do Inc(Lo);
while A[Hi]>Mid do Dec(Hi);
if Lo<=Hi then begin
T:=A[Lo];
A[Lo]:=A[Hi];
A[Hi]:=T;
Inc(Lo);
Dec(Hi);
end;
until Lo>Hi;
if Hi>iLo then QuickSort(A,iLo,Hi);
if Lo<iHi then QuickSort(A,Lo,iHi);
end;




Stefan Stroehlein
Datum:04.01.02 12:57 Antwortenals Email verschicken (eMailTo@StefanStroehlein.de) 


sortierroutiene
ich muß svens behauptung korrigieren.
1. unter powerbasic steht eine blitzschnelle sortierroutiene zur verfügung und zwar arraysort. mit den paramteren kann man sogar die reihenfolge festlegen, zb von klein nach groß bzw von groß nach klein. am beindruckensten ist aber die geschwindigkeit. ich habe bei einer anwendung 800 array in ca. 1.5 sekunden sortiert (natürlich von der prozessorleistung abhänig).
2. das select case, daß von mir vorgeschlagen wurde beinhaltet eine oder-verknüpfung. Das von sven ist im prinzip ein einfacher 'case x% = 1: anweisung' befehl.


Rene Wagner
Datum:04.01.02 14:00 Antwortenals Email verschicken (apollo@rw-net.de) 


1. die INC-Variante für longinteger ist keine schlechte Idee, aber wenn schon dann auch bitte für DEC, ADD und SUB. :)

2. Halte ich für überflüssig. while erledigt genau das selbe. Und das Argument "besser Aussehen" ist einfach lächerlich. Das hängt von den Vorlieben des Programmierers ab und ist auch eine Gewöhnungsfrage.

3. Performance-Optimierungen sind an jeder Stelle, nicht nur bei Strings, willkommen. :)

4. hab ich bisher nicht gebraucht, daher isses mir wurscht.

5. da stimme ich Sven zu, seinen Vorschlag finde ich besser. Bei einer solchen Variante ist ein oder Verknüpfung ja nicht ausgeschlossen.

mfG, René


Sven Schmidts
Datum:04.01.02 14:49 Antwortenals Email verschicken (schmidts@flat2serv.de) 


Hallo,

> 1. unter powerbasic steht eine blitzschnelle sortierroutiene > zur verfügung und zwar arraysort.

Warum sollte jede Kleinigkeit als Befehl vorliegen? Ich verstehe nach- wie vor nicht, warum Sleep als Befehl nun mit dabei ist. Eine gute INC erledigt das alles auf einen Schlag.

> beindruckensten ist aber die geschwindigkeit.
> 800 array in ca. 1.5 sekunden sortiert

Niedlich ;) Delphi schafft >5000 Einträge eines Arrays mit 8 Elementen (String, Boolean, Integer, Word gemischt) in < 0.5 Sekunde ...

Mfg.
Sven Schmidts


Frank Abbing
Datum:04.01.02 20:12 Antwortenals Email verschicken (frankabbing@12move.de) 


Hallo zusammen,

"Niedlich ;) Delphi schafft >5000 Einträge eines Arrays mit 8 Elementen (String, Boolean, Integer, Word gemischt) in < 0.5 Sekunde ..."

Putzig, Assembler schafft mehrere Millionen in eine einer Mikrosekunde... ;-)

Gruß, Frank


Sven Schmidts
Datum:04.01.02 20:19 Antwortenals Email verschicken (schmidts@flat2serv.de) 


Noch niedlicher, weil der Delphi-Compiler Assembler Code, OPTIMIERT!, erzeugt ... ;))


Dennis Schulmeister
Datum:05.01.02 00:37 Antwortenals Email verschicken (dennis.schulmeister@web.de) 


Hallo,

was ich mir schon imemr gewünscht habe und der Nichtrealisierung
mit Unverständnis zusehe ;) ist,

dass ich eine später im Programm definierte Prozedur von
einer früher definierten aus aufrufen kann.

z.B.

Proc T2
T1
EndProc

Proc T1
Print "Hallo"
EndProc

T2

Äh, soweit ich weiß, kann sich eine Prozedur schon immer
selber aufrufen. (Was für ein Deutsch... *g*)

Dennis :D
Dennis :D


Frank Abbing
Datum:05.01.02 02:04 Antwortenals Email verschicken (frankabbing@12move.de) 


Hallo,

>Sven: 5000 Einträge in einer halben Sekunde nenne ich alles andere als OPTIMIERT !!! 286er optimiert, oder was.....
Manuell erstellter Code ist immer besser als Standard-Routinen für Befehle, die es als Maschinencode gar nicht gibt.
Da brauch' ich mir nur die Länge eines Quellcode anschauen, das gleiche Programm, einmal Assembler und einmal Delphi. OPTIMIERT... Das ich nicht lache !!!

Gruß und Ende, Frank


René Wagner
Datum:05.01.02 11:07 Antwortenals Email verschicken (apollo@rw-net.de) 


@Dennis
ich habs zwar noch nicht probiert, bin aber auch der Meinung, das rekursive Programmierung mit Profan möglich ist. :)
Das mit der Vorwärtsdeklaration von Prozeduren is so ne Sache, ich denke wenn mans richtig macht braucht man sowas nicht. ;)

@Sven
Warum sollte jede Kleinigkeit als Befehl vorliegen?
Da hast Du recht. Punkt. :)

mfG, René


Thorsten
Datum:05.01.02 11:41 Antwortenals Email verschicken (mrk@mrk-soft.de) 


He He, Streitet euch nit.
Viel Interessanter ist die Tatsache, was den aus dem Project
von Roland geworden ist, wo Profan Code nach Pascal (oder
wars Delphi) Umgewandelt werden konnte. Rolnad hatte mal das
MÜLL Demo Spiel damit Konvertiert.

Thorsten



Anna Bolika
Datum:09.01.02 20:44 Antwortenals Email verschicken (anna@bolika.de) 


Hallo,
@Frank:
> Putzig, Assembler schafft mehrere Millionen in eine einer Mikrosekunde... ;-)

Kannst Du mal eine Referenzimplementierung hier posten? Mich würde mal interessieren, wie man mehr als 1.000.000 Einträge in 2000 Prozessortakten (soviel schafft ein 2 GHz-Prozessor in 1 Mikrosekunde) korrekt sortiert. Dann könnte ich endlich meine langsamen QuickSort-Routinen durch deutlich schnellere Routinen ersetzen.

Ciao,

Anna



Frank Abbing
Datum:09.01.02 20:58 Antwortenals Email verschicken (frankabbing@12move.de) 


Hallo,

so eine grosse Datenbank habe ich nicht.

Es kammt halt auch auf den Sortier-Algorhythmus an, man muß schon eine Methode wählen, deren Technik an sich schon schnell ist.

Anna Bolika ?
Ist das wirklich dein Name? Sehr seltsam...

Gruß, Frank


Anna Bolika
Datum:10.01.02 18:14 Antwortenals Email verschicken (anna@bolika.de) 


Hallo Frank,
Du brauchst die Datenbank nicht mitschicken. Der Algorythmus würde mir ausreichen.

Ciao,

Anna


Stefan Stroehlein
Datum:05.01.02 11:31 Antwortenals Email verschicken (StefanStroehlein@T-Online.de) 


ich glaube ich habe in ein wespennest gestochen.

wir brauchen hier aber nicht diskutieren welcher compiler wieviele arrays sortieren kann. denn zum ersten steht hier die leistung von profan zur depatte und zum anderen hängt es davon ab ob ich ein array mit je 2 zeichen oder arrays mit 1kb sortiere, die sich zum teil erst in den letzten paar zeichen unterscheiden.

alle die der meinung sind nicht alles muß in befehlen vorliegen die sollten auf assembler umsteigen, denn da könnt ihr für ein 'hallo welt' gleich eine ganze seite programmieren. da ich aber beruflich programmiere (ich schreibe in meiner freizeit software für meinen betrieb), ziehe ich eine möglichst kompakte sprache vor. denn für mich ist zeit gleich geld.



Thorsten
Datum:05.01.02 14:00 Antwortenals Email verschicken (mrk@mrk-soft.de) 


>alle die der meinung sind nicht alles muß in befehlen
>vorliegen die sollten auf assembler umsteigen, denn da könnt
>ihr für ein 'hallo welt' gleich eine ganze seite
>programmieren. da ich aber beruflich programmiere (ich
>schreibe in meiner freizeit software für meinen betrieb),
>ziehe ich eine möglichst kompakte sprache vor. denn für mich
>ist zeit gleich geld.

Das ist absoluter Quatsch. Programieren ist auch ein wenig
"Denken" und eigentlich nur Mathematik. Nun ließe sich für
jeden kleinen "Pups" ein Befehl in Profan erstellen, so
z.b. lMKstr$, der einen String liksbündig mit so vielen
Zeichen auffüllt, wie angegeben, um z.b eine fester länge
von Strings erzeugen zu können, oder rMKstr$, wo das ganze
nur Rechtsbündig wäre, FOR .. NEXT, was sehr schön mit einer
WHILELOOP Schleife erfüllt werden kann, Arrays sind zwars
schön in der Handhabung, in wirklichkeit aber auch nur
Bereichsvariablen und das Verwalten des Array Speichers kostet
Zeit, für Bequemlichkeit. Hätten die Array eine Feste länge,
wäre das mit sicherheit einfacher zu handhaben !!!

rMKstr$ und lMKstr$ hab ich z.b mit 2 Definitionen selber
nachempfunden, dafür brauch es keine extra Befehle. Und
wenn ich in einenm Programm auf Geschwindigkeit Toppe, so
nehme ich Bereichsvariablen, z.b. ist das Spiel PACMAN
in Profan geschrieben, und nutzt zu 99 % nur Bereichs-
variablen.

Und das man alles in Assemlber machen soll, ist wirklicher
Blödsinn. Alledings ist die Kombination Assembler - Profan
sehr gut, Zeitkritische Aufgaben lassen sich so in Assembler
in nur Bruchteile von Millisecunden erledigen, und der Aufruf
der DEF aus Profan heraus fällt überhaut nicht ins Gewicht.

Um so mehr Umfang Profan bekommt, desto langsammer wird es
werden. Roland sollte sich wikrlich nur um wichtige Dinge
kümmern, die mit Profan selber nur sehr aufwendig zu
Realisieren sind, oder besser dann auf einer DLL ausweichen.

Den ganz Ehrlich gesagt finde ich es doch sehr blöde, gute
400 KB Runtime zu einem 2 KB grossen Quellcode zu Linken,
wo nur 1/8 des Umfangs der Runtime benötigt wird !!!!

Für diejenigen: "DLL´s, schon wieder Flickzeugs !!". In dem
Verzeichniss, wo die EXE liegt, können auch die DLL
selber sein, die brauchen also NICHT nach Windows oder
Windowws/System .ect.

Zum zweiten hat das Project von Roland, wo ein Profan Code
nach Pascall !!! (oder Delphi) umgesetzt wurde, nichts mit
Spielen zu tun, Roland hatte ebend nur diesen Profan Code
genommen und umsetzen lassen. Mann hätte mit Sicherheit
auch ein beliebiges anderes Programm dazu nehmen können.

Vorschläge sind Prinzipell gut und sollen auch sein, um
Profan Aktraktiver zu gestallten, jedoch sollte der Nutzen
neuer Funktionen in Wage zum Aufwand und Ausführungszeit
halten.

Thorsten



Stefan Stroehlein
Datum:05.01.02 12:22 Antwortenals Email verschicken (eMailTo@StefanStroehlein.de) 


@Thorsten
ein projekt das einmal war interessiert mich nicht. außerdem konnte ich in der werbung die mich dazu gebracht hatte profan zu kaufen nicht von irgendwelchen exportieren spielen lesen, vielmehr stand da was von einer programmiersprache.

@Denis
ich bin der gleichen meinung wie denis, daß eine beachtung der reihenfolge von prozeduren innerhalb eines programmes unnötig wäre. bei einigen programmen die verschachtelte prozeduren enthalten muß ich schlicht weg ein und den selben code mehrmals an verschiedenen stellen im programm einfügen. was logischerweise bei einer erweiterung des programmes zu unnötigen und gefährlichen fehleren führen kann. besser wäre hier ein 'declare funktion' im vorspann des programmes, noch besser wäre allerding wenn profan sich automatisch darum kümmern würde.


Thorsten
Datum:05.01.02 14:14 Antwortenals Email verschicken (mrk@mrk-soft.de) 


>bei einigen programmen die verschachtelte prozeduren
>enthalten muß ich schlicht weg ein und den selben code
>mehrmals an verschiedenen stellen im programm einfügen. was >
>logischerweise bei einer erweiterung des programmes zu >
>unnötigen und gefährlichen fehleren führen kann. besser wäre
>hier ein 'declare funktion' im vorspann des programmes, noch
>besser wäre allerding wenn profan sich automatisch darum
>kümmern würde.

In was hat du vorger geproggt, DOS-BAASIC Version 0.0.3,
Steinzeit 1982 .... ?????

Wenn man ein Programm Logisch Aufbaut, oben alles, was
Modular sein soll, darunter der Code, ist das alles kein
Problem und selbst Proceduren können dann andere Aufrufen.
Dann braucht man auch keine Code mehrmals zu schreiben. Aber
das gehört auch zum Thema "Struckturierte Programmierung".

Zum zweiten kannast du auch Variablen für ALLE Proceduren
zur verfügung stellen, ohne viel Aufweand.

 'hier fängt das Programm an

 DECLARE zahl1%, zahl2%, zahl$

 PROC zufall
  Randomize
  zahl1% = rnd(99) + 1
  zahl2% = rnd(99) + 1
 ENDPROC

 PROC xyz
   declare rr1$
   rr1$ = substr$(zahl$,2,".")
   ' irgendwas
   zahl$ = rr1$
 ENDPROC

 cls
 zufall
 xyz






Seiten: 1 2Zurück zur Übersicht
 

 Ein kostenloses WebMart Forum
WebMart Homepage Tools kostenlos
Shortwin - denn Glück ist kein Zufall!