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

World: r3wp

[!REBOL3]

Pekr
20-Apr-2010
[2186]
My question basicall was, if it would work with new binary represenation 
in R3. I think that there should be no reason to not to. We could 
add CC ticket for it, if not already there ...
BrianH
20-Apr-2010
[2187x4]
Go ahead. It's not already there, afaik.
SHIFT in R3 is a pure function though, non-modifying. You might be 
better off with a different function for binaries.
The changes to SHIFT are a good model for how to make PAD simple: 
Builder function, positive to pad left, negative to pad right, padding 
value required,  maybe an /into option. Make it simple enough and 
it could be fast even as a mezzanine.
We might want to reverse that positive/negative thing though since 
SHIFTing left is really padding right with bits though.
Ladislav
20-Apr-2010
[2191]
Pekr: "if you want your code being cross platform, your code complicates" 
- certainly! In such cases, left-padding does not work reliably, 
in fact!
Pekr
20-Apr-2010
[2192]
Hmm, because I can't do shift on binary, enbase/base is giving me 
following result (understandable, as to-binary creates 64 bit binary)

>> enbase/base to-binary shift to-integer (copy l) -8 2

== {0000000000000000000000000000000000000000000000000000000010000011}

whereas:
>> enbase/base 2#{11110000} and 2#{10110000} 2
== "10110000"


Correct too? So when using shift, I need to use different scenarios, 
if I want bits represenation (copy/part)?
Ladislav
20-Apr-2010
[2193x2]
Example:
>> to integer! #{FFFFFFFF}
== 4294967295
(while you migth want to obtain -1)
BrianH
20-Apr-2010
[2195]
Preconversion is usually the best bet for this kind of thing.
Pekr
20-Apr-2010
[2196]
Ladislav - interesting. So I better first check, what platform (integer-side 
wise) I am running on, and adjust accordingly? E.g.

>> 8 * length? to-binary -1
== 64
Ladislav
20-Apr-2010
[2197]
Yes, e.g. your #{8000} may in fact be interpreted as -32768
BrianH
20-Apr-2010
[2198]
Yup. And remember that all of those TO-BINARY calls and binary constants 
have overhead, so you should precompute constants whenever you can. 
This makes yor code *much* faster.
Ladislav
20-Apr-2010
[2199]
(as it was in 8-bit CPUs)
BrianH
20-Apr-2010
[2200]
16bit
Pekr
20-Apr-2010
[2201]
We still use 8-bit CPUs, it is just I don't expect REBOL to run on 
them :-)
Ladislav
20-Apr-2010
[2202]
They were called 8-bit, AFAIK, but worked with 16-bit integers
BrianH
20-Apr-2010
[2203x2]
That's the 8088 and its like. Real 8bit CPUs worked in bytes.
I worked on CPM and DOS 1, so I know the difference :)
Ladislav
20-Apr-2010
[2205]
I meant e.g. http://en.wikipedia.org/wiki/Intel_8080
BrianH
20-Apr-2010
[2206x2]
(worked on in this case not meaning developing the OSes, but developing 
*on* the OSes)
The 8bit vs. 16bit thing as most understand it referred to address 
space, not integer size :)
Pekr
20-Apr-2010
[2208]
The same was with Amiga and Motorola, just reverse, no? MC68000 was 
32bit CPU with 16bit bus, whereas adress space and registers were 
32bit?
Ladislav
20-Apr-2010
[2209]
Actually, I remember MC68000 being called 16-bit processor (which 
is analogical as for I8080, mentioning the bus size, not the address 
space, or the integer size)
BrianH
20-Apr-2010
[2210]
Ah, the good old days :)
Ladislav
20-Apr-2010
[2211]
:-D
Henrik
20-Apr-2010
[2212]
Anton, that might be a good syntax. A "shame" that x is already taken 
for pairs.
Pekr
20-Apr-2010
[2213]
Henrik - I just wanted to say the same (re "x") ... I thought about 
"*", but not sure ...
BrianH
20-Apr-2010
[2214]
I prefer to think that "shame" was put in quotes sarcastically :)
amacleod
20-Apr-2010
[2215x2]
From R3 twitter:

The first R3 embedded extension function evaluated! I think many 
of you are going to like this capability.
A few days old but I did not see mention of it here.
BrianH
20-Apr-2010
[2217]
Yeah, based on the proposals and the docs it looks like it will be 
really simple and powerful, great stuff.
Pekr
21-Apr-2010
[2218]
awake: func [event][
    switch event/type [
        connect [return true]

        read [read event/port all [0 = last event/port/data return true]]
        lookup [open event/port]
        wrote [read event/port]
    ]
    false
]

p: open tcp://router-ip:8777 ;--- obfuscated, web public group
p/awake: :awake
wait [p 10] ;wait for connection

write p "^F/login^@"

wait [p 10] ;wait for data
print to-string p/data

close p

>> ?!done%=ret=5faf15d6f67b41e74644b85dfef81ca6


Thanks Steeve, good work ... although thouse synchronous wait [p 
10] are scary :-) I now have some noob questions:


1) I wonder, if we could have "more regular" way of handling timeouts? 
I mean - could there be a time event type, which could be put directly 
in the 'awake? Hmm, but that would be similar to face/rate probably, 
or would even require multitasking/threading, or would not be usefull 
at all :-)


2) Would it be possible to have at least minimal 'awake handler awailable 
for schemes like TCP? I know Carl told us, that having async networking 
comes with some price - it is not so easy to handle. But R2 simplicity 
of opening the port, inserting data, copying result, closing port, 
- is greatly missed ...
Graham
21-Apr-2010
[2219x2]
sure .. why not
create your own scheme, and put the waits in the scheme definitions 
for read or write etc
Pekr
21-Apr-2010
[2221x2]
I don't want my own scheme, I want bere-bones TCP/UDP to have some 
handler by default :-)
(not talking about putting 'time inside the handler, that was just 
an idea)
Graham
21-Apr-2010
[2223x3]
Well, the http scheme has sync handler because Gab wrote one.
so your microtik scheme can do the same
tcp is low level async .. so not really sync
Pekr
21-Apr-2010
[2226]
yes, I know. I don't care about Mikrotik right now, but about easy 
prototyping. With R2, I was able to start, just like with Telned 
- you open the port, insert some data, and watch things happening. 
Not so with R3. I would welcome, if even R3 TCP had some default 
awake handler, which could be later overriden, if needed ...
Graham
21-Apr-2010
[2227x2]
so you have to type one more line ...
the r3 port model makes things much easier to write schemes
Pekr
21-Apr-2010
[2229]
one more line? Do you mean port/awake: :my-awake? But I first have 
to define 'my-awake, no? Just trying to understand the situation 
...
Graham
21-Apr-2010
[2230]
and users should be using schemes and not low level tcp
Pekr
21-Apr-2010
[2231]
Graham - I know ... and I would not trade R3 port model for R2. I 
am just asking, if there might be some "shortcut", to "simulate" 
R2 way of doing things :-)
Graham
21-Apr-2010
[2232]
Yes, define a simple awake handler
Pekr
21-Apr-2010
[2233]
OK, so there can't be any way :-)
Graham
21-Apr-2010
[2234x2]
ask Carl I guess
or create a new scheme called stcp:// for sync tcp