• Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

AltME groups: search

Help · search scripts · search articles · search mailing list

results summary

worldhits
r4wp5907
r3wp58701
total:64608

results window for this page: [start: 47101 end: 47200]

world-name: r3wp

Group: !REBOL3-OLD1 ... [web-public]
Maxim:
28-May-2009
but you insert example is just a chain... it gets insane when you 
also have offsets, cause you want to insert into sub-blocks  ;-)
Henrik:
28-May-2009
perhaps it's a bit too many fixes for one release. one part of chat 
is mysteriously broken right now.
Pekr:
28-May-2009
ah, load-plugin .... what a bad name once again. Why load or import 
does not handle it internally? ('import is used in the blog article)
BrianH:
28-May-2009
That sounds like an internal function that hasn't been put in a module 
yet. There is a similar function MAKE-MODULE.
BrianH:
28-May-2009
A:

1) They are different concepts, but devices may be implemented in 
plugins.

2) Devices wrap host or hardware things. These things include stuff 
needed for I/O, graphics, etc.
3) Well, plugins for start :)
4) Yes, absolutely.
Pekr:
28-May-2009
thanks. I just have a little problem understanding 1), but never 
mind. So plugins are superset, the ability to extend environment. 
And as they can contain REBOL code, C code, they can contain even 
Device in itself? Well, it will be better to wait for API docs probably, 
to see some real-life examples ....
Henrik:
28-May-2009
do devices wrap hardware directly like a real device driver or does 
it wrap the underlying OS driver?
BrianH:
28-May-2009
We need utypes for host interoperability, to replace rebcode, and 
more. A utype will need to be able to react to the actions, just 
like a type
Pekr:
28-May-2009
But - I can imagine having library containing functions to handle 
mouse, but Amiga had device for each, which allowed it to function 
in a more async way ...
BrianH:
28-May-2009
Right. R3 is built like an OS. And designed by the same guy who designed 
*that* OS. It might follow a similar model.
BrianH:
28-May-2009
The device will have associated functions, but those functions might 
be defined in a plugin. Or not.
BrianH:
28-May-2009
Too costly on host OSes, you mean. Some host OSes provide APIs that 
structure hardware access, like the Direct* APIs. Devices could use 
those. Or if R3 is just running on a bootloader (as proposed in Wildman), 
the device functions would access hardware directly.
Dockimbel:
28-May-2009
About #564 and blog#207: I'm a little lost, is option 3 already implemented 
in alpha55?
BrianH:
28-May-2009
Part of the trick here is that you have to balance the benefits of 
error generation versus the overhead of error handling. We've been 
careful to make a lot of code that used to generate errors in R2 
just work in R3. If there is a good rationale for "just working" 
that is.
Dockimbel:
28-May-2009
I agree on the benefits of treating unset! as noops in such cases 
: 
ANY [( )] == none
ANY [( ) 1] == 1
It's usefull and is consistent with the way COMPOSE treats ( ).


But I still think that's some way of getting unset! values may lead 
to undetected errors like in :
>> test: func [a] [print a exit]
>> if any [test 123] [print "ok"]
123
== none
>> result: test 1
1
** Script error: result: needs a value


I understand why you were asking for such change, but it's hard to 
know if it won't cause more trouble than gain.
BrianH:
28-May-2009
ANY and ALL are used as control structures too. If () was defined 
as a noop, I would use it that way on purpose. If not, I wouldn't.
Dockimbel:
28-May-2009
It's hard to say in advance if it will do more harm than good. Unset! 
values can be generated from various semantic rules, I think it's 
 quite touchy to consider that all these cases are equivalent without 
