| |
|
|
- Seite 1 - |
|
RGH | Hallo,
wie schon angedeutet, möchte ich künftig neue Variablentypen in XProfan ermöglichen. Das erfordert einen ziemlichen Umbau in der Datenhaltung. In einem ersten Schritt hatte ich diesen Umbau durchgeführt, ohne aber die Syntax zu verändern. Bislang wir der Typ einer Variablen wie im klassischen Basic durch ein Postfix, dem letzten Zeichen des Variablennamens, definiert: !, %, &, $ oder #. Der Parser war also genau darauf ausgelegt und erkannte und unterschied Variablen an diesem Postfix. Nun stellte sich die Frage, was für Postfixe könnte man den noch benutzen? Schließlich sollen die Zeichen auf der Tastatur leicht erreichbar sein. Da blieben noch solche Zeichen wie °, § und €. Ein Problem: Auf internationalen Tastaturen gibt es die Zeichen teilweise nicht. (Ok, nicht so dramatisch, da sich die internationale Verbreitung XProfans doch sehr in Grenzen hält.) Das Hauptproblem: Danach ist aber Schluß. € könnte noch für einen Währungstyp durchgehen. Die vorläufige Lösung: Abkehr vom Postfix. Dazu musste der Parser komplett umgeschrieben werden und auch noch einige Befehle und Funktionen, die Variablennamen als Parameter verlangen (etwa CLEAR, DISPOSE, DECLARE, PARAMETERS, CLASSOF, SIZEOF, etc.). Außerdem braucht es für Variablennamen ohne Postfix noch eine neue Syntax, um den Typ zu bestimmen. Und 100%ig kompatibel zur bisherigen Syntax sollte es auch sein. So sieht die Lösung bei mir zur Zeit aus (und wird demnächst an die ersten Tester gehen):
Declare <Typ> <Name>, <Typ Name>, ... Parameters <Typ> <Name>, <Typ Name>, ... Var <Typ> <Name> = <Wert>
Die bisherigen Typen heißen STRING, INTEGER, LONGINT, FLOAT und MEMORY.*
Neue und bisherige Syntax können beliebig gemischt werden. Zu beachten ist natürlich, dass bei Variablen mit Postfix dieses Zeichen Teil des Namens ist. So sind ja bislang schon X$, X&, X%, X! und X# unterschiedliche Variablen, die sich durch den Postfix unterscheiden. Also werden künfig auch STRING X und X$ zwei verschiedene Variablen sein. Da ein Variablenname nicht doppelt vorkommen darf, wird es natütlich nich gleichzeitig einen STRING X und einen LONGINT X geben dürfen. (Für Nutzer anderer Programmiersprachen eine Selbstverständlichkeit.)
So viel vorerst dazu. Wie gesagt: Bei mir funktioniert es schon.
Gruß Roland
* denkbar wären auch die Bezeichnungen STRING, INT, LONG, FLOAT und MEM |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 22.10.2009 ▲ |
|
|
|
|
| |
|
- Seite 1 - |
|
RGH | @Thomas: Dein Vorschlag mit VAR wäre nicht kompatibel mit der jetzigen Form der Deklaration und den Typ erst bei der ersten Zuweisung zu bestimmen wäre auch gänzlich inkompatibel und mit einem Compiler sehr schwierig umzusetzen. Das würde vermutlich auch ein sehr ernstes Problem für Profan2CPP werden.
Die Befehle zur Deklaration bleiben so wie sie sind: DECLARE und VAR.
Ich schwanke noch zwischen den Typbezeichnungen "INTEGER, LONGINT, FLOAT, STRING, MEMORY" auf der einen und "INT, LONG, FLOAT, STRING, MEM" auf der anderen Seite. Für die längere Variante spricht, dass diese Typbezeichnungen sich bereits durch die komplette Hilfe von XProfan durchziehen und den Aufsteigern geläufig sind; für die kürzer Variante spricht die Bequemlichkeit mancher Programmierer. (Ganz Tippfaule und Assemblerfreaks mit einem Faible für DreiBuchstabenBezeichner würden vermutlich INT, LNG, FLT, STR und MEM vorschlagen. ;) )
Jörgs Vorschlag zur Bequemlichkeit beim Entippen muss ich mal überdenken. Vermutlich ist es leichter programmiert, als in der Hilfe für Einsteiger verständlich dargelegt. ;)
@Pascal: Keine Bange, derartiger Unsinn wird nicht möglich sein: Entweder ein Postfix (wie bisher) oder eine Typangabe! Wenn ein Variablenname ein Postfix hat, dann definiert dieser beim DECLARE, VAR oder PARAMETERS den Typ. "DECLARE String test$" würde zu einer Fehlermeldung führen, genauso wie die bewusste Irreführung "DECLARE String test&".
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.10.2009 ▲ |
|
|
|
|
Jörg Sellmeyer | Wie wäre es so mit dem Hilfetext:
Deklarationen erfolgen wie bisher mit dem Schlüsselwort "Declare".
Declare Text$, Zahl%, Kommazahl!
Jetzt kann auch noch der Variablentyp dazu angegeben werden. Dann fällt das Postfix als Namensbestandteil weg:
Declare string s1, s2, s3 Declare integer zahl1, zahl2
Aber auch:
Declare string s1, integer zahl1, longint grossezahl1
Hinter einer Typbezeichnung können mehrere Variablen in Gruppen deklariert werden:
Declare string s1, s2, s3, integer zahl1, zahl2, float f1, f2
Sinnvoll bei dieser Art der Variablenbenennung (ohne Postfix) ist ein Kennzeichnung z. B. durch ein vorangestelltes Zeichen:
Declare string sText, sZeile, integer iBreite, iLaenge, float fEndSumme
Ich hätte auch nix gegen die Dreibuchstaben-Variante. Vielleicht optional... |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 23.10.2009 ▲ |
|
|
|
| |
|
- Seite 2 - |
|
|
Dieter Zornow | Es wäre ja auch mal interessant zu erfahren, um wieviele neue Typen es sich handelt und welche das sind. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 23.10.2009 ▲ |
|
|
|
|
RGH | Dieter Zornow, Beitrag=54593, Zeitpunkt=23.10.2009
Es wäre ja auch mal interessant zu erfahren, um wieviele neue Typen es sich handelt und welche das sind.
Noch gibt es gar keine neue Typen. Bevor ich mir darüber Gedanken mache, will ich erst mal die Möglichkeit schaffen, solche einzuführen. Gefordert wurden bereits QuadInt, Unsigned Integertypen, Single (32-Bit Floats), Boolean, etc. Denkbar wären auch Typen wie Date, WideChar, etc. Wie gesagt, vorerst geht es nur darum, die Möglichkeit zu schaffen.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.10.2009 ▲ |
|
|
|
|
| Ist natürlich auch immer Geschmackssache, ich hatte mich damals konsequent für die jeweilige Kurzversion entschieden.
Longint > Long Integer > Int Memory > Mem Boolean > Bool Float > Float String > String Byte > Byte
Das Linke ist basichafter, anderes moderner - ich würde beides ermöglichen. |
|
|
| |
|
|
|
Nico Madysa | Als -- womöglich letzten -- Variablentyp, der auch ein Postfix hat (meinetwegen §) schlüge ich 64-Bit-Integer vor, mit denen man auch im Gigabytebereich rechnen kann. Die sind mir mal, als ich Festplattengrößen angeben wollte, sehr nötig geworden. |
|
|
| |
|
|
|
ByteAttack | Vielleicht könnte man die Variablen selbst verschnellern in dem man gleich bei der Deklarierung einen Wert zuweist. Beispiel: Declare Wert%=5000, Wert$="Hallo Welt", etc...
Dann würde der Code glaub ich schneller laufen? oder ? |
|
|
| |
|
|
|
RGH | Marc-Gordon, Beitrag=54622, Zeitpunkt=26.10.2009
Vielleicht könnte man die Variablen selbst verschnellern in dem man gleich bei der Deklarierung einen Wert zuweist. Beispiel: Declare Wert%=5000, Wert$="Hallo Welt", etc...
Dann würde der Code glaub ich schneller laufen? oder ?
Zum einen: Dafür gibt es den Befehl VAR Zum anderen: Eine Variable wird ja dort eingesetzt, wo sich der Wert im Laufe des Programmes durch Zuweisung des öfteren ändert. Dann dürfte die geringe Zeitersparnis bei der ersten Zuweisung nicht meßmar ins Gewicht fallen. (Wenn sich der Wert nicht ändert, ist eine Konstante empfehlenswerter. Die ist deutlich schneller.)
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 26.10.2009 ▲ |
|
|
|
|
RGH | Nico Madysa, Beitrag=54603, Zeitpunkt=24.10.2009
Als -- womöglich letzten -- Variablentyp, der auch ein Postfix hat (meinetwegen §) schlüge ich 64-Bit-Integer vor, mit denen man auch im Gigabytebereich rechnen kann. Die sind mir mal, als ich Festplattengrößen angeben wollte, sehr nötig geworden.
Es wird definitiv keinen neuen Variablentyp mit Postfix mehr geben. Aber der QuadInt könnte der erste Typ der neuen Syntax werden.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 26.10.2009 ▲ |
|
|
|
|
Dieter Zornow | Ein vorzeichenbehafter 32bit Float-Wert wäre auch nicht schlecht. Einige DLLs geben sowas zurück und man kann es nicht in Profan übernehmen. Es kommt sogar in einigen Fällen zum Programmabsturz. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 26.10.2009 ▲ |
|
|
|
|
RGH | Dieter Zornow, Beitrag=54626, Zeitpunkt=26.10.2009
Ein vorzeichenbehafter 32bit Float-Wert wäre auch nicht schlecht. Einige DLLs geben sowas zurück und man kann es nicht in Profan übernehmen. Es kommt sogar in einigen Fällen zum Programmabsturz.
An den Typ Single habe ich in der Tat auch schon gedacht. Aber auch jetzt schon kann man in XProfan mit derartigen DLLs arbeiten (nahezu alle Open-GL-Aufrufe benutzen 32-Bit Floats (=Single)): Wenn die DLL ein Single als Parameter erwartet: Eine XProfan-Float (Double) mit der Funktion Single() auf einen LongInt mappen und diesen der DLL übergeben. Wenn die DLL eine Single zurückgibt: Das Ergebnis zunächst in ein LongInt aufnehmen und dann mit der Funktion Double() in ein XProfan-Float wandeln. (Siehe in der Hilfe das Kapitel "28.9 - Hilfsfunktionen für 32-Bit-Fließkommazahlen".)
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 26.10.2009 ▲ |
|
|
|
|
Dieter Zornow | Es geht im speziellen um die Audiogenie.dll und da waren ja damals alle Versuche nicht erfolgreich. Mittlerweile hat Stefan einige wichtige Ergebnisse extra für Profan-User erweitert. Aber die Floats sind nach wie vor nicht zu übernehmen. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 26.10.2009 ▲ |
|
|
|