• Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r4wp

[!REBOL3] General discussion about REBOL 3

Bo
12-Mar-2013
[1834]
Gregg: I'm all for constraints if there is a significant "win" component. 
 If it doesn't, don't constrain it.  Apple, but especially Microsoft, 
are really good at artificially constraining software.  Frustrates 
me to death.  Most of the time, it just seems like a poor design 
decision.  Other times, I can see how the constraint is being used 
to generate revenue.
Ladislav
12-Mar-2013
[1835]
However, I am quite unsure whether Carl implemented it as a "power 
user feature" or if he had some other reason (looks likely to me)
BrianH
12-Mar-2013
[1836]
For some reason I thought that R2 allowed indexes to be changes, 
but R3 didn't, and that was a loss of functionality. After actually 
testing, it appears it was the other way around, a gain of functionality. 
I'm for R3's model in this case, enough so that I didn't think it 
worth adding a ticket.
Bo
12-Mar-2013
[1837]
If this was a language designed to promote "proper" programming, 
I could see having constraints on every function to keep them from 
being used in new ways, and to promote the proper usage of the function. 
 However, in real life, flexibility is key.


Let me know if this makes any sense:  If I want to rip the fender 
off my car and fashion it into a medieval helmet, physics allows 
me to do so (if I had the requisite skill).  However, in programming 
languages, this type of thing would rarely be possible.


So what I'm saying is this: Try as much as possible to refrain from 
placing software developers in a box when it comes to how they might 
choose to use a function or a feature.
BrianH
12-Mar-2013
[1838]
Bo, we're agreeing with you in this case. Stop arguing before you 
convinve us otherwise! :)
Gregg
12-Mar-2013
[1839]
There is nothing preventing you from hacking FOR into a helmet. What 
I'm saying is that we should tell developers "Here is a helmet, and 
here is a fender. You should use each appropriately." and we shouldn't 
make the fender a poorer fender design in order to accommodate helmet 
makers.
Ladislav
12-Mar-2013
[1840]
Try as much as possible to refrain from placing software developers 
in a box when it comes to how they might choose to use a function 
or a feature.
 - yes, makes sense to me, Bo. I alway try to achieve that
Bo
12-Mar-2013
[1841]
BrianH: Thanks. Sometimes I end up "preaching to the choir."


Gregg: I wasn't proposing to compromise the intended functionality 
of a function.  I was simply stating that *artificial* constraints 
shouldn't be placed on a function for the purpose of limiting its 
functionality.
Gregg
12-Mar-2013
[1842]
Agreed Bo. Constraints should exist only to empower us.
BrianH
12-Mar-2013
[1843]
Ladislav, in answer to your first question about "We should allow 
one iteration when start = end, but trigger an error otherwise if 
we have a non-advancing step.", yes. That is the difference between 
the two models in that ticket. 0 bump should behave consistently, 
according to a model which makes sense.


In one of those models, the bump is given primacy over the start-vs-end 
factor, and judged *on its own* a bump of 0 is an error (since it 
doesn't make FOR advance in one or the other direction). So, that 
error should be triggered categorically before the range is even 
considered.


If, on the other hand, start-vs-end is given primacy, then we have 
3 valid answers to the direction argument: forwards, backwards, or 
once - the bump argument doesn't determine direction, it determines 
velocity in the direction already chosen. In the start=end case the 
bump is always ignored, so ignoring it for 0 makes sense. In the 
start<end or start>end cases, a bump of 0 is basically out of range 
because those cases are only defined  to move in the positive or 
negative direction, respectively. That means that start<end is only 
positive, and start>end is only negative.


Does that make the difference between the models clear? Of course, 
because you can BREAK, CONTINUE, or even set the index position in 
the code, that doesn't actually reduce our flexibility where we really 
want to do anything interesting. It just makes the basic model make 
sense.
Ladislav
12-Mar-2013
[1844x2]
For me, the model preferring START and END to determine the direction 
makes more sense and looks less constraining.
The model preferring BUMP looks rather "uninteligent" and "constraining" 
to me.
BrianH
12-Mar-2013
[1846]
Agreed. I mostly put that in for contrast.
Ladislav
12-Mar-2013
[1847]
I understand that you put the "if START = END" rule there to have 
the definition simple enough but not simpler than useful
BrianH
12-Mar-2013
[1848]
Well, if you think bump should have primacy, triggering an error 
for 0 before you even look at start or end is the only thing that 
makes sense. And the velocity model for bump is the only justification 
for its existence at all if start-vs-end has primacy. Really, it 
can be anything we want as long as it makes sense :)
Ladislav
12-Mar-2013
[1849]
However, I must agree with Fork that we need a general loop in Rebol 
no matter what. (see e.g. iteration in the decimal range as an example) 
Just the dialect he proposed does not look sensible to me when compared 
to the general loop I am using for a long time.)
BrianH
12-Mar-2013
[1850]
I think that something as powerful as yours, but maybe a little friendlier 
for the newbies, and maybe with some REWORD-style thoroughness, might 
work. I think that we need to go beyond the old style of general 
loop though - we're competing against languages with list comprehensions, 
not just C-like languages :)
Ladislav
12-Mar-2013
[1851x2]
But CFOR can do list comprehensions easily, I do not see any problem 
with that
http://issue.cc/r3/884
BrianH
12-Mar-2013
[1853x2]
So it's not a power thing. Cool.
It's a dialect thing then.
Ladislav
12-Mar-2013
[1855x2]
power

 only in the sense that you get the power to specify looping in an 
 easy and flexible way