exhaustively listing all ways to get unset! values and see one by 
one if the proposed change would impact it in a positive or negative 
way.
BrianH:
28-May-2009
Not a bad idea, at least for the built-in functions. In my experience, 
the main use for PRINT in ANY or ALL is debug statements. Most of 
those go away now that we have ASSERT. We didn't have ASSERT in January.
Dockimbel:
28-May-2009
Btw (digressing a litlle), I've always found inelegant the way unset! 
was used by PRINT or other console-oriented functions to avoid returning 
a value. I'm maybe too purist, but I would have expected PRINT to 
return the passed argument (making PROBE unnecessary). Other solutions 
for making functions (native or user-defined) more console-friendly 
could have been choosed (not having consequences on language's deep 
semantics), like adding a special flag in the spec block! (as 'save 
or 'throw).
BrianH:
28-May-2009
I really don't mind having some functions return no-value. The interesting 
decision to be made on a case-by-case basis whether no-value is an 
optional return or all the time, and whether no-value is generally 
an error when used, or not. #[none!] is the no-value that is generally 
usable as a value, or at least not an error most of the time. #[unset!] 
is th no-value that really is not a value, and most functions treat 
it as an error, but not all.
Dockimbel:
28-May-2009
I understand unset! values as an exception case where there's no 
value to work with. As such, IMHO, it should be treated as an error 
as much as possible. We should stick to the principle of least surprise. 
 

It wouldn't hurt if R3 unset! values were treated more consistently. 
But this is a deep topic, I remember that Ladislav had some interesting 
propositions about unset! (like, IIRC, removing it from user's eyes 
and keeping it internal only). While browsing about that, I've found 
a few interesting links :
http://www.rebol.net/cgi-bin/r3blog.r?view=0100
http://www.fm.tul.cz/~ladislav/rebol/rep.html#section-18
BrianH:
28-May-2009
Bug #564 and option 2 were the result of the last time (January) 
we decided on a consistent treatment of unset! values:

- As an error in value contexts, like assignment, function parameters 
that don't explicitly support it.

- As a noop in control contexts, where the value would normally be 
thrown away, like DO blocks. ANY and ALL were added to this group.
BrianH:
28-May-2009
We get a different answer every time we have this discussion :(
BrianH:
28-May-2009
Yeah, and it doesn'tt make sense to ignore unset! with REDUCE because 
that is a value context. With CONSTRUCT it is treated as no-value 
and not inserted. Both of these are the right choice in their respective 
cases.
BrianH:
28-May-2009
The main difference between ANY and DO, aside from ANY stopping early, 
is that ANY has a default value: none. Having a default value means 
that no-value is acceptable, so it returns the acceptable no-value. 
DO doesn't have a default value, so if the last expression generates 
no-value, that is passed along. That was the rationale for #564 and 
option 2, at least.
BrianH:
28-May-2009
I'm actually OK with either option 2 or 3, but there are tradeoffs 
to either. Which reminds me: Which built-in functions in R3 return 
unset! values? I can only think of PRINT and PRIN, off the top of 
my head. WRITE returns a value in R3. Even ASSERT returns true.
Pekr:
28-May-2009
yes, this world needs restart. I advice, before you post, press CTRL+A, 
then CTRL+C to get your post to clipboard first, to save your sanity 
:-)
Pekr:
28-May-2009
Maybe it would be get to post your idea to R3 Chat, R3/Datytypes 
section, or as a wish to CureCode, as Carl will not be able to read 
it here ....
BrianH:
28-May-2009
REBOL values only need to be serializable in REBOL format from the 
start - that is all the datatype! spec allows. That means MOLD and 
MOLD/all formats, and vectors support those peoperly as of alpha 
55. There are only so many operations that a datatype! can support 
internally. These operations are known as action! functions.


All other operations on a datatype! can be implemented as REBOL or 
native functions, and these functions can be added later if need 
be. They don't need to be there from the start. Codecs seem like 
a likely choice in this case, once the codec model changes to allow 
streaming. The current model is a just-for-now placeholder.


Welcome to the wonderful world of alpha software that is still being 
designed :)
Steeve:
28-May-2009
I'm a little disapointed about how Carl deals with the design of 
vectors.
BrianH:
28-May-2009
Vectors are serializable in the only way that REBOL datatypes can 
be inherently serializable: through MOLD. This is a basic limitation 
of how datatypes are implemented in REBOL. All other forms of serialization 
*have to* be implemented with other functions.
BrianH:
28-May-2009
The actions are the only functions that can be implemented *by* a 
datatype. All other functions are addons.
Steeve:
28-May-2009
Serialization is a general concept here.

