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

World: r3wp

[!REBOL3]

BrianH
7-Feb-2010
[532x2]
Check the comments - it talks about reorganizing the docs.
TYPES-OF works on other function types as well - we have a lot of 
them.
Robert
7-Feb-2010
[534]
Brian, please add that .r3 scripts are searched for as well. And 
that .r3 takes priority over .r if filenames are the same.
BrianH
7-Feb-2010
[535x4]
The strategy that seems to work best is to have platform-specific 
scripts in different directories and set system/options/module-paths 
to pick the sets of files that are appropriate.
Since this isn't just a R2 vs. R3 problem, it's also a Mac vs. Linux 
problem, etc.
File associations only affect the main script though, not the modules 
it uses. You can't use an Explorer to load a module.
And since the module lookup process doesn't apply to scripts, this 
is a bit of a non-issue.
Ashley
8-Feb-2010
[539]
>> system/version
== 2.100.96.2.5

>> to decimal! 1%
== 0.01
>> to binary! 0.01
== #{3F847AE147AE147B}
>> to binary! 1%
** Script error: invalid argument: 1%
** Where: to
** Near: to binary! 1%

>> to binary! %a 
** Script error: invalid argument: %a
** Where: to
** Near: to binary! %a

>> to binary! 0x0
** Script error: invalid argument: 0x0
** Where: to
** Near: to binary! 0x0


I think pair! should be binary! encoded/decoded something like this 
(in R2 it was to-binary formed):

to-raw-pair!: make function! [[
	pair [pair!]
	/local x y
][
	x: to binary! pair/x
	y: to binary! pair/y
	while [all [zero? first x zero? first y]][remove x remove y]
	append x y
]]

to-rebol-pair!: make function! [[
	pair [binary!]
	/local length
][

 to pair! reduce [to integer! copy/part pair length: (length? pair) 
 / 2 to integer! skip pair length]
]]

>> to-raw-pair! 0x255 
== #{00FF}
>> to-raw-pair! 0x256 
== #{00000100}
Graham
8-Feb-2010
[540]
>> system/version
== 2.100.97.3.1
sqlab
8-Feb-2010
[541]
Recently I made some tests comparing the speed of  R3 to R2.

After getting results of R3  up to 100 times slowlier than R2 and 
more, I found that parse is now almost unusable for simple parsing 
under some circumstances.

