r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

Pekr
16-Aug-2006
[5160x3]
how to substract two date values easily? I simply have file date 
(get in info? filename 'date), and I want now - such filedate to 
return time difference including days .....
oh my, now when I wrote the word "difference" I want to try something 
... :-)
hmm, it might work actually :-) I was simply wondering, why substracting 
now - get in info? filename 'date is rounded to zero ....
Gabriele
16-Aug-2006
[5163]
subtract gives difference in days (integer), while difference gives 
difference as a time! so it is finer grained.
Pekr
16-Aug-2006
[5164x2]
but why? I did not specify now/date - get in info? filename 'date 
.... imo that is incorrect
simple 'now simply returns complete date and time, so why rounding 
to days?
Anton
16-Aug-2006
[5166]
An old decision - probably not going to change. (although Rebol3 
could change this.) I agree it seems anti-intuitive. If it's not 
in rambo already, make a ticket.
Henrik
19-Aug-2006
[5167]
would anybody be interested in some PHP tools? a source generator 
with REBOL blocks -> PHP arrays, variable lists. a simple thing.
Ladislav
22-Aug-2006
[5168x2]
would you say, that it is OK, that 

    for i b: [1] tail b 1 []
is an infinite loop?
Pekr
22-Aug-2006
[5170]
what is that? :-) tail b evaluates to what exactly? :-)
Ladislav
22-Aug-2006
[5171]
if you try the code in the console, you will find out, that it is 
an infinite loop. The question is, if it is OK, (I would not expect 
that normally, because FOR can be implemented in such a way that 
the loop is finite)
Pekr
22-Aug-2006
[5172x2]
yes, but what b: evaluates to? it is block ... I though that the 
syntax is - for word value-from value-to skip []
b is referring to block containing one element, tail to some position 
... I would understand if there was index? involved, but ....
Ladislav
22-Aug-2006
[5174]
FOR should be able to work for series too according to its spec
Pekr
22-Aug-2006
[5175]
and btw - what if you would refer to past tail - in current version 
it is error, in R3 it is supposed to return none ....
Ladislav
22-Aug-2006
[5176]
so the value-from is the block b: [1]
Pekr
22-Aug-2006
[5177]
interesting, that series working for 'for I mean - is that anyhow 
usefull? :-)
Ladislav
22-Aug-2006
[5178]
it is the spec, so one "cure" may of course be to disallow series
Pekr
22-Aug-2006
[5179]
I will let it to gurus to decide, but it does not sound logical to 
me, as it states - starting value, ending value ... what is starting 
value for [1 2 3 4]? What is for ["c" "a" "b"], what is for [b c 
d] (referring to others, e.g. binary?) .... we imo refer to index 
here, don't we?
Ladislav
22-Aug-2006
[5180x2]
starting value is [1 2 3 4], next value is [2 3 4], etc.
so my understanding is, that according to you it is not OK and you 
would suggest to disallow series as starting and ending value
Pekr
22-Aug-2006
[5182]
yes, but my suggestion says nothing - it is natural to think in that 
way, because of how I am used to 'for from another languages - otoh 
- Rebol is dynamic and allows many things, which other languages 
don't, so I just don't know. But if you would not mention it is possible, 
I would probably never used it that way ....
Ladislav
22-Aug-2006
[5183]
don't argue with yourself leave something for others ;-)
Pekr
22-Aug-2006
[5184x2]
arguing with ourselves sometimes helps to answer some questions ourselves 
:-)
... or to confuse ourselves even more :-)
JaimeVargas
22-Aug-2006
[5186x4]
;; This example illustrates a bit better the behaviour of FOR with 
series

>> series: [a b c d e f g h i j k]  

== [a b c d e f g h i j k]

>> start: skip series 0

== [a b c d e f g h i j k]

>> stop: skip series 6

== [g h i j k]

>> for b start stop 1 [print mold b]

[a b c d e f g h i j k]

[b c d e f g h i j k]

[c d e f g h i j k]

[d e f g h i j k]

[e f g h i j k]

[f g h i j k]

[g h i j k]
>> for b start stop 2 [print mold b]

[a b c d e f g h i j k]

[c d e f g h i j k
]
[e f g h i j k]