I'm talking about convertions of vectors into another formats (like 
blocks or binaries).
Steeve:
28-May-2009
molding a vector is of no use in real applications.
Steeve:
28-May-2009
Wtf, i want the reference of the hardstored binary data of the vector.
What the prob ? it's stored as a binary stream
BrianH:
28-May-2009
It's a safety issue. That kind of access will be done through accessor 
functions.
Steeve:
28-May-2009
there is nothing to hide, a vectors is a binary serie
Steeve:
28-May-2009
so to secure it, there will be a copy. If not it can be secured
Steeve:
28-May-2009
i don't see your point, if i want a binary serie of the internal 
data of a vector, it's to do all sort of operations we can do on 
binaries
Steeve:
28-May-2009
what kind of bad modification could exist with a binary serie ? there 
is noone.
Steeve:
28-May-2009
To my mind a vector should be just a wrapper on a binary serie.
Steeve:
28-May-2009
just a new handy way, to modify or get values from a binary
BrianH:
28-May-2009
There are unsupported floating point numbers (inf, nan), and vectors 
must be a multiple of their component parts' size.
BrianH:
29-May-2009
Quick discussion needed, and here because more people need to chime 
in:


There is a proposal to change the name of the MAP function to MAP-EACH. 
Here's why:

- There's a map! type, and this function is unrelated - except in 
CS theoretical terms, which is why we suggest the name MAP-EACH.

- The other functions that have the name of a type without the ! 
are constructors for that type. The map! type could use one.
- This function is behaviorily one of the *EACH family already.

- This is *not* the functional language map function, and it might 
be good to emphasize that...


In functional languages, functions like map take functions as parameters. 
However, such languages tend to be compiled and the function values 
they take are constructed ahead of time. Since REBOL is interpreted 
and functions are created at runtime, that kind of code pattern tends 
to be inefficient. That is why REBOL control and loop functions tend 
to take blocks instead, and have any argument words to those blocks 
as a separate parameter: It's much more efficient that way.


There is precedent: The REBOL function that corresponds to the functional-langage 
filter function is REMOVE-EACH.


We ask this question now because now is the time to make the change, 
if ever. Not many functions in R3 use MAP yet (the only one I can 
think of off the top of my head is LOAD). This will change when we 
do a hand-optimization pass of the mezzanines, and it will definitely 
be too late once we hit beta.


What do you all think? Please chime in in the next couple days if 
you can (and have an opinion).
Janko:
29-May-2009
My vote: I don't want it to be called MAP because of reasons you 
named.. anything reasonable else is ok... 


I can't decide if I like map-each remove-each *-each ... naming convention... 
 

just thinking outloud..

1) you named fold/reduce accumulate ... if you name map/filter in 
similar vein they could be something like  map -> transform  translate 
  alter   apply ?     remove-each -> filter  purge ...


2) common to these functions is that they take a block of code (and 
a series) ... each hints about the serries but maybe more specific 
about them is first part - block of code (function in classic functional).... 
one idea for the common word that hints about  do something with 
block of code as a rule IMHO is with


map -> map-with , transform-with , ... ; remove-with  filter-with 
purge-with ;  fold-with ??
Pekr:
29-May-2009
I am OK with renaming too. OTOH I too dislike map-each, remove-each 
names, but not a big deal here ...
Vladimir:
29-May-2009
Two questions:
1.  is there a way to load-gui from local file ?
2. How is unicode in rebol3 working ?  (is it working ? ) :)
BrianH:
29-May-2009
Well, one advantage for calling them something other than map and 
filter is that you could put functional map and filter functions 
in a module somewhere and not have naming conflicts. They'll be less 
efficient and less flexible, but at least the functional programming 
fans would be happy :)
BrianH:
29-May-2009
That's a good point Maxim - we better make sure that IN series block 
is never added as a feature :)
Maxim:
29-May-2009
steeve, this isn't a noun prefix.
Maxim:
29-May-2009
that is a big difference.
Maxim:
29-May-2009
map in this context is a verb.
Maxim:
29-May-2009
much better to include a totaly obcure character... sure steeve. 
 assembly style code is much better than C.
Maxim:
29-May-2009
but in any case, REBOL style usually uses the '* as a notation for 
"pointer" or "reference to",
Maxim:
29-May-2009
brianH to me, a reference in rebol is not the same as a reference 
in C.  semantically they are equivalent, even if technically they 
are implemented differently.
Maxim:
29-May-2009
meaning, keeping a reference to some data.   which is why we never 
use a-word* to store scalar values for example, but we will sometimes 
use them for copies of series, and words.
Maxim:
29-May-2009
why is why reference, in REBOL, has a different meaning to me.  if 
all words are references in C terms, then that concept has its own 
meaning in REBOL terms... IMHO.
Izkata:
29-May-2009
I prefer just "map", but if there's going to be a name change, I 
think "map-each" is best - not only is it consistent with foreach, 
remove-each, etc, it's shorter than "map-every" or other alternatives, 
and feels like more natural English to me.

