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

World: r3wp

[Rebol School] Rebol School

Anton
16-Feb-2009
[2162x2]
Actually, in my stargate demo (now that I look at it again more closely), 
I layout a window face with a single IMAGE face in it. I did this 
for some technical reason I can't remember, but I tried very hard 
not to make extra faces unnecessarily.
Anyway, I use a combination of techniques. I use DRAW and face/effect/DRAW 
dialect heavily, COPY image!, image datatype "bulk-set alpha", some 
face/EFFECT dialect, and finally SHOW face.
Vladimir
16-Feb-2009
[2164]
I just tried to separate math functions like square root and arctan 
with simpler constant values and speed seams to go up a bit, but 
not to much....

Ill try to make lookup tables for all visible coordinates and see 
what will happen....
Anton
16-Feb-2009
[2165]
profiling:
	time0: now/precise
	(your code...)
	print difference now/precise time0
Henrik
16-Feb-2009
[2166]
changing CHANGE/DUP to POKE gives a slight speed up, but then you 
need to scale in a different way.
Vladimir
16-Feb-2009
[2167]
I tried that..... doesn't matter to much.... making lookup tables....
Steeve
16-Feb-2009
[2168x2]
i made optimizations in R3, removed change/dup , parents, temp vars, 
etc...

I also replaced repeat or for structures by loops (to avoid bind/copy 
)
It changes nothing. It remains slow.
The reason is that the script does (10000 * i) iterations

in R3, by just doing iterations and a show (no computations) it takes 
4 seconds.

Then, by just adding the square-root calcul, it takes 8 seconds (2 
times slower).
i a case like that, using rebcode for math calculus in big loops 
will be really faster
Anton
16-Feb-2009
[2170]
Yes, I was just remembering my efforts to squeeze performance out 
of such per-pixel frame drawing and I think Rebol interpreter is 
not fast enough for such tasks. I would use the external DLL interface 
to pass your image to a C DLL function.
[unknown: 5]
16-Feb-2009
[2171]
We need rebcode in R3.  I understand the fact that it can cause problems 
with other parts of code but if we specifically use it where it works 
it can add a tremendous boost to performance.
Steeve
16-Feb-2009
[2172]
agree
Anton
16-Feb-2009
[2173x2]
Read BrianH's post above (1 hour 22 minutes ago) about why rebcode 
will not be in R3.
But talk of a new "different" rebcode...
[unknown: 5]
16-Feb-2009
[2175x2]
Exactly,  why not just create an updated rebcode then.
Brian's answer was more like an excuse than a reason.
Steeve
16-Feb-2009
[2177]
:)
Anton
16-Feb-2009
[2178]
Sleepy time for me. I think I might try make the C DLL tomorrow.
Vladimir
16-Feb-2009
[2179]
Thanks Anton!
Steeve
16-Feb-2009
[2180]
Ch is a good candidate, it allows to build c code dynamicly
Vladimir
16-Feb-2009
[2181]
There.... lookup table done...... speed difference obvious :)
pause after click on button is rendering first frame....

do http://www.visaprom.com/tunel.r
Steeve
16-Feb-2009
[2182]
do you have a little gain with this ?

	repeat i 256 [
		foreach pixel lookup [
			set [pozicija red ugao] pixel
			red: red + i - 1 // 63 / 2 + 1
			p: pick pick level red ugao
			if (p > 0) [
				boja: pick paleta p
				change/dup skip ekran/image pozicija boja pixel_size
			]
		]
		show ekran
	]
Vladimir
16-Feb-2009
[2183x2]
its a nice refinment of code :)
maybe its faster but my pc i to fast for me to notice.... Earlier 
today I tested script on three years old laptop.... Now I tried it 
on my home pc.. (amd 5000) and its to fast.... :)
kib2
16-Feb-2009
[2185]
Hi. I've got a local variable "level" inside an object, defined has 
follow : "level: length? t".

If I try to print it, no problem. But  if I use "build-markup {<%level%>}", 
REBOL raises a "ERROR no-value in: level". Any idea ?
Geomol
16-Feb-2009
[2186x2]
Is your build-markup call outside the object? If yes, then you have 
to refer to level as object/level (where object is the name of your 
object).
o: make object! [t: "abc" level: length? t]
build-markup {<%o/level%>}
kib2
16-Feb-2009
[2188]
Geomol: no build-markup is called within my object. But I forget 
to say that I use "return build-markup {<%level%>}"
I don't know if I can "return" local vars ?
Geomol
16-Feb-2009
[2189]
return is normally used from within a function. So you have a function 
within your object, that returns what you say?
kib2
16-Feb-2009
[2190]
2 secs, I post the snippet
Geomol
16-Feb-2009
[2191]
>> o: make object! [t: "abc" level: length? t f: func [] [return 
build-markup {<%level%>}]]
>> o/f
== "***ERROR no-value in: level"

heh, funny! :-)
kib2
16-Feb-2009
[2192]
http://clojurepastebin.appspot.com/2005
Geomol
16-Feb-2009
[2193x2]
Seems like a binding problem.
This works:


>> o: make object! [t: "abc" level: length? t f: func [] [return 
build-markup {<%o/level%>}]]
>> o/f
== "3"
kib2
16-Feb-2009
[2195x2]
In fact, my html-handler instance is within another object.
Geomol: So, I have to refer to the object:/level as you told me before, 
that's it ?
Geomol
16-Feb-2009
[2197]
The difference is, you have level as a local to your function, I 
have level as a member of the object. What do you give to build-markup? 
It's a string, right? So build-markup don't know, what you mean by 
level, I think.
kib2
16-Feb-2009
[2198]
Yes, I give it a string. But changing to "return build-markup {<%html-handler/level%>}" 
raises the same error.
Geomol
16-Feb-2009
[2199x3]
Look at it from build-markup's viewpoint. How should it know, what 
level mean? This is a bit tricky part of REBOL, but it's also one 
of REBOL forces.
level can mean anything depending on the context.
If you write you return like this, it will work:

return build-markup rejoin ["<%" level "%>"]
kib2
16-Feb-2009
[2202]
Geomol: No, sorry I can't understand. level is defined one line before 
I use build-markup ( forget the print statement).
Geomol
16-Feb-2009
[2203]
Now we force the value of level inside the string, before the string 
is giving to build-markup
kib2
16-Feb-2009
[2204]
You're right, it works well. But I still don't understand the behaviour.
Geomol
16-Feb-2009
[2205]
In my last example, the string become something like {<%3%>}

In your example, the string is {<%level%>}. This is what build-markup 
see, and it has to figure out, what level mean. It can't figure that 
out, because level is a local of your function.
kib2
16-Feb-2009
[2206]
Geomol: you mean that build-markup is sort of blind on locals ?
Geomol
16-Feb-2009
[2207]
All functions are in a situation like this. {<%level%>} is just a 
string giving to a function.
kib2
16-Feb-2009
[2208]
I've never seen such a behavior in whatever langage I've used, but 
I'm starting to understand it : thanks for the clarification.
Geomol
16-Feb-2009
[2209x2]
Maybe you can think of it as two persons, one giving the other a 
string. The person receiving the string read "<%level%>". That person 
now have to figure out, what level mean. The person live in a context 
(the global context in this situation, because everybody can call 
build-markup). So it look up level in the global context and find 
nothing, so it gives an error.
If you instead write: rejoin ["<%" level "%>"]

then level is replaced by the value of level and a string is made, 
and this new string is sent to build-markup.
kib2
16-Feb-2009
[2211]
Yes, nice comparison Geomol, we see that you live in the stars :)