D - Arrays that parallel an enum
- Riccardo De Agostini (23/23) Jul 30 2003 Walter,
- Walter (7/30) Aug 10 2003 That is a good idea. -Walter
- Achilleas Margaritis (41/78) Aug 11 2003 There is an easier way, in my opinion than enums: the set. A 'set' could...
- Sean L. Palmer (33/114) Aug 11 2003 I'd rather have set apply to any type, but not define the possible value...
- Riccardo De Agostini (13/23) Aug 25 2003 be
- Simon J Mackenzie (28/33) Aug 20 2003 Another good/not so good thought, if enumerated types could support
- Charles Sanders (4/45) Aug 20 2003 Is this syntax (initalizing associatvie arrays ) in the new compiler ?
Walter, I read on DigitalMars' website, under the "Arrays that parallel an enum" paragraph in the "Converting C to D" section ( http://www.digitalmars.com/d/ctod.html#arrayenum ) that Walter defines the D way of declaring such an array "not perfect, but better" with respect to the C (no-) way. Maybe suggestions on this have already been given, but how about something like: enum COLORS { red, blue, green } char cstring[COLORS][] = [red: "red", blue: "blue", green: "green"]; In other words, take an enum type name as synonim for its range wherever a range is expected or allowed, then (here pardon my ignorance about compiler theory) make the enum a default namespace with regard to the array index. I know it looks a lot like Delphi... as a matter of fact, a *lot* of D already does. Just add bitfields, subrange types and Pascal-like sets to D, and it's the language of my wildest dreams (er, my wildest *programming* dreams ;-) ), that is, more concise than C/C++, as formal as Delphi (I intentionally don't mention "plain" Pascal which is even too formal for real-world use) and even more fun than Basic to use. Anyway, regardless of your decisions about subranges and sets, D really ROCKS! (In case you're wondering, yes, I'm one of those who set maximum warning level, warnings as errors, etc. etc.) Bye & Thanks Ric
Jul 30 2003
That is a good idea. -Walter "Riccardo De Agostini" <riccardo.de.agostini email.it> wrote in message news:bg8p6j$1idv$1 digitaldaemon.com...Walter, I read on DigitalMars' website, under the "Arrays that parallel an enum" paragraph in the "Converting C to D" section ( http://www.digitalmars.com/d/ctod.html#arrayenum ) that Walter defines theDway of declaring such an array "not perfect, but better" with respect totheC (no-) way. Maybe suggestions on this have already been given, but how about something like: enum COLORS { red, blue, green } char cstring[COLORS][] = [red: "red", blue: "blue", green: "green"]; In other words, take an enum type name as synonim for its range wherever a range is expected or allowed, then (here pardon my ignorance aboutcompilertheory) make the enum a default namespace with regard to the array index. I know it looks a lot like Delphi... as a matter of fact, a *lot* of D already does. Just add bitfields, subrange types and Pascal-like sets toD,and it's the language of my wildest dreams (er, my wildest *programming* dreams ;-) ), that is, more concise than C/C++, as formal as Delphi (I intentionally don't mention "plain" Pascal which is even too formal for real-world use) and even more fun than Basic to use. Anyway, regardless of your decisions about subranges and sets, D really ROCKS! (In case you're wondering, yes, I'm one of those who set maximum warning level, warnings as errors, etc. etc.) Bye & Thanks Ric
Aug 10 2003
There is an easier way, in my opinion than enums: the set. A 'set' could be a foundamental element of the language. A set could contain anything, not only integers. Of course, integers would be automatically enumerated. Its syntax could be: <type> set <name> = { <comma separated list of values> } For example: //color enum int set COLORS = { RED, GREEN, BLUE } //days string set DAYS = { SUNDAY = "Sunday", MONDAY = "Monday", TUESDAY = "Tuesday" } //bitfield set bit[2] set STATE = { STATE_GREEN, STATE_RED, STATE_YELLOW, STATE_CYAN } A set could have many static properties useful in run-time: FIRST = first value LAST = last value operator [int] = access value by index operator [string] = access value by name COUNT = number of values NAME[int] = access each set member's name as a string It would certainly be better than simple enums; more readable, strongly typed; it would be of user-defined size (so structs that map to binary formats would be easier to code); the run-time type static information would be useful to gui IDEs...there are many advantages to it. "Walter" <walter digitalmars.com> wrote in message news:bh67dt$25nl$1 digitaldaemon.com...That is a good idea. -Walter "Riccardo De Agostini" <riccardo.de.agostini email.it> wrote in message news:bg8p6j$1idv$1 digitaldaemon.com...theWalter, I read on DigitalMars' website, under the "Arrays that parallel an enum" paragraph in the "Converting C to D" section ( http://www.digitalmars.com/d/ctod.html#arrayenum ) that Walter definesDaway of declaring such an array "not perfect, but better" with respect totheC (no-) way. Maybe suggestions on this have already been given, but how about something like: enum COLORS { red, blue, green } char cstring[COLORS][] = [red: "red", blue: "blue", green: "green"]; In other words, take an enum type name as synonim for its range whereverindex.range is expected or allowed, then (here pardon my ignorance aboutcompilertheory) make the enum a default namespace with regard to the arrayI know it looks a lot like Delphi... as a matter of fact, a *lot* of D already does. Just add bitfields, subrange types and Pascal-like sets toD,and it's the language of my wildest dreams (er, my wildest *programming* dreams ;-) ), that is, more concise than C/C++, as formal as Delphi (I intentionally don't mention "plain" Pascal which is even too formal for real-world use) and even more fun than Basic to use. Anyway, regardless of your decisions about subranges and sets, D really ROCKS! (In case you're wondering, yes, I'm one of those who set maximum warning level, warnings as errors, etc. etc.) Bye & Thanks Ric
Aug 11 2003
I'd rather have set apply to any type, but not define the possible values at the set declaration. Like so: set(int) intset = { 0, 5, 7 }; // make a set that can hold any int, but for now holds only 0, 5, and 7 enum days { SUNDAY = "Sunday", MONDAY = "Monday", TUESDAY = "Tuesday" } set(days) daysset = { MONDAY }; range(int, 0, 7) threebitrange; set(threebitrange) threebitset; threebitset.insert(2); threebitset.insert(5); threebitset.erase(2); // now holds just 5 There are various ways sets can be implemented, depending on whether the number of possible values is large or small. It can be anything from a simple array to a red/black tree, or any number of other implementations. It should be up to the compiler and transparent to the user. Yes you 'could' probably do this in a user-defined library, but you wouldn't get any syntax sugar from the language to make it easier to use, that way. Sean "Achilleas Margaritis" <axilmar in.gr> wrote in message news:bh8473$11cp$1 digitaldaemon.com...There is an easier way, in my opinion than enums: the set. A 'set' couldbea foundamental element of the language. A set could contain anything, not only integers. Of course, integers would be automatically enumerated. Its syntax could be: <type> set <name> = { <comma separated list of values> } For example: //color enum int set COLORS = { RED, GREEN, BLUE } //days string set DAYS = { SUNDAY = "Sunday", MONDAY = "Monday", TUESDAY = "Tuesday" } //bitfield set bit[2] set STATE = { STATE_GREEN, STATE_RED, STATE_YELLOW, STATE_CYAN } A set could have many static properties useful in run-time: FIRST = first value LAST = last value operator [int] = access value by index operator [string] = access value by name COUNT = number of values NAME[int] = access each set member's name as a string It would certainly be better than simple enums; more readable, strongly typed; it would be of user-defined size (so structs that map to binary formats would be easier to code); the run-time type static informationwouldbe useful to gui IDEs...there are many advantages to it. "Walter" <walter digitalmars.com> wrote in message news:bh67dt$25nl$1 digitaldaemon.com...enum"That is a good idea. -Walter "Riccardo De Agostini" <riccardo.de.agostini email.it> wrote in message news:bg8p6j$1idv$1 digitaldaemon.com...Walter, I read on DigitalMars' website, under the "Arrays that parallel antotheparagraph in the "Converting C to D" section ( http://www.digitalmars.com/d/ctod.html#arrayenum ) that Walter definesDway of declaring such an array "not perfect, but better" with respecthowtheC (no-) way. Maybe suggestions on this have already been given, butwhereverabout something like: enum COLORS { red, blue, green } char cstring[COLORS][] = [red: "red", blue: "blue", green: "green"]; In other words, take an enum type name as synonim for its rangeatoindex.range is expected or allowed, then (here pardon my ignorance aboutcompilertheory) make the enum a default namespace with regard to the arrayI know it looks a lot like Delphi... as a matter of fact, a *lot* of D already does. Just add bitfields, subrange types and Pascal-like sets*programming*D,and it's the language of my wildest dreams (er, my wildestfordreams ;-) ), that is, more concise than C/C++, as formal as Delphi (I intentionally don't mention "plain" Pascal which is even too formalreallyreal-world use) and even more fun than Basic to use. Anyway, regardless of your decisions about subranges and sets, DmaximumROCKS! (In case you're wondering, yes, I'm one of those who setwarning level, warnings as errors, etc. etc.) Bye & Thanks Ric
Aug 11 2003
"Achilleas Margaritis" <axilmar in.gr> ha scritto nel messaggio news:bh8473$11cp$1 digitaldaemon.com...There is an easier way, in my opinion than enums: the set. A 'set' couldbea foundamental element of the language. A set could contain anything, not only integers. Of course, integers would be automatically enumerated. Its syntax could be: <type> set <name> = { <comma separated list of values> } [...] It would certainly be better than simple enums; more readable, strongly typed; it would be of user-defined size (so structs that map to binary formats would be easier to code); the run-time type static informationwouldbe useful to gui IDEs...there are many advantages to it.I personally find this to be a great idea but, as far as I understand, set is not the appropriate name for it, maybe due to my Pascal / Delphi background... What you described is very nice, but looks in the middle between enumerations and associative arrays, plus some cool features of its own. I'd prefer a different keyword to be used for it it if ever gets implemented, leaving out "set" in the hope that one day D has Pascal-like sets, which I really miss when I use C / C++. Ric
Aug 25 2003
Another good/not so good thought, if enumerated types could support negative values with Riccardo's proposed format then any system error numbers could be directly mapped to error message strings making the support of system error messages in D very straight forward. eg. enum NETDB_ERROR_MSG : int { NETDB_INTERNAL = -1, NETDB_SUCCESS = 0, HOST_NOT_FOUND = 1, TRY_AGAIN = 2, NO_RECOVERY = 3, } char[NETDB_ERROR_MSG][] NETDB_ERROR = [ NETDB_INTERNAL: "NETDB_INTERNAL, See errno.", NETDB_SUCCESS: "NETDB_SUCCESS, No problem.", HOST_NOT_FOUND : "HOST_NOT_FOUND, Authoritative Answer Host ...", TRY_AGAIN : "TRY_AGAIN, Non-Authoritative Host not found or ...", NO_RECOVERY : "NO_RECOVERY, Non recoverable errors, FORMERR,..." ]; Final result: With this code no switch/if statements needed for any error generated from the system call! HostSystemCall(); printf("Some error message header, %.*s", NETDB_ERROR[getHostErrno()]); Any thoughts Simon Walter wrote:That is a good idea. -Walterenum COLORS { red, blue, green } char cstring[COLORS][] = [red: "red", blue: "blue", green: "green"];
Aug 20 2003
char[NETDB_ERROR_MSG][] NETDB_ERROR = [ NETDB_INTERNAL: "NETDB_INTERNAL, See errno.", NETDB_SUCCESS: "NETDB_SUCCESS, No problem.", HOST_NOT_FOUND : "HOST_NOT_FOUND, Authoritative Answer Host ...", TRY_AGAIN : "TRY_AGAIN, Non-Authoritative Host not found or ...", NO_RECOVERY : "NO_RECOVERY, Non recoverable errors, FORMERR,..." ];Is this syntax (initalizing associatvie arrays ) in the new compiler ? Charles "Simon J Mackenzie" <project.d smackoz.fastmail.fm> wrote in message news:bhvlaq$1ri7$1 digitaldaemon.com...Another good/not so good thought, if enumerated types could support negative values with Riccardo's proposed format then any system error numbers could be directly mapped to error message strings making the support of system error messages in D very straight forward. eg. enum NETDB_ERROR_MSG : int { NETDB_INTERNAL = -1, NETDB_SUCCESS = 0, HOST_NOT_FOUND = 1, TRY_AGAIN = 2, NO_RECOVERY = 3, } char[NETDB_ERROR_MSG][] NETDB_ERROR = [ NETDB_INTERNAL: "NETDB_INTERNAL, See errno.", NETDB_SUCCESS: "NETDB_SUCCESS, No problem.", HOST_NOT_FOUND : "HOST_NOT_FOUND, Authoritative Answer Host ...", TRY_AGAIN : "TRY_AGAIN, Non-Authoritative Host not found or ...", NO_RECOVERY : "NO_RECOVERY, Non recoverable errors, FORMERR,..." ]; Final result: With this code no switch/if statements needed for any error generated from the system call! HostSystemCall(); printf("Some error message header, %.*s", NETDB_ERROR[getHostErrno()]); Any thoughts Simon Walter wrote:That is a good idea. -Walterenum COLORS { red, blue, green } char cstring[COLORS][] = [red: "red", blue: "blue", green: "green"];
Aug 20 2003