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

World: r3wp

[Core] Discuss core issues

Graham
18-May-2007
[8002x2]
anyone got any timestamp routines ?  digits only - no alpha - eg 
seconds since a partciular time?
ah... just use 'difference
Oldes
18-May-2007
[8004]
you mean... difference now (wait 0:0:1 now) ?
Graham
18-May-2007
[8005]
just need to create sequential unique ids
Oldes
18-May-2007
[8006x3]
btw... this is my favourite example of non compilable Rebol code: 
 b: [a b c] b/(print length? read http://rebol.comrandom 3)
b: ["yes" "no"] b/(exists? http://rebol.com)
but maybe it is compilationable
Gabriele
18-May-2007
[8009x4]
b: pick [[print "he"] [print "ho]] random 2
; ...
f: does b
; ...
f
now try to change the meaning of PRINT after the f: does b line, 
or maybe change DOES so that b is interpreted as a dialect...
see, for how smart the compiler would be, it would still be "interpreting" 
(or compiling and using the compilation result just once - which 
is the same) most of the times.
it's much easier to just have a compilable dialect that is used in 
tight loops and so on.
Dockimbel
18-May-2007
[8013x2]
a simple not-compilable code example :  a/b
with 'a defined at runtime, could be object!, function!, string!, 
block!, etc...
BrianH
18-May-2007
[8015]
Compilation doesn't necessarily mean ahead-of-time - it could be 
at runtime or function creation time. Type inference could handle 
a/b.
Dockimbel
18-May-2007
[8016]
well, but the meaning (and so the datatype) of 'a and 'b can change 
during runtime, even a JIT can have a hard-time tracking those changes, 
don't you think so ?
Maxim
18-May-2007
[8017x2]
it seems current JIT technology has become quite agile, as per Jaime's 
claim previously...
JIT inspects stuff prior to compilation, so I guess it will just 
remember to identify stuff and just make sure double infering is 
handled properly.
BrianH
18-May-2007
[8019x2]
You are thinking that a/b means what a.b means in other languages 
- it doesn't. You can use type inference and partial evaluation to 
make it reduce to some simple behavior in many cases.
Most DO dialect behavior can be resolved at function creation time, 
so it's not even really runtime compilation.
Dockimbel
18-May-2007
[8021x2]
how do you infer the type of 'a in such case :
c: call-function-returning-a-logic-value
a: make pick [object! block!] c [b: 1]
a/b ??
BrianH
18-May-2007
[8023]
Rewrite the pick to an either and move the a/b into both code blocks.
Sunanda
18-May-2007
[8024]
Probably 90% of all rebol code is compilable. 

There may be some speed improvements if code was identified as such, 
eg....
        a: func/compilable [a b] [return add a b]

....could (in effect) inline the (current) assembler code for 'add 
and 'return....So if they change value, this code continues unchanged.

But what would we have saved? One level of lookup. Is it worth it?
BrianH
18-May-2007
[8025]
I've been telling people, unless the compiler is really smart, don't 
expect too much of a speedup.
Dockimbel
18-May-2007
[8026x3]
Brian, do you really think that one could write a usable compiler 
being able to handle such (too ?) specific cases ? How about that 
:
c: call-function-returning-a-logic-value
list: call-function-returning-a-list-of-datatype ; (1 <= n < ??)
a: make pick list c [b: 1]
a/b ??
do you think that a JIT could determine the type of 'list and 'c, 
and be able to take adequat decision regarding how he should handle 
'pick ?
BrianH
18-May-2007
[8029]
Yes, but don't expect the output code to be much faster than standard 
REBOL code. If it can't infer the type it will have to output code 
that replicates the runtime behavior of REBOL.
btiffin
18-May-2007
[8030x2]
BrianH;  I like to idea of using a REBOL to rebcode dialect.  JIT 
for developing.
Pre "compiled" for released scripts.
to = the / your
Dockimbel
18-May-2007
[8032x2]
I guess that only a (small?) subset of REBOL semantic rules can be 
compiled to rebcode or native code. Maybe Brian has already defined 
that subset during his research.
(i mean, without resorting to some level of runtime evaluation)
Oldes
18-May-2007
[8034]
rebol to rebocode compiler would be very usefull for math functions 
and image manipulations
Rebolek
18-May-2007
[8035]
rebcode math is faster than rebol, but C math is still lightyears 
awonder how big is smallest C compiler
Oldes
18-May-2007
[8036]
for example I would like to see this equations as rebcodes http://www.robertpenner.com/easing/penner_easing_as2.zip
BrianH
18-May-2007
[8037]
There is nothing really sacrosanct about the DO dialect's semantics. 
A compilable dialect could have different semantics that would be 
similar enough at the high level for most programmers to not have 
to change most of their code.
Rebolek
18-May-2007
[8038]
lightyears awonder = lightyears ahead. I wonder...
BrianH
18-May-2007
[8039]
RT did something similar when they switched from R1 to R2. They switched 
from a Scheme-like engine to a Forth-like engine and most code was 
able to run without changes.
Pekr
18-May-2007
[8040]
The question is, if such change can be done now? Or do you have just 
special subset of rebol language functionality having available to 
those who wish to compile?
BrianH
18-May-2007
[8041]
Doc, my research has been put on hold waiting for R3. I can't justify 
using REBOL as a primary platform at work until I can make it integrate 
better with Microsoft technologies. Plus, they put rebcode on hold 
before they resolved the security/stability issues.


This research is going to have to be a spare-time thing for me for 
now, and I won't have any of that until after summer.
Volker
18-May-2007
[8042]
For one, i dont do stuff like in Gabrieles examples, dso if they 
perform terrible, i dont worry :)

For the ability, hotspot can do the following: it analyses the current 
code, sees, the is a virtuall call . but only one class with that 
method. and inlines the method. Later more code is loaded. now there 
are two classes, and the call must be really dispatched. Yes, it 
can change the code. I think that is somewhat similar to GAbirles 
changing of 'print.

For a/b, self did that long ago. it started with very flexible code, 
which checkt for object function and so on. keept track of what really 
occured. and generated optimized versions for the common cases. some 
runtime-checks for types, and branching to the quick version most 
of the time. quite fast results.
BrianH
18-May-2007
[8043]
There's even solutions to combining type inference and partial evaluation 
that can make dynamic languages mostly static, and you can use type 
inference to make static languages that look like dynamic languages 
on the surface.
Dockimbel
18-May-2007
[8044]
Brian, what kind of integration with MS technologies do you lack 
the most ?
BrianH
18-May-2007
[8045x7]
Native library access to C is not enough, I need fast COM and .NET 
integration. Now that the DLR is out I may be able to implement the 
.NET stuff, when I get the time. With plugins and user-defined data 
types I could integrate COM. Mostly I would like to use /Services 
and I can't unless I can call them from .NET, or serve up .NET services 
to REBOL quickly. I think the lower overhead compared to SOAP would 
be a plus, but it has to be seamless, and as fast as local services 
when running on the same machine.
Cross-platform is not a problem for me - I can use Mono if I need 
to.
It would also be a plus to have proper WinCE support, as many of 
the people I support are running it in their cell phones. J2ME would 
be good for many others.
For instance, there are many REBOL desktop and network apps that 
would be much more useful with ActiveSync support (Qtask).
The ActiveSync APIs use COM.
Any proper WinCE app that stores data locally would need some kind 
of syncronization support too.
I would love to replace Outlook with Qtask, but can't without ActiveSync 
support.