World: r3wp
[!REBOL3-OLD1]
older newer | first last |
BrianH 3-May-2006 [876x3] | Most of the time I use it like an assoc, or like a fully indexed table. |
The main advantage a hash has over an assoc is that you aren't limited to simple key-value records, you can use longer records. | |
I would want an assoc to be able to have any string type as a key and words as well, at least. | |
Ladislav 3-May-2006 [879x2] | The main advantage a hash has over an assoc is that you aren't limited to simple key-value records, you can use longer records. - yes, that is the domain where hash! should be better |
(especially if you want to use more keys than one) | |
BrianH 3-May-2006 [881x3] | Plus you can use more interesting dialected records that are type-delimited rather than fixed length - all the tricks that blocks can do. |
Still, if assocs are drastically faster it would be worth it. I could use blocks or lists and assoc indexes if I need them. | |
Assoc indexes to lists would be useful, as useful as I've found hash indexes to lists to be. I'd use hashes and lists more often if block parsing worked on them. | |
Ladislav 3-May-2006 [884x2] | drastically faster - I think, that REMOVE and INSERT can be made faster by not "shuffling" data as often |
...as useful as I've found hash indexes to lists to be - do you have a short sample code you can post? | |
Volker 3-May-2006 [886x2] | Insert tail should be not slow? |
for remove, dont use it, clear the values instead. and have some way to recycle them. | |
BrianH 3-May-2006 [888x2] | Mostly adhoc database stuff that could be replaced by RebDB. I really can't post most of it (work for hire). |
I've been wanting to look at the source of RebDB to see if there is anything about it I could improve. | |
Ladislav 3-May-2006 [890] | right, Volker, that may be the way but if you need such tricks to just obtain the functionality you want, don't you think it may be better to get the necessary functionality natively? |
BrianH 3-May-2006 [891] | I guess RebDB doesn't use indexes as much now, but I'm sure there are some ways it could be helped. |
JaimeVargas 3-May-2006 [892] | I also would like to see an example fo "hash indexes to lists". So far I have not yet see a situation where this is better than just a single key value mapping. |
Ladislav 3-May-2006 [893] | it is clear that if you want to use at least two different keys to access the values, then it is better to use hash! |
Volker 3-May-2006 [894x2] | if i loose the block-functionality i even prefer such hacks. and i never needed that remove-tuning, only figured it out for some benchmark. Where it paid of only with large data. And with large data, maybe i want the hash on disk anyway? |
related: will we get a native 'append ? If such speed-isues are now important, we should notstick with that important thing as meazzine? | |
JaimeVargas 3-May-2006 [896] | at least two different keys to access the values, then it is better to use hash! Well how is that different than an Associative Array or Map? |
BrianH 4-May-2006 [897x2] | Jamie, that was referring to using a hash as a table rather than as an index. If you use a hash rather than a block for your table, all of your searches would be faster without needing any seperate indexes. The only way to have the speed of searching a block be comparable would be to keep it sorted and use a binary search (what RebDB does I think), but that doesn't help much with multiple keys that require different sorting orders. On the other hand, I've been sold on the idea that when you use a hash as an index (rather than the table), you are basically using it like an assoc, so using a structure optimized for that behavior would probably be best. |
As for the hash (or assoc) index and list data combo, it has some advantages. When you are inserting and removing data a lot lists have a known speed benefit but the real advantage as far as indexes are concerned is in how lists handle series offsets (I'm using the word offset here because I'm using the word index to refer to the external hash/assoc index). Blocks encode their offsets as a number offset from the beginning of the series: >> a: [a b c] == [a b c] >> b: skip a 2 == [c] >> index? b == 3 >> insert next a 'd == [b c] >> b == [b c] >> index? b == 3 List offsets are pointers to the associated list element. >> a: make list! [a b c] == make list! [a b c] >> b: skip a 2 == make list! [c] >> index? b == 3 >> insert next a 'd == make list! [b c] >> b == make list! [c] >> index? b == 4 If you are indexing your data and your data in in a block, you need to update your index with almost every insertion and removal because the references to latter positions of the block in the index will be invalid. With list insertion and removal, external references are likely to still be valid unless the referenced elements themselves are deleted. If you are sure to delete the reference from the index (or replace it with nones) the rest of the index should be OK. New index references can just be tacked on the end, or put into the first empty entry. This makes live indexes a lot more practical. On the down side, if you are using lists and they are long enough to make linear searches impractical, you really do need an external index for them to be useful. Also you need to balance the overhead and complexity of keeping the indexes updated against their benefit. This technique is not for the faint of heart unless you can get some guru to do algorithms for you. | |
Jerry 5-May-2006 [899] | I am confused by some terms in REBOL 3. Can I say: * A component is a plug-in. * A plug-in is a component. * A component consists of at least one module. |
BrianH 5-May-2006 [900] | You might want to wait for some more information about modules to be revealed before asking that question yet. As it is now, components are compile-time features of REBOL 2 that can be included or excluded, enabled or disabled, in one chunk when building a version of REBOL. Only RT and SDK licensees have any control over that. Plugins and modules are features of REBOL 3 that haven't been documented yet (maybe not finalized either). It is unknown whether REBOL 3 will even have components at all, or whether they will be replaced by modules or plugins. |
Philippe 8-May-2006 [901] | Try a search on Carl's blog (not R3 blog) with the word : "module ". You will see a dozen of answers. See http://www.rebol.net/docs/modules.html, also. A first step to learn about modules. |
BrianH 8-May-2006 [902x2] | But don't forget that those references are to an older proposal for modules that was based on a different set of internals than REBOL 3. If even the syntax for modules is similar to that listed in the old proposals, it would be surprising. It is almost certain that the semantics will be different, as the underling REBOL semantics are certainly going to be different. |
underling -> underlying | |
Ladislav 10-May-2006 [904x3] | A design question: "If we allow a function-local return, is it ever the case that we have a recursive usage of the function that may request a return from different instances of the recursion?" |
any thoughts? | |
I think we don't need such a feature | |
Gregg 10-May-2006 [907] | You're always at least three steps ahead of me, but my head hurts just thinking about it (a return from different instances of the recursion). :-) What about generators, like in Icon, that step through alternatives? I've never used Icon for real, just tinkered a bit, and that powerful feature seems to lead away from readability. I also don't have an example of how it might be done in REBOL, or if it applies to your question. I'm a big help, aren't I? :-) |
MichaelB 10-May-2006 [908] | What means function-local return ? |
Ladislav 10-May-2006 [909] | example: f: func [ /local g return-from-f ; any local word can do the same service ] [ g: func [n] [ if n = 0 [ return 0 ; "classic" return, nothing special ] if n = 1 [ return/from 1 'return-from-f ; this causes F to return the value ] ] g 0 g 1 g 0 ] f ; == 1 |
Volker 10-May-2006 [910] | That is basically doable with throw/catch, but semantic sugar? |
Ladislav 10-May-2006 [911x2] | I would state it the other way around - Throw/Catch are doable using functions with local return |
the opposite is not true | |
Will 10-May-2006 [913] | on OSX, it would be nice to have native access to file metadata (what "mdls filename" return from the terminal in Tiger) with something like info?/all or info?/meta or info?/metadata returning an object with the metadata. |
Anton 11-May-2006 [914] | Ladislav, yes, I don't think we need the feature :) |
Geomol 11-May-2006 [915] | Ladislav, I don't have time to think it all to the end, but an advise: Keep it simple! I know, it's a very hard goal to reach, because we don't want to cut off possibilities. If it's possible for someone new to the language to use a feature like "function-local return" right away with expected result, and still the advanced programmer can use the feature in a way maybe not obvious at first, but that makes good sense, then it might be perfect. But don't make the advanced programmer happy, if it'll make things difficult for the newbie. recursive usage of the function that may request a return from different instances of the recursion sounds complicated at first. I think, you're right. We probably don't need such a feature. If the code (C source) become simpler by including the feature in recursion, then you might consider it though. |
Ladislav 11-May-2006 [916] | it seems to be the other way around - adding this feature may complicate and slow down the interpreter as it looks. Otherwise my observations are, that Carl is taking care to keep REBOL simple. (beginners don't need to use functions with local return at all) |
Pekr 11-May-2006 [917] | hmm, mid May, I wonder if some eeeeearly alpha 3.0 Core is already starting to emerge on Carl's harddrive :-) |
Geomol 11-May-2006 [918] | Ladislav, then it's easy. Leave the feature out, as you suggested! :-) |
Gabriele 11-May-2006 [919] | petr, sure it's running on Carl's computer. it has probably been for a while. it'll be more interesting when it starts working outside of his computer too ;) |
Henrik 11-May-2006 [920] | gabriele, looking forward to the behind-the-scenes DVD! :-) |
Gabriele 11-May-2006 [921] | lol, we should ask carl to keep a video camera in is studio maybe ;) |
Henrik 11-May-2006 [922] | that would be good. 4 hours of video, watching Carl typing on his keyboard. |
Geomol 11-May-2006 [923x2] | Someone send Carl a webcam, please! ;-) |
Oh, he already has a webcam!!! Here's a snapshot from it: http://www.bronzelady.com/ARMANI/fantasia.jpg | |
Henrik 11-May-2006 [925] | if those were the methods of development, I would not have any trust in a REBOL3 release :-) |
older newer | first last |