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

World: r3wp

[Rebol School] Rebol School

Steeve
2-Jan-2009
[1142]
an /keep refinement on map ?
BrianH
2-Jan-2009
[1143]
/no-copy
Steeve
2-Jan-2009
[1144x2]
i want to see :)
i try...
BrianH
2-Jan-2009
[1146x2]
I did some testing and found that, as a general practice, the /into 
option leads to code with less overhead than the /no-copy option.
The implementation tends to be smaller too, as change-in-place code 
looks very different than fill-something code.
Steeve
2-Jan-2009
[1148]
hum, really ?
BrianH
2-Jan-2009
[1149]
Using /into for your functions leads you towards reusable buffers 
and incremental building. The /no-copy option tends towards template 
copying. I mean, as the option is used generally.
Steeve
2-Jan-2009
[1150]
do you mean by default map should do change ?
BrianH
2-Jan-2009
[1151]
Let me show you MAP with /into.
Steeve
2-Jan-2009
[1152x2]
oki
not so easy ? :)
BrianH
2-Jan-2009
[1154x3]
map: func [
    [throw]

    "Evaluates a block for each value(s) in a series and returns them 
    as a block."

    'word [word! block!] "Word or block of words to set each time (local)"
    data [block!] "The series to traverse"
    body [block!] "Block to evaluate each time"
    /into "Collect into a given series, rather than a new block"
    output [series!] "The series to output to"
] [

    unless into [output: make block! either word? word [length? data] 
    [divide length? data length? word]]

    foreach :word data reduce [:insert :tail output to paren! body
    output
]
Sorry, forgot the ] after the foreach
Sorry again, wrong semantics.
Steeve
2-Jan-2009
[1157]
hum, i see now, you don't update the input data.
BrianH
2-Jan-2009
[1158]
The /into option is supposed to have INSERT semantics, not INSERT 
TAIL.
Steeve
2-Jan-2009
[1159]
really ? i don't see what is the need
BrianH
2-Jan-2009
[1160]
INSERT semantics are the most general. You can add the TAIL on call.
NickA
2-Jan-2009
[1161x2]
<-- cowering in the corner, but totally enjoying this demonstration 
:)
clap ... clap ... clap ...
BrianH
2-Jan-2009
[1163x2]
I'm going to do a study of all of the REBOL functions that generate 
series (even natives) and determine which would benefit from the 
/into option, then get it added. It might be tricky to modify actions 
though. REDUCE and COMPOSE are getting the /into option.
This is one of my R3 tasks. We'll backport where possible.
NickA
2-Jan-2009
[1165]
BrianH, how many of you are there actually working on R3 code?
BrianH
2-Jan-2009
[1166x2]
It varies, depending on the task. Right now many of us are taking 
a break and Carl is working on the development infrastructure. Other 
times there are a few in some cases, many in others. We'll be able 
to handle more after Carl's RebDev work.
Which is proceeding nicely :)
NickA
2-Jan-2009
[1168]
That's great to hear :)  I wish I could help, but I don't have the 
chops.  Maybe testing, promotion, things like that...
BrianH
2-Jan-2009
[1169]
We need those chops too :)
Steeve
2-Jan-2009
[1170x2]
just a thing Brian, insert (without tail) will revert the result 
and cause overhead by pushing previous added values in the loop...
missing something...
BrianH
2-Jan-2009
[1172]
No, it's a different problem: You have to assign the result of the 
insert  to output as you go along. This leads us to another variable 
captre problem.
Steeve
2-Jan-2009
[1173x2]
ok, i see now
but we should use change to do that job, not insert
BrianH
2-Jan-2009
[1175]
No, it doesn't change in place, and the /into should be able to insert 
in the middle of a provided series if necessary.
Steeve
2-Jan-2009
[1176]
change replace old values in output and expand the output serie if 
needed
BrianH
2-Jan-2009
[1177x2]
Insert will also expand, and we don't want to replace any existing 
values if any.
If you want to replace, clear the series before providing it.
Steeve
2-Jan-2009
[1179]
ok but i'm not convinced by the interest to be able to insert in 
the middle of a serie.
Steeve
3-Jan-2009
[1180]
ok but i''m not convinced by the interest to be able to insert in 
the middle of a serie
BrianH
3-Jan-2009
[1181x6]
This trick only works if it is pervasively implemented and consistent. 
It is a cross-cutting language design issue.
cross-cutting
 = Aspect-Oriented Programming term.
It means that function options of the same name should be implemented 
consistently and to whatever function applicable.
(in this case, that is what it means)
A REBOL example is the /only option.
The /only option means something different each time, but in general 
its usage is consistent:
- Do the sensible thing by default.
- Do the advanced thing when /only is chosen.
Every function with an /only option behaves this way.
Steeve
3-Jan-2009
[1187x2]
where is it already used ?
i mean /into
BrianH
3-Jan-2009
[1189x3]
In functions in R3, starting with COLLECT.
It will be used in many functions, and natives. REDUCE and COLLECT 
/into get rid of chained inserts, for instance. It also reduces series 
copy overhead. It will be a big deal when we hahve rolled it out 
across the board.
hahve -> have