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

World: r3wp

[Core] Discuss core issues

Geomol
18-Aug-2011
[2190]
What about MAKE block! ? Does that include a copy? Will it in R3?
Gregg
19-Aug-2011
[2191]
John, it sounds like where you get confused, or think of things as 
bugs or design flaws, is when having your REBOL "That's funny!" moments, 
borne of deep tinkering. Aside from the "copy series in funcs" behavior, 
which I think bites many people at some point, your issues don't 
come from writing application code in REBOL and bumping up against 
REBOL's behavior. Rather, it seems that REBOL's implementation and 
design don't match your expecations in these cases, and you really 
want it to. :-)


The reason I asked about consequences is because you may want a change 
that affects other users negatively. Imagine REBOLers as being in 
one of two groups. Group A is the gurus. They have internalized REBOLs 
design, understand it deeply, and use BIND and recursive PARSE rules 
without fear. That group is very small. Group C contains everybody 
else, which includes people that don't know about using /local with 
funcs, and suggest REBOL should use  = for "assignment". They have 
never used USE, BIND, or many other functions, because they aren't 
sure how they work. Some of them know a little about series references, 
so they always use COPY to be safe. (Yes, group B exists too, but 
they are much more like C than A).


If REBOL were meant only for A users, it would be very different. 
As a designer, it seems pragmatic to make it so things work well 
for the B and C users who, when they hit a problem that requires 
advanced understanding, will work around issues with the bits they 
understand (and adding many COPY calls), no matter how inelegant. 
Group A users may suffer at their expense, but I'm OK with that, 
because I'm not one of them.
Geomol
19-Aug-2011
[2192]
When I go into discussion like this, it's mostly because I want to 
understand, what REBOL is. After using it for like 10 years, there 
are still areas, where I'm not sure, what's intentional and what 
isn't. Must of the problem (of understanding the REBOL behaviour) 
is because it's not officially well documented. ("Officially" I mean 
by Carl.) REBOL is still not set in stone, as I see it.
Ladislav
19-Aug-2011
[2193x2]
What about MAKE block! ? Does that include a copy? Will it in R3?
 - this is a funny question. The

    make block! []


expression does make a copy of the block given, both in R2 and in 
R3. The reason is quite simple: if it did not make a copy of its 
argument it would not make a block at all.
As you may verify, all MAKE calls actually make a new value, so it 
would be a violation of that rule
Geomol
19-Aug-2011
[2195]
Right, and I asked this question to test a general view, if MAKE 
should involve copy or not.
Ladislav
19-Aug-2011
[2196x2]
But, as you may see, there is another general rule in effect there
MAKE BLOCK! 10 does not make a copy of anything, yet it makes a new 
block as wished
Gabriele
19-Aug-2011
[2198]
Cyphre fell into 

the trap" when writing async code" - as it stands, async code is 
"too hard" in REBOL. (IMHO of course.)
Geomol
22-Aug-2011
[2199]
Can FIND find the datatype block! among blocks in a block? Boy, does 
that sound like a strange question? An example:

>> find reduce [[] [] block!] block!     
== [[] [] block!]


That's not the result, I'm after. I want FIND to return [block!], 
but that doesn't seem to be possible. Is there a trick?
Rebolek
22-Aug-2011
[2200x2]
I think you have to do it in two steps. First find datatype! and 
then check if that datatype is block!.
Or you may use PARSE.
Henrik
22-Aug-2011
[2202]
>> find reduce [[] [] block!] datatype!     
== none

That seems odd.
Geomol
22-Aug-2011
[2203x3]
Yeah, I was thinking along the same line, doing it in two steps. 
If one wants to make a mezzanine SWITCH, it'll be slow, I guess.
Henrik, yes, surpricing!
That works in R3 though, so must be missing in R2.
Henrik
22-Aug-2011
[2206]
http://www.rebol.net/cgi-bin/rambo.r?id=4332&
Dockimbel
22-Aug-2011
[2207]
Same issue with FIND on native! values: http://www.rebol.net/cgi-bin/rambo.r?id=4126&
Geomol
22-Aug-2011
[2208]
A sidenote about SWITCH: I often find myself needing a switch, where 
I look for datatypes, like:

	switch type? value reduce [
		integer! [...]
		word! [...]
	]