And I use my map all over the place
Janko:
29-May-2009
Steeve .. do you say this to me because of find-each :) .. I mean 
a fing that uses block of code to determine what to find .. like: 
find-each x numbers [ x > 3 ]    ... in same manner as map/fold/filter 
work
Steeve:
29-May-2009
i propose a new fork for rebol.
REBOL-EACH
Janko:
29-May-2009
fact is that find with a codeblock as criterium would be very usefull 
.. maybe it already exists under some other name? I remember someone 
proposing it not a long ago too
Janko:
29-May-2009
I use map reduce and seek  at jsgoo and I can do a lot of stuff with 
those (an appy inject for dictionaries) .. let's say you want to 
check if users with username and password exists in a block of users:

find-each U users [ all [ equal? U/user user equal? U/pwd pwd ] ] 
... much cleaner and more error prone than with foreach IMHO ( and 
these functions show intent of why you are looping through block 
of users )
BrianH:
29-May-2009
Steeve, the *EACH functions have a really specific calling convention 
and all have the same bind/copy overhead for the code block. The 
other series functions have neither of thoise characteristics.
BrianH:
29-May-2009
Janko, REMOVE-EACH is not reverse in meaning - elements are removed 
if they meet a particular criteria. The REBOL version is modifying, 
though.
BrianH:
29-May-2009
Steeve, is the filter function modifying or does it return a new 
series?
BrianH:
29-May-2009
I use REMOVE-EACH a lot in R2, but mostly because of how fast it 
is. It is easy to make your condition return false or none.
BrianH:
29-May-2009
Pekr, MAP-EACH (using the new name) is used in LOAD to implement 
LOAD [%s1.r %s2.r ...]. I don't know how it is used in the rest of 
the mezzanines. I mostly use it in my own code, but the version I 
backported to R2 as a mezzanine.
Janko:
29-May-2009
I don't care about the exact name much ... I usually call it reduce 
but reduce has a very important and basic meaning in rebol already
BrianH:
29-May-2009
Yeah, and a different meaning too...
Pekr:
30-May-2009
BrianH: one question - what is the motive to have R3/plus? Is there 
really a need to move few funcs out from main R3 module? Isn't it 
a bit preliminary?
Louis:
30-May-2009
Pekr, I'm still mad at you for making me think R3 was almost done 
a year or so ago.  I waited with great anticipation for that date. 
 That was a big letdown!  :>)
Maxim:
30-May-2009
in cases where the data is pretty linear or backup isn't needed due 
to format, a simple error is all you need to return when you encounter 
un-expected data... this can mean streamed xml parsing.
Louis:
30-May-2009
Pekr, I'm doing that right now head smashing right now trying to 
find a bug in my script.  It doesn't seem to help. But don't worry. 
I'm not really mad at you. Just joking.
BrianH:
30-May-2009
Pekr, the reason for R3/Plus is so we don't have to say no to people's 
requests for new functions, but don't want to bloat REBOL. With modules 
we don't have to make everything monolithic anymore. We have a new 
situation with R3.

The main advantages to having functions built into REBOL:
- REBOL itself can use them.
- You can count on them being there.

- They will be tested and reworked by the best of the community (the 
REBOL optimizer).

The main disadvantages to building functions into REBOL:

- Increases overhead, both in startup time and memory overhead. Compare 
R2 /Base to /Core to see what I mean.
- Predefines more words.

- These might not do what you want, so you'll end up redefining them 
anyways.


Building a community is a balancing act. Once we started taking requests 
for new features to make REBOL better, the floodgates opened. Even 
after filtering out the impossible or otherwise bad ideas, there 
was a lot of good stuff in there. But we don't want to bloat REBOL 
into Perl.


Fortunately, we had added modules to R3 to help organize the code 
and deal with the last two disadvantages to building in functions. 
And we have DevBase to accept community contributions. These are 
all the infrastructure we needed to create a standard library, tentatively 
called R3/Plus.


