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

World: r3wp

[Core] Discuss core issues

JaimeVargas
6-Jan-2006
[3160x3]
It is going to be slower, but not that bad.
>> time-block [CounterClass/bump] 0.05
== 4.234619140625E-6
>> time-block [ctr1/bump] 0.05        
== 1.17197799682617E-5
>> a: 4.234619140625E-6 
== 4.234619140625E-6
>> b: 1.17197799682617E-5
== 1.17197799682617E-5
>> a / b
== 0.361322409814242
>> b / a
== 2.7676113433266
It is slower because of binding
MichaelB
6-Jan-2006
[3163]
But not that much, given all the stuff that happends.
Volker
6-Jan-2006
[3164x2]
do reduce [get in class (to lit-word! :w) (first :v)]
->
do get in class (to lit-word! :w) (first :v) ; should work too
either function! = type? v: get in class :w [
->
either function? v: get in class :w [
JaimeVargas
6-Jan-2006
[3166x2]
Optimizations welcome ;-)
It improved but not by much.
Henrik
7-Jan-2006
[3168x2]
ah the joys of BIND...

>> a: make object! [b: 0 c: b]
>> a/b
== 0
>> a/c
== 0
>> set in a 'b 7
== 7
>> a/c
== 0

How do I restore the context?
wait... that's not the problem
BrianH
7-Jan-2006
[3170x2]
The context is fine. When you do  c: b  you are setting c to the 
value of b (or rather a copy, since 0 is an immediate value). When 
you change the value of b the copy of the old value remains the same 
in c.
Bind isn't used here.
Henrik
7-Jan-2006
[3172]
I realized that just now. the problem was entirely different.
Robert
7-Jan-2006
[3173]
question concerning 'get: First, why doesn't get support something 
like "get my-object/user-data"? Next, how to get a path word?
Henrik
7-Jan-2006
[3174]
path word? such as

in my-object 'user-data

?
Robert
8-Jan-2006
[3175]
Forget the last question...
BrianH
12-Jan-2006
[3176]
Does the file execute setting of the secure native mean anything 
on Windows. What is it supposed to mean?
Pekr
13-Jan-2006
[3177x4]
how to easily do base conversion? e.g. working with bitmasks, I want 
to be easily able to obtain e.g. 255, #FF, "11111111"
... and convert between those ...
ah, probably enbase/base #{FF} 2 ..... I just wrongly tried with 
#FF ..... but then each char got converted separately ...
I also found Sunanda's 'base-convert.r script, so forget my question 
....
Gregg
13-Jan-2006
[3181]
From RAMBO group: I don't know about "pretty " versus loadable, but 
what specific issue does it cause that you don't want that extra 
information available? WRT "form 1.0"
Luca
22-Jan-2006
[3182]
I need to "filter" the content of an object. Any better idea on how 
to do it other the this one:
obj: make object! [
	bb: 1
	cc: 4
	dd: 7
]


block: [bb dd]

filter: func [obj block /local newobj][
	newobj: make object! []
	foreach [s v] third obj [
		if find block to-word s [
			newobj: make newobj reduce [
				s v
			]	
		]
	]
	newobj
]

probe filter obj block

Result:

make object! [
    bb: 1
    dd: 7
]
Gregg
22-Jan-2006
[3183]
Here's something I did that may work for you:

obj-spec: func [
    "Returns the object spec as a single line (flat) string."
    obj [object!]
    /only "no surrounding brackets"
    /mold "Multi-line MOLDed format"
    /local res
][
    res: copy find/tail system/words/mold obj "make object! "
    if not mold [trim/lines res]
    if only [res: trim/auto next head remove back tail next res]
    res
]

remove-words: func [

    "Returns a copy of the object with the specified words removed."
    object [object!]
    words  [word! block!] "The word, or words, to remove"
    /local spec
][
    spec: load obj-spec object
    foreach word compose [(words)] [
        remove/part find spec to set-word! word 2
    ]
    make object! spec
]


The reason it doesn't use THIRD on the object is because of how words 
are returned. I use OBJ-SPEC to save object spec blocks to disk for 
the same reason.
Henrik
22-Jan-2006
[3184x3]
if the solution gregg posts is better, use that, but:

a: make object! [
  bb: 1
  cc: 4
  dd: 7
]

block: [bb dd]


make object! foreach word difference first a block [head remove remove 
find third a to-set-word word]
nah, doesn't work
d: third a

make object! foreach word next difference first a block [head remove 
remove find d to-set-word word]

seems to work
Luca
22-Jan-2006
[3187]
Gregg: Thank you, you are right, I forgot the 'THIRD problem. In 
other scripts I used the following solution to bypass it.

'prefs is an object containing various data types.
'rp2pcprefs is the file to save it to

save-prefs: func [/local prefstmp][
	prefstmp: copy/deep [] 
	foreach w next first prefs [
		append prefstmp reduce [to-word w get in prefs to-word w]
	]
	save rp2pcprefs prefstmp
]

load-prefs: func [/local prefstmp][
	prefstmp: make object! [] 
	if exists? rp2pcprefs [
		foreach [w v] load rp2pcprefs [

   prefstmp: make prefstmp reduce [to-set-word w ""] set in prefstmp 
   to-word w v
		]
	]
	prefstmp
]


Henrik: 'difference is a good point I didn't think to, then I like 
the one-liner :), thank you.
Henrik
22-Jan-2006
[3188]
luca, check for stability and binding though. there are always a 
few holes, when messing with objects like that :-)
Luca
22-Jan-2006
[3189]
I will keep it in mind... :-)
Gabriele
23-Jan-2006
[3190x3]
i wrote this a few years ago:
extract-object:
    func [source [object!] dest-template [block! object!]]

    [   if block? dest-template [dest-template: context dest-template]
        foreach word next first dest-template

        [   set in dest-template word get any [in source word 'none]]
        dest-template
    ]
>> obj: make object! [
[     bb: 1
[     cc: 4
[     dd: 7
[    ]
>> probe extract-object obj [bb: dd: none]
make object! [
    bb: 1
    dd: 7
]
Volker
23-Jan-2006
[3193x2]
!>>obj: context[bb: 1 cc: 4 dd: 7]
!>>probe context intersect/skip third obj [bb: - cc: -] 2   
make object! [
    bb: 1
    cc: 4
]
(a few years later ;)
Henrik
23-Jan-2006
[3195]
I should advertise this group some more. Just insert some code, and 
it comes out optimized a few days later. :-)
Gregg
23-Jan-2006
[3196]
Volker, THIRD doesn't work with word! values though; great otherwise. 
:-)
Luca
23-Jan-2006
[3197]
'intersect is very cool. But what the - (minus) sign stay for? What 
does it mean?
Gregg
23-Jan-2006
[3198]
Just dummy values to match the skip 2 format.
Luca
23-Jan-2006
[3199]
Does the minus sign stay for dummy anywhere or just in the intersect? 
I never met it before?
JaimeVargas
23-Jan-2006
[3200]
the dash is just a value. You can put anything there: [NONE + word 
empty] are some options.
Gabriele
24-Jan-2006
[3201]
THIRD *does* work for words, as long as you use CONSTRUCT to rebuild 
the object.
Coccinelle
24-Jan-2006
[3202x2]
I wonder to know the kmeaning of the negative value returned by the 
read-io and write-io function.

- I understand that when a TCP port is close at the other end of 
the communication, the value is either 0 or -1.

- it seems that read-io return -4 when there is no available data 
on the port
But I am not sure to be right.
kmeaning = meaning (sorry)
Henrik
24-Jan-2006
[3204]
does anyone know what PATH is good for?
Gregg
24-Jan-2006
[3205]
Ah! Thanks Gabriele! I don't know why I didn't think of that. :-\
Allen
24-Jan-2006
[3206]
To illustrate for those who may not know what the issue is with third 
/ make

>> c: make object! [a: 'print b: "hi"]
>> ? c
C is an object of value:
   a               word!     print
   b               string!   "hi"

>> spec: third c
== [a: print b: "hi"]

;Using make object! fails
>> e: make object! spec
hi
** Script Error: a needs a value
** Near: a: print b: "hi"

;Contruct works
>> f: construct spec
>> ? f
F is an object of value:
   a               word!     print
   b               string!   "hi"
Anton
25-Jan-2006
[3207]
Henrik, PATH is a function used internally by rebol but probably 
accidentally exposed globally.
Luca
25-Jan-2006
[3208]
'Construct!!!!! How long I've searched for you. :-) Thank you Gabriele
Gabriele
25-Jan-2006
[3209]
Coccinelle: the only info available about read-io return codes is 
in the async case. from async:// :