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

World: r3wp

[!REBOL3]

Andreas
14-Feb-2010
[687]
Please note that I don't consider "it was the same in R2" to ever 
be a legitimate answer to R3 quirks :)
BrianH
14-Feb-2010
[688]
Got it, I should see bug#666 :)
But that's not a quirk, that's part of the design.
Andreas
14-Feb-2010
[689]
The docstring length is by design?
BrianH
14-Feb-2010
[690x2]
Robert, the reason that we have the map!, block! and object! types 
is that they behave differently. If they behaved the same, we would 
only need one type. Pick the type that behaves the way you want for 
the circumstances, and pick another type for different circumstances.
Andreas, the docstring length is limited by what won't word-wrap 
in an 80-character console when you use HELP. For more details, use 
HELP/doc to get to the web page for the function.
Andreas
14-Feb-2010
[692]
See, that's what I call a quirk. We could simply use a word-wrapper 
to format help output in the console, and allow the docstring to 
be slightly longer.
Graham
14-Feb-2010
[693]
>> help/doc map!
map! is a datatype
It is defined as a name-value pairs (hash associative)
It is of the general type block

No values defined for map!

ie. no web entry
BrianH
14-Feb-2010
[694]
The limit is considered a feature, to keep the doc string short, 
easier to read quickly. There's a web page with more details. You 
keep calling quirks what we are doing on purpose :)
Andreas
14-Feb-2010
[695]
Yes, I understand that feature. Only the limit is arbitrary.
BrianH
14-Feb-2010
[696]
Graham, that's a bug in HELP, so report it :)
Andreas
14-Feb-2010
[697x2]
For example, when using the "search mode" of help, docstrings are 
truncated (using "..."). Or the indentation by 8 spaces in HELP robs 
the docstring of 8 possible chars.
I'd rather have a limit to be exposed explicitly: document somewhere 
that docstrings are to be of 72 chars max. And then have HELP take 
care of how it formats the output given this constraint.
BrianH
14-Feb-2010
[699]
It doesn't matter what the limit is, only that there be a limit. 
Be consise in your doc strings, detailed in the manual.
Graham
14-Feb-2010
[700]
do any of the datatypes have web entries accessible by help?
BrianH
14-Feb-2010
[701x2]
A doc string that is longer than the limit can be reported as a bug.
Graham, don't know. Check it out.
Andreas
14-Feb-2010
[703]
what is the limit? 71 as per the current HELP output?
Graham
14-Feb-2010
[704x2]
It's a bug in the help system
Andreas, doc strings have to fit on a punch card
BrianH
14-Feb-2010
[706]
So? It's an advantage to make the doc string only fit on one line 
- it takes less space and is qicker to read. The doc string is more 
of a reminder than detailed documentation. Most functions need a 
full manual page to explain their behavior.
Andreas
14-Feb-2010
[707x2]
Yes, that's great
I will figure out a way how to squeeze a case sensitivity remark 
into the strict-equal?
BrianH
14-Feb-2010
[709]
If you can phrase it,m suggest it. And remember that most types that 
== applies to don't even have a concept of case, but have other constraints 
that == makes that = doesn't...
Graham
14-Feb-2010
[710]
if the values are EQUAL

uses no more characters
Andreas
14-Feb-2010
[711x5]
Case is pretty important, though, so it warrants en explicit mention 
in the docstring.
The other constraints are not even documented on the docs page, at 
the moment.
So if you know any such constraints off the top of your head, please 
add them to the page.
Two suggestions:

>> length? "TRUE for values that are equal and of the same case and 
datatype." 
== 65

>> length? "Returns TRUE for EQUAL? values that are of the same case 
and datatype."
== 70
but i guess you'll want a mention then that case is not applicable 
to all types ...
Graham
14-Feb-2010
[716x2]
>> strict-equal? 1-Jan-2010 1-JANUARY-2010
== true
since date has no case, it doesn't matter ...
Andreas
14-Feb-2010
[718x2]
>> 1-JANUARY-2010
== 1-Jan-2010
>> 1-JAN-2010
== 1-Jan-2010
Yeah, I guess it's a question of what would be considered more irritating: 
STRICT-EQUAL?s docstring pretending that it only differs from EQUAL? 
in that it also considers the datatype. Or mentioning case-sensitivity 
explicitly.
BrianH
14-Feb-2010
[720]
Robert, if you want object! to behave like map!, use SELECT. SELECT 
object! 'field returns none if the field isn't there.
Robert
14-Feb-2010
[721]
Thx. Yep, that's a good way.
BrianH
14-Feb-2010
[722]
If you're talking about changing object behavior, that would require 
rewriting a lot of mezzanine code. There are many cases where a field 
not being in an object is an error, and it triggering an error is 
relied on in a lot of mezzanine code. If it stops triggering an error 
then we would have to change a lot of code from o/field to EITHER 
in o 'field [o/field] [cause-error ...].
Graham
14-Feb-2010
[723x3]
interesting ... 'select now works on objects ... whereas I would 
have normally used 'in
Since the /case refinement is used elsewhere .. why not have

equal?/case
instead of strict-equal?
BrianH
14-Feb-2010
[726]
You can't have an op! call a function with a refinement. STRICT-EQUAL? 
is only there to be the prefix form of ==.
Andreas
14-Feb-2010
[727x4]
While we are at case sensitivity: any ideas how to proceed regarding 
a case-sensitive MAP!?
Brian, I think you mentioned a few days ago, that this issue needs 
dicussion.
Maybe adding a strict-map! datatype that would raise an error for 
path accesses could be a solution?
And if we are comfortable with the idea that m/a and m/A will typically 
return different values, then we could drop the path access restriction.
BrianH
14-Feb-2010
[731]
I believe the result of the discussion (so far) was to use binary! 
encoded keys for case-sensitive maps.
Andreas
14-Feb-2010
[732]
At least in my typical usage scenarios, a get from a map far more 
often than I put into a map.
BrianH
14-Feb-2010
[733]
Yup, and that is the usage pattern that maps are optimized for.
Andreas
14-Feb-2010
[734x3]
Using binary! for keys would then have two effects:
- Lots of code gets more unreadable
- A map! is unsuitable for anything performance-related
`a/(to-binary k)` vs `a/:k`, in the simplest case
performance will be less of an issue once we have support for a fast 
codec (utf-32/ucs-4), leaving mostly the extra function call(s)