World: r3wp
[Core] Discuss core issues
older newer | first last |
Pekr 16-Aug-2006 [5161x2] | 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. |
Ladislav 27-Aug-2006 [5210] | Graham: that is why I found my Build dialect ( http://www.compkarori.com/vanilla/display/build+dialect ) more comfortable |
older newer | first last |