So now we don't have to worry about accepting requests for new features, 
because we know how ruthless we are going to be about our mezzanine 
cuts. If REBOL itself uses the function, it either stays as a mezzanine, 
or in some cases goes native. If the value of the function for users 
is high, the overhead is low, and there is consensus, it may get 
to stay too. Otherwise they become library functions. FUNCTOR wasn't 
the first cut, and it won't be the last.


Keep in mind that with plugins, library functions can be native too. 
And the REBOL optimizer still applies. And with modules you can declare 
your dependencies. There's very little downside to having R3/Plus.
Steeve:
30-May-2009
hmm, somewhere, i have a script which simulates parsing on an opened 
file (a port) in R2
Steeve:
30-May-2009
wait a minute
Sunanda:
31-May-2009
Perhaps there was a glitch in one version.

I've checked a few older R3s and a 2003 R2....They all behave the 
same way.
BrianH:
1-Jun-2009
Here's a good place for that kind of chat.
Carl:
1-Jun-2009
DevCon - yes. Interesting, because we are starting to plan a trip 
over there (Europe) already.
Graham:
1-Jun-2009
anyone got a link?
Carl:
1-Jun-2009
(that's a separate topic... btw)
Pekr:
1-Jun-2009
btw - I can see some new users in R3 Chat - it is a good sign. From 
the point of RT - are you still contacted by new users/companies? 
Is there any interest in R3? Sometimes I feel that we are unnoticed 
:-)
Pekr:
1-Jun-2009
As for R3 and me, I can't wait when we get back to GUI. It was good 
period. And times flies by - it is one year you started to work on 
it. The model is good, we "just" need to finish it and allow it to 
display Unicode. Well, some kernel changes are needed too, but if 
gfx is going to be open-sourced, not a problem ...
Henrik:
1-Jun-2009
There is a certain satisfaction when something difficult falls into 
place. And it's true that it's sometimes not only difficult to design 
and code but difficult to explain. :-)
Carl:
1-Jun-2009
Yes. And a satisfaction to checking it off on the big todo list. 
;)
Carl:
1-Jun-2009
A codec only works on in-memory data... even at a low level.
Carl:
1-Jun-2009
I posted a very detailed description of event handling on the wiki.
Carl:
1-Jun-2009
I think it covered pretty much the entire thing. But it was a long 
time ago.
Pekr:
1-Jun-2009
Posted by Doc - "Having the TCP/IP part open-sourced in R3 will be 
great. It will allow to use much faster OS hooks for file transfers, 
extend the port! API to bind only on selected interfaces, etc...I 
wonder if the main event loop will be there also, so we can replace 
the not-scalable Select( ) call by other faster ones or even integrate 
libevent. That would definitely make Cheyenne able to handle a much 
higher number of connections."
Carl:
1-Jun-2009
Plugins can be internalized... so yes, a single exe is supported.
Carl:
1-Jun-2009
There are a few simple init levels in the host.
Pekr:
1-Jun-2009
Ah, good to hear ... it once again starts to sound like MagmaOS/Wildman 
is still a long term plan :-)
BrianH:
1-Jun-2009
Carl, cold you put out the June plan blog a little earlier this time? 
It would help with prioritization of tickets, something that was 
skipped recently because we didn't quuite know what was going on...
Pekr:
1-Jun-2009
Not sure what you mean? Building a future? :-)
Carl:
1-Jun-2009
B: on block, good.  On DO/next... fastest would be a do-next, maybe 
private (not exported.)   Problem is DO is heavily "loaded".
Carl:
1-Jun-2009
B: let me take a break and see if I can get it to you somehow. Maybe 
a special A55.1 build for you to try.
Carl:
1-Jun-2009
But, is there a solution to the bug it causes?
BrianH:
1-Jun-2009
It is not thhe cause of the bug. Read the ticket again - I found 
out the real bug and fixed the ticket at least a day before alpha 
55.
Carl:
1-Jun-2009
Maybe we need DO string! to error out with a message: "old fashioned 
char-based coding is not allowed."
BrianH:
1-Jun-2009
DO of string not working is a worse buug than CATCH/quit messing 
up a TRY block.
47101 / 6460812345...470471[472] 473474...643644645646647