World: r3wp
[!REBOL3]
older newer | first last |
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) | |
BrianH 14-Feb-2010 [737x2] | Not necessarily - most map usage with non-word keys tends to not use literal key values. Case-sensitivity wouldn't affect word keys (your m/a vs. m/A) so it would mostly affect data that can be kept binary end-to-end, if necessary. Still, I wouldn't mind case-sensitivity as an option, as long as there was a syntactic way to specify that option. No, MAKE can't have a refinement. |
Once someone comes up with a decent syntax for specifying case-sensitivity, we can do case-sensitive maps. | |
Andreas 14-Feb-2010 [739x2] | words have case as well, so word keys are affected as well |
is an additional datatype too heavy a way for this? | |
BrianH 14-Feb-2010 [741] | No, they wouldn't be. Words are case-preserving, not ever case-sensitive. |
Andreas 14-Feb-2010 [742x2] | >> strict-equal? 'a 'A == false |
>> select/case [a 2 A 3] 'A == 3 >> select/case [a 2 A 3] 'a == 2 | |
BrianH 14-Feb-2010 [744x3] | Weird, I wonder when that started to behave that way. |
An additional datatype is a possibility - suggest it in bug#1437. | |
I wouldn't expect it to succeed though - case-sensitive maps have been suggested twice, and dismissed twice. | |
Andreas 14-Feb-2010 [747x3] | My ticked re case-sensitivity is not yet dismissed, but reviewed (#1315) |
And bug#1437 was dismissed rightly due to the desire for a MAKE refinement. | |
I will post the suggestion to bug#1315 instead, as I cannot re-open dismissed bugs, and I think the suggestion will get lost if it's buried in a dismissed bug. | |
BrianH 14-Feb-2010 [750] | bug#1437 was more likely, but try making the suggestion of an additional datatype in the other. Watch out though, since there are many tickets that are still current since we (mostly Carl) haven't gotten around to going over them yet. |
Andreas 14-Feb-2010 [751] | Can you change the status of #1437 to something other than dismissed? |
BrianH 14-Feb-2010 [752] | Yes, but it can't work so I shouldn't. A new datatype could work, but there is no way a MAKE refinement will be added, and there is no way to add the option to the spec syntax. |
Andreas 14-Feb-2010 [753] | Ok, I'll just submit a new "wish" bug then |
BrianH 14-Feb-2010 [754x3] | Good luck. Adding a new regular datatype is a big deal - there are only a fixed number that we can have overall. User-defined datatypes are supposed to enable us to make more, but there can onle be a limited number of true datatypes. |
So limited that typeset! values are immediate types, fitting inside a value slot. | |
I'm in favor of a strict-map! type, if my support counts. | |
Andreas 14-Feb-2010 [757x2] | :) |
If the number of types is an issue, I personally would rather prefer it the other way round. Having a case-sensitive map per default and having the user use LOWERCASE on keys if case-insensitivity is desired. | |
BrianH 14-Feb-2010 [759x2] | Case-insensitivity will be what is needed most of the time. Particularly for word types, but for strings too. |
Maps are used most often as a variant of the object type with slightly different behavior (mentioned by Robert above). | |
Andreas 14-Feb-2010 [761x2] | Maybe it's just because I'm spoiled by case-sensitive languages and operating systems, but I can't see how case-insensitive strings are ever useful. |
I would mostly use a map! as a hashtable | |
Paul 14-Feb-2010 [763x2] | BrianH can vectors be made extendable, shrinkable? |
would be nice to append beyond the end of a vector but I guess that would defeat it, correct? | |
BrianH 14-Feb-2010 [765] | Sorry, REBOL is case-insensitive by default in almost all cases. Something to get used to. At least R3 is case-preserving for words. |
Andreas 14-Feb-2010 [766x3] | Paul, as vectors are supposed to be contiguous regions of memory, it would be possible, but appending would either be _very_ slow in general or of unpredictable preformance at the cose of increased memory usage |
Brian, I don't have any issues with REBOL being case insensitive | |
But my filesystem simply is not, for example | |
Paul 14-Feb-2010 [769] | Yeah that is what I thought. I didn't think it would be possible without rebuilding the vector to some extent. |
BrianH 14-Feb-2010 [770] | Also, it would depend on whether the dimensions of a vector are considered part of their definition. And that would break multidimensional vectors, which are still planned. |
Paul 14-Feb-2010 [771] | ok thanks. |
Andreas 14-Feb-2010 [772] | And if I want to use filenames as keys, I already need to do `to-binary to-string` |
BrianH 14-Feb-2010 [773] | You can use filenames as keys as-is, if your code is portable. |
Andreas 14-Feb-2010 [774x2] | No, I can't |
Portability has nothing to do with it :) | |
BrianH 14-Feb-2010 [776] | Ah, your code must not be portable - if it was then you couldn't be using filenames that differed only by case. |
Andreas 14-Feb-2010 [777x3] | Let's say I write a script that displays the number of files in all current subdirectories |
Let's say I want to store those numbers in a map! associating the subdirectory name with the count of files | |
Perfectly portable code, but fails on case-sensitive filesystems | |
Paul 14-Feb-2010 [780] | Yeah can't use different case names in map. |
BrianH 14-Feb-2010 [781] | Right. Case-sensitive filesystems aren't portable to the main client OS'es, or even all server OS'es. |
older newer | first last |