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 2 | Zurück zur Übersicht

Autor | Thema: zukünftiges Profan sollte enthalten
Stefan Stroehlein
| Datum:04.01.02 09:18 (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 (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 (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 (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 (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 (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 (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 (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 (schmidts@flat2serv.de) |
Noch niedlicher, weil der Delphi-Compiler Assembler Code, OPTIMIERT!, erzeugt ... ;))
Dennis Schulmeister
| Datum:05.01.02 00:37 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 2 | Zurück zur Übersicht

| Ein kostenloses WebMart Forum WebMart Homepage Tools kostenlos |