[g h i j k]
>> for b start stop 6 [print mold b]

[a b c d e f g h i j k]

[g h i j k]

>> for b start stop 7 [print mold b]

[a b c d e f g h i j k]
Just a small typo, replace b with series for the examples of FOR 
usage.
From the behavior it looks like FOR looks very similar to FORSKIP. 
Only that breaking when the series index is greater than stop.
;So a similar result can behaviour can be  accomplished  with FORSKIP, 
ie:


>> forskip series 2 [print mold series if 6 < index? series [break]]

[a b c d e f g h i j k]

[c d e f g h i j k]

[e f g h i j k]

[g h i j k]

is equivalent to

>> for b start stop 2 [print mold b]

[a b c d e f g h i j k]

[c d e f g h i j k]

[e f g h i j k]

[g h i j k]


I believe we should have only one form for acommplishing the this 
type of series traversal. FORSKIP seems like the better choice than 
FOR. I support  removing series support from FOR. If series support 
is maintained with FOR the infinite loop race condition should be 
removed.
Ladislav
25-Aug-2006
[5190x2]
did you know, that

    repeat i 2'148'483'647 []

is an infinite cycle in REBOL?
sorry, I meant:

    repeat 2'147'483'647 []
Jerry
25-Aug-2006
[5192]
2'147'483'647 = (power 2  31)  - 1
Ladislav
25-Aug-2006
[5193x2]
yes
(the maximal integer)
Gabriele
25-Aug-2006
[5195x2]
ladislav, isn't the first one the correct version?
or did you mean LOOP?
Rebolek
25-Aug-2006
[5197]
I've got error! all the time, cannot reproduce it. (number is converted 
to decimal!)
Anton
25-Aug-2006
[5198]
Ladislav made a small typo, getting a digit wrong in the number, 
the first time, and the second time he missed the variable (i).
Jerry
25-Aug-2006
[5199]
I my opinion, "repeat i 2'147'483'647 []" should repeat exactly 2'147'483'647. 
Not more, not lessm, not forever. If I want an infinite loop, I would 
use the "Forever" function instead.


I assume that "loop" acts the same to 2'147'483'647, as "repeat" 
does. Am I right? How about "for":

for i 2'147'483'646 2'147'483'647 1 [ print i ] 


this is not infinite loop, it prints 2'147'483'646 and 2'147'483'647. 
So I assume that for loop is never infinite.


for i 1 2'147'483'647 1 [ print i ] ; this is not infinite loop, 
I assume.

However, 
for i 1 2'147'483'647 1 [ ] ; not infinite 
 
should be kind of equivalent to
i: 1 loop 2'147'483'647 [i: i + 1 ] ; infinite

This cannot be good. I am confused.
Anton
25-Aug-2006
[5200x3]
These kinds of issues/bugs are expectable when using fixed byte-length 
numbers, as rebol does. If you avoid the maximum integer then you 
should be ok. So I don't think it is as bad as all that. I am not 
saying the errors are good and fine, but you can "expect trouble", 
when going that high.

Also, each function (LOOP, REPEAT etc) may use a different test ( 
< ,  <=  etc) and so exhibit different behaviour.
>> for i 2'147'483'646 2'147'483'647 1 [ print i ]
2147483646
2147483647
** Math Error: Math or number overflow
** Where: for
** Near: start: start + bump
If you fix FOR to catch this overflow error, then it will slow performance.
Ladislav
25-Aug-2006
[5203x4]
thanks, Anton, you got it right
loop works well, the bug is observable only for repeat
So I assume that for loop is never infinite.
 - actually it is infinite too in some cases
(see above)
JaimeVargas
25-Aug-2006
[5207x2]
Anton, I disagree with the statement  "you can expect trouble, when 
going that high." The condition ilustrated is clearly an error if 
the iteration forms have and issue with certain values they should 
not degrade into an infinite loop, but into an error.
If such behavior is left uncheck, it will be easy to create race 
conditions in rebol code and an attacker will have ways to create 
security exploits.
Graham
25-Aug-2006
[5209]
A little peeve of mine .. you have to use parens to force Rebol evaluation 
in a particular order, but parens are also used by compose.