| |
|
|
| So V0.1.6 is raus!
Größeres XPSE-Update! Bitte den alten noch aufheben, in V0.1.6 wurden viele neue Features hinzugefügt, die Kontrollen verbessert und und und...
Umlaute werden jetzt auch unterstütz! <offtopic>Was naturalmente nur ein Bug sein kann! </offtopic>
Was ist neu:
Die Variablenerkennung ist deutlich verbessert. Die Variablen werden jetzt auch den Prozeduren zugeordnet und die Typen werden geprüft.
Headerfiles: Werden nun eingelesen und deren Anwendung überprüft! Im Source benutzte Strukturen, Apis oder Konstanten werden vom XPSE nun direkt umgesetzt und die Headerfileangaben werden aus dem Source entfernt - was zu Folge hat das der XProfankompiler die Headerfiles nicht mehr necessario.
Warum das XPSE tut? Weil er die Umsetzung um ein Vielfaches schneller macht als der XProfankompiler und der XProfankompiler auch noch weniger zu tun hat und schneller kompiliert.
Durch das Einlesen der Headerfiles kann XPSE auch Strukturendefinitionen und Anwendungen überprüfen - und muss diese nicht mehr übergehen. Falschgeschriebene Konstanten werden nun auch angemeckert.
Benutzte APIs aus den Headerfiles werden nicht einfach nur als Externals in den Source umgewandelt! Das schnellere Call wird verwendet und die Prozeduradresse aus der DLL wird einmalig bezogen. Das macht die Abarbeitung von ApiCalls aus Headerfiles auch noch schneller.
Nur noch fremde Headerfiles müssen angegeben werden! Die StandardHeaderFiles windows.ph, messages.ph, commctrl.ph, structs.ph, Avi.ph, gdi.ph, OpenGL.ph, richedit.ph und shellapi.ph hat XPSE intus! Die Angabe der Headerfiles ist nicht mehr nötig! Werden die Files trotzdem angegeben nutzt XPSE die angegebenen und nicht die eingebauten!
Durch das Weglassen von Headerfileangaben wird das Kompilieren jedoch noch schneller! Weder XPSE noch der XProfankompiler müssen die Headerfiles einlesen!
Das ~ muss nicht mehr verwendet werden! Es kann - aber es muß nicht! Nur wenn der Name vielleicht mit einem anderen kollidiert müsste das ~ verwendet werden.
APIs, Strukturen und Konstanten können also einfach verwendet werden ohne diese zu deklarieren und ohne das ~ Zeichen.
Einfach probieren! KompilierenMarkierenSeparieren |
|
|
| |
|
|
|
| Update auf V0.1.6f, ein Bug welcher Strukturdefinitionen betraff ist gefixd. Langsam wirds richtig rund mit den Headerfiles!
Probiert mal wirklich einfach die Headerfiledefinitionen $H wegzulassen - also was die Standartheader betrifft.
Ich finds richtig lecker... |
|
|
| |
|
|
|
| Update auf V0.1.6g, Frank hatte einen Bug gefunden. Zeilen welche möglicherweise ein Kommentar enthielten nachdem ein künstlicher Zeilenumbruch mit gesetzt ist wurden dann falsch umgebrochen wenn das innerhalb eines Strings angewandt wurde. Der Fehler ist behoben.
Es gibt auch neue Kompilerschalter!
{$pushkeyword ...} {$pushkeyword enduro&} {$pushkeyword enduro&,maxior&,irgendEinKeyword}
Pushkeyword befiehlt XPSE darüber hinwegzusehen wenn eines der deklarierten Keywords im Source angeblich nicht deklariert wurde. Das kann z.B. dann der Fall sein wenn zu einer Unit ein Definitionsfile fehlt oder eine Funktion/Variable aus einer Unit benutzt wird welche im DefFile nicht angegeben ist.
{$debug onlyprocs} Der beliebte XPSE-Debugmodus, jedoch eine Version welche nur das Begehen und Verlassen von Prozeduren schreibt.
{debug kernelout onlyprocs} Wie {$debug onlyprocs} nur das wie bei {$debug kernelout} das Ergebnis nicht im .debug-File landed sondern an eine DebuggerApp gesandt wird. |
|
|
| |
|
|
|
| Update auf V0.1.6h, im Rahmen des Unitsupportes habe ich ein paar Verbesserungen vorgenommen.
Es gibt auch eine neue Taste W, diese öffnet eine File mit allen Warnings ausserhalb des XPSE. |
|
|
| |
|
|
|
| Update auf V0.1.6j, ich habe Zwei Wünsche umgesetzt.
XPSE setzt jetzt die Kompilerdirektive $DEFINE XPSE und folgende Konstanten: KompilierenMarkierenSeparieren xpseVersionString wird ersetzt in die Versionsnummer des XPSE als String. xpseCompileTimestampString wird ersetzt in einen Zeitstempel der Kompilierung des aktuellen Sources als String. Dieser enthält Datum und Uhrzeit. xpseNumSourceCodeLinesLong enthält die tatsächlich dem Source angehörige Anzahl der Codezeilen als Long. |
|
|
| |
|
|
|
| Naja bisl mehr solls schon sein.
1. Also XPSE rettet Wend. (Ich würde mein heiß geliebtes Wend gerne behalten) Ich habs also zu der virtuellen Liste der Konstanten hinzugefügt - es wird automatisch nach endwhile umgesetzt.
2. Die Konstanten true, false, nil, nul und null habe ich ebenfalls zu der virtuellen Liste der Konstanten hinzugefügt - diese können jetzt einfach verwendet werden was naturalmente nur rein optische Auswirkungen haben wird - aber diese sind nunmal gerne gesehen. *lol*
3. Keine verschiedenen Kompilerschalter zum Includieren von Unità, Headerfiles oder Include! XPSE sieht selber was los ist... KompilierenMarkierenSeparieren 4. Bug beseitigt - {$preferednamespace ***} hat jetzt nicht nur Bedeutung per das erzeugte HelpFile einer Unit - sondern sorgt auch dafür das die aus den Headerfiles nach Call konvertierten ApiCalls innerhalb einer Unit nicht mit anderen Unità, oder mit dem Hauptprogramm kollidieren können. Das Setzen des Schalters innerhalb von Unità ist also Pflicht - aber keine Sorge - XPSE meckert wenn was nicht passt.
-1. Ich kann garnicht oft genug wiederholen und sagen wie schön es ist z.B. einfach case isiconic(hwnd&) : continue schreiben zu können ohne Headerfiles einzubinden oder dieses schlimme ~ Zeichen benutzen zu müssen! Es ist als wenn die komplette Api mit allen Strukturen und Konstanten zu füßen liegt - ohne Geschwindigkeitsverlust und ohne HeaderEinbindungen.
Nachtrag: Mist! Mein erster Text war besser! Aber es sollte wohl nicht sein... |
|
|
| |
|
|
|
| Alles Experimentell ab V0.1.6L:
+ Systemvariablen ohne Prefix. + Var auch per Klassenzuweisungen in Bereichsvariablen. + Var auch per Klassenzuweisungen in Bereichsvariablen ohne Prefixangabe. + Operator :: per Zugriff auf Objekte oder Methoden einer Klasse von Ausserhalb.
Beispielcode: KompilierenMarkierenSeparierenTippt sich doch gleich alles viel leckerer und kommt auch deutlich vertrauter und verständlicher rüber und ich würde sogar sagen so wird mir das XProfanOOP sogar nicht richtig symphatisch. ^^ |
|
|
| |
|
|
|
| Gleich mal ne Bugfixversion V0.1.6m nachgeschoben und jetzt wird das Schlüsselwort this-> auch supportati um innerhalb der Methoden auf Methoden oder Objekte gleicher Klasse zu zeigen (erspart eigendlich nur das neutippen des Klassennamens): KompilierenMarkierenSeparierenclass undo = undo@,method1@,method2@
proc undo::undo(h&,mode&)
print "Class qUNDOq initialized."
this->method1(h&,mode&)
endproc
proc undo::method1(h&,mode&)
print "Method1 proceed. ",h&," ",mode&
print this->method2()
endproc
proc undo::method2
print "Method2 proceed."
return "Done"
endproc
cls
var myUndo:=new(undo,hwnd,1)
dispose myUndo
waitkey
end
|
|
|
| |
|
|
|
| Update auf V0.1.6t
Diese Version sollte keine Probleme mit Umlauten in Pfad- und Dateiangaben per Übergabe als Parameter haben. |
|
|
| |
|
|
|
| Update auf V0.1.6v
Konstanten-bugFix bei Aufrufen ohne ~ (tilde) wenn diese wiederum Konstanten enthielten und Doppeldeklarationen mit Parameters und Var werden nicht mehr als Warnings behandelt. ( [...] ) |
|
|
| |
|
|
|
| Update auf V0.1.6x
Es gibt einen neuen Variablentypen! Suffix: NIX (garnichts) Kein Suffix! Kein Suffix? Nö! Kein Suffix. Was ist das per ein Typ? Alles was Du willst! String, Long, Integer oder Float.
Okok neuer Variablentyp ist falsch, es gibt keinen neuen Typen - die vorhandenen Typen bleiben. Aber eins ist neu: Keine Suffixe mehr - wenn man möchte!
Wie das geht? Ganz einfach - wie bisher - man deklariert z.B. drei Long:
long a,b,c
oder 4 strings?
string s,t,r,u
Das wars.
Als besonderes Feature potuto ich erwähnen das man auch gleich innerhalb der Deklaration (wie seit X10 possibile) die Werte zuweisen kann. So: (jetzt mal integer)
int a=10
oder
int a=10,b=20,c=a+b,d=50 <-- jau das geht auch! Lecker? Lecker!
Später im Programm dann einfach a statt a% schreiben. Kann man sich glaub ich gut merken ^^ Wer a% schreibt ist aber auch nicht schlechter bedient - beides geht!
int a%=10 <-- geht aber nicht! int a=10 <-- geht!
Und Bereichsvariablen?
Nixda! Floats, Longs, Ints und Strings.
Demo? Kla: KompilierenMarkierenSeparieren |
|
|
|
|
| Ab XPSE V0.1.6y funktionierts jetzt auch lokal... (alles experimentell!) KompilierenMarkierenSeparieren
proc test(long a,b,c,d,e,string s)
string h="argh!"
proc luma(int a,b,c)
int h=a*b*c
return str$(h+b+c)+s
endproc
s=str$(gettickcount)
print a,b,c
print "Tick:",s
KompilierenMarkierenSeparieren *bang*
Somit kann auch innerhalb von Prozeduren ohne Variablensuffixe gearbeitet werden, sogar das Angeben von Parametern kann ohne Suffixe geschehen, und auch bei verschachtelten Prozeduren funktioniert es. (Sichtweite -1 pro Schachtel) KompilierenMarkierenSeparieren |
|
|
| |
|
|