I will later add a Curecode ticket.
Pekr
8-Feb-2010
[542]
sqlab. Post your tests ... I can't believe you :-)
Graham
8-Feb-2010
[543]
not optimized ...
sqlab
8-Feb-2010
[544]
There is nothing to optimize in simple 
parse data "^/" .(
Pekr
8-Feb-2010
[545]
Ah, special mode parsing ... you try to get block of lines, correct? 
I wonder if using some parse rules instead would show so much of 
a difference between R2 and R3?
sqlab
8-Feb-2010
[546x2]
split produces the expected behaviour bit , but is still 10x slowlier.
c: ""
for i 0 255 1 [	append c to-char i ]
data: to-string array/initial 255 * 255 random c 
m: parse data "^/"
l: length? m

I get always diferent values for l.
Ashley
8-Feb-2010
[548]
>> trim/with #{001100} #{00}
== #{11}
>> trim/head/with #{001100} #{00}
** Script error: incompatible or invalid refinements
** Where: trim
** Near: trim/head/with #{001100} #{00}
Pekr
8-Feb-2010
[549]
sqlab - 'split is a mezzanine, hence slower imo ...
sqlab
8-Feb-2010
[550]
Is that behaviour somewhere documented, that this "special mode parsing" 
does not work anymore?
Graham
8-Feb-2010
[551]
>> dt [ loop 1000000 [ parse "abc def" none ]]
== 0:00:01.842453


>> t1: now/precise loop 1000000 [ parse "abc def" none ] t2: now/precise
== 8-Feb-2010/23:00:21.43+13:00

>> difference t1 t2
== -0:00:01.004
>>
Pekr
8-Feb-2010
[552]
sqlab - I did not say it should not work, it should work. But there 
might be some bug or something like that, because parse was highly 
modified ...
sqlab
8-Feb-2010
[553]
G: Dont parse some chars many times, parse many chars a few times.
Graham
8-Feb-2010
[554]
0 < 2 < 100 ... so still in the range
sqlab
8-Feb-2010
[555]
Especially look at the outcome of the parsing, even with the same 
data I get alyways different results
Pekr
8-Feb-2010
[556]
Graham - I don't understand your test at all :-)
sqlab
8-Feb-2010
[557]
just try my example
Graham
8-Feb-2010
[558]
different results .. you're using 'random
Pekr
8-Feb-2010
[559x2]
let's try to compare following for R2 vs R3: 


 parse "abc^/def^/ghi^/" [start: any [end: newline (print copy/part 
 start end) start: | skip]]
well, just remove (print ...) ... I just want to find out the traversal 
time ....
Graham
8-Feb-2010
[561]
I normally just parse short bits of text .. so R2 looks to be 2x 
faster than R3
Pekr
8-Feb-2010
[562x3]
s: now/time/precise loop 1000000 [parse "abc^/def^/ghi^/" [start: 
any [end: newline start: | skip]]] now/time/precise - s

Three consecutive runs:
R2:
0:00:03.11
0:00:02.941
0:00:03.089

R3:
0:00:01.732
0:00:01.679
0:00:01.724
the above code does not run in R3. Dunno if "end" is forbidden or 
became a keyword, but I get following error, if I don't change end: 
to en:


>> s: now/time/precise loop 1000000 [parse "abc^/def^/ghi^/" [start: 
any [end: n
ewline start: | skip]]] now/time/precise - s
** Script error: PARSE - command cannot be used as variable: end:
** Where: parse loop
** Near: parse {abc
def
ghi
} [start: any [end: newline start: | skip...
So - for basic traversal, R3 is faster .... for my example ....
sqlab
8-Feb-2010
[565]
even with my random generated data, the number of parts should be 
always the same.

But you can also parse the same data a few times. Every times it 
will be parsed in a different number of parts
Graham
8-Feb-2010
[566]
end is a keyword!
sqlab
8-Feb-2010
[567]
The data I parse, are oftly in the 10s of MB and more.
With R2 I had no problems
Pekr
8-Feb-2010
[568]
>> start: now/time/precise loop 1000000 [parse "abc^/def^/ghi^/" 
[s: any [e: newline (append blk copy/part s e) s: | skip]]] now/time/precise 
- start
== 0:00:05.359
Graham
8-Feb-2010
[569]
Hmm... tried to parse 4M chars a few times and r2 ran out of memory 
... r3 worked fine
Pekr
8-Feb-2010
[570x2]
There really is some problem:

R2:

>> start: now/time/precise loop 1000000 [parse "abc^/def^/ghi^/" 
"^/"] now/time/precise - start
== 0:00:00.933

R3:
==  0:00:04.259
I would curecode it, along with my example, and ask Carl about the 
possible cause ...
sqlab
8-Feb-2010
[572]
I did it already.

But your example does not show the real problem. just use my example 
and you will see why.
Pekr
8-Feb-2010
[573x4]
it shows very big time penalty ...
... which does not correspond to my manual parse example above ...
WTF? I get strange beeps when running your test code :-)
try running following code:

c: ""
 for i 0 255 1 [append c to-char i]

I get a beep here ....
Graham
8-Feb-2010
[577]
each time I parse the dataset  ... I get it alternating between two 
lengths
sqlab
8-Feb-2010
[578]
I have no speaker at my pc.)
Pekr
8-Feb-2010
[579x2]
hmm, we are appending char into string ... who knows what it does 
internally :-) In charset, there are some escape/control codes, so 
maybe it causes a beep, I don't know :-)
I reported the strange beep into CC too ...
Graham
8-Feb-2010
[581]
I copied the dataset before each parse ... very odd