| |
|
|
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 ▲ |
|
|
|
|
Dieter Zornow | Die Erweiterung der Variablen-Typen ist zu begrüßen, da es doch einige Probleme gibt, weil Profan einige Rückgaben von DLLs nicht verarbeiten kann. Die Postfix in Profan haben mir aber wegen der Übersichtlichkeit immer gut gefallen. Wenn man nur ein Teilstück betrachtet hat war immer klar um welchen Variablen-Typ es sich handelt. Das hat mich bei anderen Programmiersprachen immer gestört, dass man dann immer erst nachschauen musste um welchen Typ es sich handelt. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 22.10.2009 ▲ |
|
|
|
|
RGH | Hallo,
für die bisherigen Typen ist die Verwendung des Postfix ja weiterhin möglich. Kompatibilität wird bei mir immer groß geschrieben! Es spricht also nichts dagegen, es weiter so hanzuhaben wie bisher. Beispiel: KompilierenMarkierenSeparierencls
declare memory b, string s, longint l, float f
declare b#, s$, l&
declare string hugo
dim l&, 256
dim b#, 256
waitinput
byte b#,255 = 123
print byte(b#, 0)
print byte(b#, 255)
print byte(b#, 22256)
waitinput
dim l, 256
dim b, 256
byte b,255 = 123
print byte(b, 0)
print byte(b, 255)
print byte(b, 22256)
waitinput
l = 12345
inc l
print l
inc l,300
print l
dec l
print l
dec l,300
print l
waitinput
end
In anderen Sprachen (und künftig wohl auch in XProfan) nutze ich gerne folgende Notation für Variablennamen: Ich nutze ein Präfix, dass den Typ angibt, etwa i_Wert, l_Wert, s_Text, p_Zeiger, m_Bereich, etc. So werden die Variablen auch bei fehlendem Postfix lesbar. In meiner Firma gab es für Delphi und ZIM sogar entsprechende verbindliche Programmier-Regeln, damit die Quellcodes auch für andere lesbar waren.
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 | 22.10.2009 ▲ |
|
|
|
|
Jörg Sellmeyer | |
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 22.10.2009 ▲ |
|
|
|
|
| Jörg Sellmeyer, Beitrag=54576, Zeitpunkt=22.10.2009
Ich schreib immer KompilierenMarkierenSeparierenstring s1,s2,s3
mem a,b,c
long q,w,e
string s4=s2+s1,s5=s3
mem r=20,t=30,z=point
long v=5,h=v*2,u
Kürzer gehts nimmer. ^^ |
|
|
| |
|
|
|
Jörg Sellmeyer | Ich finde auch: Das Declare sollte man sich dann sparen können... |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 22.10.2009 ▲ |
|
|
|
|
RGH | Das Declare wird - schon wegen der Kompatibilität - bleiben.Außerdem sind die Worte String und Long bereits Befehle mit anderer Bedeutung.
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 | 22.10.2009 ▲ |
|
|
|
|
| Und für Arrays: KompilierenMarkierenSeparierenbools a,b,c
ints a,b,c
longs a,b,c
floats a,b,c
strings a,b,c
mems a,b,c
^^ RGH, Beitrag=54583, Zeitpunkt=22.10.2009
Außerdem sind die Worte String und Long bereits Befehle mit anderer Bedeutung.
Zur Unterscheidung geb ich das Postfix an, in der Hoffnung, dass niemand auf die Idee kommt, eine postfixlose Variable mit Postfix deklarieren zu wollen. ^^ KompilierenMarkierenSeparieren |
|
|
| |
|
|
|
Thomas Zielinski | |
|
| XProfan X4; Win10 x64 Der Kuchen ist eine lüge! | 23.10.2009 ▲ |
|
|
|
|
Uwe ''Pascal'' Niemeier | Hi Leute!
Wenn das Postfix Teil des Dateinamens ist, wäre doch auch dies denkbar:
declare memory x#, string x$, longint x&, float x!
oder
declare memory x^, string x°, float x§
allerdings auch sinnloserweise
declare memory x!, float x$, string x%
(Aber wer das macht, ist eben selbst schuld)
Und erst wenn bei DECLARE kein Typ angegeben ist (alte Schreibweise), wird das Postfix ausgewertet und dadurch der Typ bestimmt. Damit hätte man doch alles unter einem Hut?
SeeYou Pascal |
|
|
| |
|
|
|
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 ▲ |
|
|
|