However, it is easy to see that it is not too slow compared to other 
looping constructs
BrianH
12-Mar-2013
[1857]
Not easy and flexible enough. You proved that we can do this already 
with the two-line implementation, but it doesn't have the syntactic 
sugar that the list comprehension fans need. So we might want to 
rethink the API but keep the power. Sometimes I think you're too 
smart for dialect design, Ladislav :)
Ladislav
12-Mar-2013
[1858]
Sorry, the "not easy and flexible enough" does not make much sense 
to me. There is no more flexible cycle function than this one in 
Rebol at present.
BrianH
12-Mar-2013
[1859]
Flexible and powerful isn't enough. I know this is difficult Ladislav, 
but try: Imagine that you're dumb. What would dumb you want?
Andreas
12-Mar-2013
[1860]
Just as another perspective: COLLECT + FOREACH is a powerful, easy, 
and flexible list comprehension-like alternative.
BrianH
12-Mar-2013
[1861x2]
I'm having some difficulty imaging dumb you too, Ladislav, so take 
no offence :)
I use COLLECT + FOREACH a lot, as well as COLLECT + PARSE.
Andreas
12-Mar-2013
[1863]
Me too.
Ladislav
12-Mar-2013
[1864]
1) I want less arguments than FOR has as Fork required - done

2) I want to specify the comparison used, not just in case when iterating 
over decimals - done

3) I want to specify as many "cycle variables" as necessary like 
Bo demanded - done

4) I want to specify more complex incrementation rule as Bo demanded 
- done
5) I can use COLLECT with CFOR

- does this list look like something not worth considering?
BrianH
12-Mar-2013
[1865x2]
If MAP-EACH was more powerful I wouldn't need COLLECT. Ditto with 
Gabriele's PARSE extensions.
Ladislav, that's a feature list, not a dialect. It's a great feature 
list, and when we're building the dialect we should take all of that 
into account. But what you suggest in CFOR is not much prettier than 
FOR, and is almost as ugly as C's for loop. It's powerful, but not 
something we can point to and say "Look at how powerful we are!" 
to people who don't understand that surface stuff doesn't matter 
when you're talking about power. Imagine people who haven't heard 
of big-O notation or Turing completeness, but have used Python or 
Ruby. Especially Ruby because of how pretty it is but how much it 
sucks beneath the surface.
Andreas
12-Mar-2013
[1867]
I consider CFOR prettier than current FOR. The main use of CFOR I 
see, is to have everything loop-control related kept together and 
lexically before the body (otherwise you can just use plain WHILE).
Ladislav
12-Mar-2013
[1868]
Ladislav, that's a feature list, not a dialect.

 - sure, feature list is not a dialect. CFOR is a dialect, though, 
 exactly like there is an object specification dialect or function 
 specification dialect. The fact that you do not see it is a dialect 
 does not matter at all
BrianH
12-Mar-2013
[1869]
No, I see that, it's just not necessarily a very good dialect in 
the sense of dialect design. It's powerful, but not clean enough.
Ladislav
12-Mar-2013
[1870]
I can imagine what "clean" means, then. Fortunately enough, I do 
not need to care.
BrianH
12-Mar-2013
[1871]
We have some more flexibility here because we can't actually do this 
as a mezzanine, it has to be native code (no [throw]). So let's take 
the opportunity to make it really nice.
Ladislav
12-Mar-2013
[1872]
And, BTW, CFOR is substantially more powerful than what C for() offers.
BrianH
12-Mar-2013
[1873]
Fortunately enough, I do not need to care.

 - agreed. That is not your job. You job is adding real power, not 
 the impression of power. The latter is more my job :-/
Ladislav
12-Mar-2013
[1874]
powerful
 in the sense of expressivity, not in any other sense
BrianH
12-Mar-2013
[1875x2]
Yup, I got that :)
Btw, REWORD has a #539 problem too, as of the http://issue.cc/r3/1990
changes. Those new features need [throw] to work peoperly, or a native 
implementation. Oh well, that's the price of a powerful dialect sometimes.
Sunanda
13-Mar-2013
[1877x2]
Brian, Gregg -- PICK for dates....Thanks. For some reason I was reasoning 
beyond what is sensible for PICK. Let's keep it as now!
CFOR, EVERY etc

I'm happy with FOR as I do not need to construct and perhaps REDUCE 
a block to set up variable start conditions -- just have to set words 
to values.

For me, the syntaxtic sugar neatness of the new proposals is outweighed 
by the simplicity of the setup for the existing method.


No real opinion on how to standardise the existing behavior other 
than to reiterate a point Brian has already made: FOR start and end 
can work on series too; all the examples I've seen of proposed change 
behavior is for numbers. We need to ensure thar series FORing works 
as expected too.
MarcS
13-Mar-2013
[1879x2]
Regarding http://curecode.org/rebol3/ticket.rsp?id=1974, https://github.com/0branch/r3/commit/7b4e8529e683c92d406e89b287092507c5876924
Perhaps I should have mentioned truncation explicitly in that commit 
msg.
Gregg
13-Mar-2013
[1881]
Posted %mezz/new-loop.r for comment. Not complete, but should be 
enough to use for discussion, pro or con.
sqlab
13-Mar-2013
[1882]
I think the proposed loop is too mighty.

How easily do you forget an argument without getting an error and 
doing something different to what you wanted.
Ladislav
13-Mar-2013
[1883]
I'm happy with FOR as I do not need to construct and perhaps REDUCE 
a block to set up variable start conditions 

 - this looks like you never used CFOR, otherwise you would have know 
 that it does not require anything of that kind