It works, but only if I include the REDUCE, else the words in the 
block are just words. I was thinking, if SWITCH should have a refinement 
telling it to reduce the block, or something. Do you have same kind 
of switch as me?
Henrik
22-Aug-2011
[2209x2]
geomol, use type?/word
that returns the type as a word. it seems to be made precisely for 
this scenario.
Geomol
22-Aug-2011
[2211]
ah, didn't notice type?/word, thanks! :)
Rebolek
22-Aug-2011
[2212]
I tried it only in R3, I'm not sure about R2
Geomol
22-Aug-2011
[2213]
So my original FIND can be solved with:

>> find [[] [] block!] to word! block!
== [block!]
Henrik
22-Aug-2011
[2214]
well, if the block is reduced elsewhere, that would be a problem.
Geomol
22-Aug-2011
[2215]
yes
Pekr
23-Aug-2011
[2216x2]
I have got a question of soon-to-join-us-here reboller, asking about 
the possibility to launch new rebol process, using lowered security.

launch "some-script.r" works
lanuch "--secure allow --script some-script.r" does not work

I think I might use 'call instead?
Hmm, strange. When I type: launch "-s some-script.r", then uninstall 
dialog box appears.
Endo
23-Aug-2011
[2218x2]
Yep there are some problems using launch I think.

launch {-s --noinstall} ;--> starts nre Rebol process in trace mode. 
just like I use -t option.
Strange..
>> launch/as-is {-s}
** Script Error: Feature not available in this REBOL
** Near: launch/as-is "-s"
Pekr
23-Aug-2011
[2220]
I suggested my friend to use: call "rebol.exe -si my-script.r"
Endo
23-Aug-2011
[2221]
better option I think as launch is really problematic.
Gregg
23-Aug-2011
[2222]
LAUNCH, RUN, and CALL make things confusing. I almost always use 
CALL now.
Henrik
24-Aug-2011
[2223x2]
Composing a lit-path:

>> f: [b d e f]
== [b d e f]
>> i: 2
== 2

It would be nice that instead of this:

>> compose 'f/(i)
== f/(i)

you would get:

== f/2
Doesn't work in R3 either.
Rebolek
24-Aug-2011
[2225]
I think that it should throw error, because 'compose should accept 
only block! value.
Henrik
24-Aug-2011
[2226x2]
lit-path is a series, so I think the argument is sound for the latter 
result.
It gets rid of a workaround, where I must store a path, where some 
values in the path can't be determined until storage, the moment 
where COMPOSE needs to act. The workaround is to create the path 
as a block, and then TO-PATH it on use.
Ladislav
24-Aug-2011
[2228x2]
>> f: [b d e f]
== [b d e f]

>> i: 2
== 2

>> my-path: rejoin [to path! [] 'f i]
== f/2
or, in R2:

    my-path: rejoin [#[path! []] 'f i]
Steeve
24-Aug-2011
[2230]
or
>> append to-path 'f i
Geomol
24-Aug-2011
[2231x2]
A fast way is:
>> to path! reduce ['f i]
== f/2

(Maybe the fastest?)
But yes, Henrik, COMPOSE should maybe work on path too, as it is 
a series. And maybe also on parens (also a series), where COMPOSE 
should work on parens inside.
Gregg
24-Aug-2011
[2233]
REBOL handles parens in paths today. I can see the usefulness of 
having that evaluation return a composed path.
Henrik
14-Sep-2011
[2234]
>> equal? make object! [] make object! []
== false

is this intentional?
Sunanda
14-Sep-2011
[2235]
It may be because they are considered to have distinct 'self's

    a: make object! []
    b: make object! []
    equal? a b
    == false
    equal? (first  a) (first b)
    == true
    equal? (second  a) (second b)
    == false
    equal? (third  a) (third b)
    == true
    a/self = b/self
    == false
Endo
14-Sep-2011
[2236x2]
and it's more useful than the other way I think. Once I wrote a function 
to test if two object is similar. It looks a bit silly but works 
for me. Can be extended to test values also:

similar?: func [
    {Returns true if both object has same words in same types.}
    o [object!] p [object!] /local test
][

    test: [if not equal? type? get in o word type? get in p word [return 
    false]]
    foreach word sort first o test
    foreach word sort first p test
    true
]
>> similar? make object! [] make object! []
== true
BrianH
14-Sep-2011
[2238x2]
There's some (fixable) bugs in R3 related to equality of objects, 
and some different (unfixable) bugs in R2. In R3 at least:
>> equal? make object! [] make object! []
== true
R2's behavior in this may not be intentional, but it's not fixable 
because of backwards compatibility :(