1. about complex data type
- Posted by jacques deschênes <desja at glo?etro?ter.net> Apr 26, 2008
- 582 views
reading datetime.e I just got an idea that is not specific to it. looking at this type definition
global type datetime(object o) return sequence(o) and length(o) = 6 and integer(o[DT_YEAR]) and integer(o[DT_MONTH]) and integer(o[DT_DAY]) and integer(o[DT_HOUR]) and integer(o[DT_MINUTE]) and atom(o[DT_SECOND]) end type
one see that it take a large boolean expression to check the nature of complex data type like this one. My idea is why not use a tag to identify complex data type. the first element of the sequence being the tag. In this exemple every datetime object would be like: {"DATETIME",...} and the type would be.
global datetime(object o) return sequence(o) and equal(o[1],"DATETIME") end type
an idea that can be applied to any complex data type. the TAG could be a GUID to play safer. and any library that define such a complex data type would have a global function to create a valid sequence with the tag. for exemple in datetime.e now() would be modified as such global function now() return {"DATETIME"}& from_date(date()) end function and all orther functions according to such Just my 2cent idea. Jacques d.
2. Re: about complex data type
- Posted by yuku <yuku at ik?tek.?om> Apr 26, 2008
- 568 views
jacques desch�nes wrote: > }}} <eucode> > global datetime(object o) > return sequence(o) and equal(o[1],"DATETIME") > end type > </eucode> {{{ > > an idea that can be applied to any complex data type. Is it faster? It needs a string comparison. And it uses much more bytes to store. Current data structure: sequence = 16 bytes 5 integer = 20 bytes 1 atom = 12 bytes Total = 48 bytes Using the tag has this additional: 1 string sequence = 16 bytes 1 sequence pointer = 4 bytes integers "DATETIME" = 32 bytes Total 48+52 = 100 bytes So it is more than twice the memory needed.
3. Re: about complex data type
- Posted by Jeremy Cowgar <jeremy at cowg?r.co?> Apr 26, 2008
- 576 views
jacques deschênes wrote: > > }}} <eucode> > global datetime(object o) > return sequence(o) and equal(o[1],"DATETIME") > end type > </eucode> {{{ In direct regards to the datetime type, it may also be nice to further the existing type check to include checks for month >= 1 and <= 12, day >= 1 and day <= 31, etc... So, each element would need to be checked anyway. Right now it does not do those checks, but if necessary, it could in it's current form. -- Jeremy Cowgar http://jeremy.cowgar.com
4. Re: about complex data type
- Posted by Matt Lewis <matthewwalkerlewis at gmail.c??> Apr 26, 2008
- 564 views
jacques deschênes wrote: > reading datetime.e I just got an idea that is not specific to it. > > looking at this type definition > }}} <eucode> > global type datetime(object o) > return sequence(o) and length(o) = 6 > and integer(o[DT_YEAR]) and integer(o[DT_MONTH]) and integer(o[DT_DAY]) > and integer(o[DT_HOUR]) and integer(o[DT_MINUTE]) and atom(o[DT_SECOND]) > end type > </eucode> {{{ > > one see that it take a large boolean expression to check the nature of complex > data type like this one. My idea is why not use a tag to identify complex data > type. the first element of the sequence being the tag. In this exemple every > datetime object would be like: {"DATETIME",...} > and the type would be. > > }}} <eucode> > global datetime(object o) > return sequence(o) and equal(o[1],"DATETIME") > end type > </eucode> {{{ But you're only checking to see if it "says" that it's the correct type. What if some buggy code dropped an element somewhere, or changed something into a sequence? You'd never know, and would have removed the usefulness of type checking, which is really a development tool, not for runtime support. If you're concerned about speed, just turn off type checking Matt
5. Re: about complex data type
- Posted by Matt Lewis <matthewwalkerlewis at ?mai?.com> Apr 26, 2008
- 585 views
Jeremy Cowgar wrote: > > In direct regards to the datetime type, it may also be nice to further the > existing > type check to include checks for month >= 1 and <= 12, day >= 1 and day > <= 31, etc... So, each element would need to be checked anyway. > > Right now it does not do those checks, but if necessary, it could in it's > current form. Yes, it should validate its data. It would be useful for checking for things like valid user input with explicit calls, rather than implicit type checking. Matt
6. Re: about complex data type
- Posted by jacques deschênes <desja at glob?trotte?.net> Apr 26, 2008
- 585 views
So for you 'type' is there only as an assert() to be used only at devellopment phase. For me 'type' is more like reflection it tell us at runtime the nature of a data object. As data type are dynamics in euphoria it is usefull to have reflection. Obviously the TAG doesn't garanty that the data structure is OK and it is not its purpose. datetime is a relativly simple data structure, one could image more complex data structure than that. Which ones it will not be practical to check every element for correctness but a tag will reflect the nature of the object. Anyway its an idea I will eventually use in my personnal projects. Jacques Matt Lewis wrote: > > jacques deschênes wrote: > > > reading datetime.e I just got an idea that is not specific to it. > > > > looking at this type definition > > }}} <eucode> > > global type datetime(object o) > > return sequence(o) and length(o) = 6 > > and integer(o[DT_YEAR]) and integer(o[DT_MONTH]) and > > integer(o[DT_DAY]) > > and integer(o[DT_HOUR]) and integer(o[DT_MINUTE]) and > > atom(o[DT_SECOND]) > > end type > > </eucode> {{{ > > > > one see that it take a large boolean expression to check the nature of > > complex > > data type like this one. My idea is why not use a tag to identify complex > > data > > type. the first element of the sequence being the tag. In this exemple every > > datetime object would be like: {"DATETIME",...} > > and the type would be. > > > > }}} <eucode> > > global datetime(object o) > > return sequence(o) and equal(o[1],"DATETIME") > > end type > > </eucode> {{{ > > But you're only checking to see if it "says" that it's the correct type. > What if some buggy code dropped an element somewhere, or changed something > into a sequence? You'd never know, and would have removed the usefulness > of type checking, which is really a development tool, not for runtime > support. If you're concerned about speed, just turn off type checking > > Matt
7. Re: about complex data type
- Posted by Matt Lewis <matthewwalkerlewis at gmail.co?> Apr 26, 2008
- 575 views
jacques deschênes wrote: > > So for you 'type' is there only as an assert() to be used only at devellopment > phase. For me 'type' is more like reflection it tell us at runtime the nature > of a data object. As data type are dynamics in euphoria it is usefull to have > reflection. Obviously the TAG doesn't garanty that the data structure is OK > and it is not its purpose. datetime is a relativly simple data structure, one > could image more complex data structure than that. Which ones it will not be > practical to check every element for correctness but a tag will reflect the > nature of the object. > > Anyway its an idea I will eventually use in my personnal projects. The tag idea might make sense in some cases, because you could avoid doing detailed checking if it's something else. I guess it depends upon how you want to use the type check system, and what you expect the type checking to do for you. Matt