World: r3wp
[!REBOL3]
older newer | first last |
Maxim 22-Jul-2010 [4022] | ahh yes. do you think that last? might be a viable official alternate notation? just as empty? is an alternate for tail? |
BrianH 22-Jul-2010 [4023x2] | Maybe - make a wish in Curecode :) |
Once the module system is revamped we can start working on making many of the mezzanines optionally included. We plan to clean up the namespace :) | |
Maxim 22-Jul-2010 [4025x2] | I just think that 'SINGLE? will hardly ever be used, as it doesn't fit well with the naming of all other series handlers. if LAST? where there, I think we'd use it naturally. since it fits it with TAIL? LAST FIRST, etc. |
I'll CC it. | |
BrianH 22-Jul-2010 [4027x2] | Suggest both alternatives: Renaming it, or making an alias. |
Carl suggested SINGLE? - he uses it (presumably). | |
Maxim 22-Jul-2010 [4029] | but he might not have tought of LAST? sometimes these little things escape us, since we implement this or that within a current "frame of mind" ;-) |
BrianH 22-Jul-2010 [4030] | The change would need to be backported to 2.7.8, so we need a ticket. |
Maxim 22-Jul-2010 [4031] | CC ticket added, #1636 |
Henrik 22-Jul-2010 [4032] | In fact, I suggested SINGLE? (see R3 chat #4330) and Carl took it up immediately. I use SINGLE? a lot. |
Maxim 22-Jul-2010 [4033] | not saying single be removed... its just like empty? and tail? they have different semantic meanings, but in rebol are equal in implementation. |
BrianH 22-Jul-2010 [4034x2] | ...more or less :) |
Good suggestion, Henrik :) | |
Maxim 22-Jul-2010 [4036x2] | as I stated in the ticket, 'LAST? should be none tolerant, whereas 'SINGLE? could stay strict as it is. |
hum... I thought ordinal functions had become none safe in R3? >> first none ** Script error: cannot use pick on none! value ** Where: first ** Near: first none (this is in A96) | |
BrianH 22-Jul-2010 [4038] | No, they are bounds safe. We want FIRST none to trigger an error. |
Ladislav 26-Jul-2010 [4039] | Originally I thought, that the FUNCT function was quite adventurous doing a deep search for set-words. But, after using it a couple of times, it really looks like it does what is useful most of the time. |
Graham 26-Jul-2010 [4040] | saves time .. |
Henrik 26-Jul-2010 [4041] | FUNCT is very nice. I love it. |
Graham 26-Jul-2010 [4042] | I wonder if we can do the same for use ... uset |
Henrik 26-Jul-2010 [4043] | CONTEXT would be close. |
Endo 26-Jul-2010 [4044] | @Graham: context [...] is not enough? |
Graham 26-Jul-2010 [4045x2] | Hmm.. could work :) |
so what advantage is there for use [ ] [ ... ] as opposed to context [ ] ? | |
Endo 26-Jul-2010 [4047] | use doesn't return an object, so its overhead is less I guess. |
Henrik 26-Jul-2010 [4048] | and you can specify a list of words, thus being entirely independent of the code inside. |
Endo 26-Jul-2010 [4049x2] | So, you can define a global variable without using set 'xxx = yyy. |
Here is my benchmarks: benchmark [use [a b c d] [a: 1 b: "xyz" c: 3 d: a * c]] ; == 0:00:01.094 benchmark [context [a: 1 b: "xyz" c: 3 d: a * c]] ; ==0:00:01.484 my benchmark function runs the block 1.000.000 times. | |
Henrik 26-Jul-2010 [4051] | interesting |
Endo 26-Jul-2010 [4052] | benchmark: func [b][s: now/precise loop 1000000 [do b] difference now/precise s] |
Graham 26-Jul-2010 [4053x2] | miniscule difference |
I should use this for my web pages ... | |
sqlab 26-Jul-2010 [4055] | I get different results >> benchmark [context [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.455 >> benchmark [use [a b c d] [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:03.753 |
Endo 26-Jul-2010 [4056x2] | strange.. >> benchmark [context [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.468 >> benchmark [context [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.469 >> benchmark [context [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.469 >> benchmark [context [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.5 >> benchmark [use [a b c d] [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.093 >> benchmark [use [a b c d] [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.094 >> benchmark [use [a b c d] [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.094 >> benchmark [use [a b c d] [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:01.094 |
@sqlab: try to bigger value. | |
sqlab 26-Jul-2010 [4058] | >> benchmark [context [a: 1 b: "xyzdddddddd" c: 3 d: a * c]] == 0:00:14.423 >> benchmark [use [a b c d] [a: 1 b: "xyzdddddddd" c: 3 d: a * c]] == 0:00:37.302 |
Endo 26-Jul-2010 [4059] | very strange.. I guess it's because of OS, hardware etc. >> benchmark [context [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:15.048 >> benchmark [use [a b c d] [a: 1 b: "xyz" c: 3 d: a * c]] == 0:00:11.11 for 10.000.000 times. |
Ladislav 26-Jul-2010 [4060] | Endo, the thing is much simpler than that. I bet, that you are using R2 |
Endo 26-Jul-2010 [4061] | ofcourse :) |
Ladislav 26-Jul-2010 [4062] | then, read the name of this group |
sqlab 26-Jul-2010 [4063] | That explains it. |
Endo 26-Jul-2010 [4064x2] | oh, yes, sorry, I just wanted to reply Grahams question.. |
so, use and context are really different in R3. | |
BrianH 26-Jul-2010 [4066x2] | USE is a wrapper around a closure!. CONTEXT creates an object. Very different. |
USE is mezzanine in R3 - source it. | |
Endo 26-Jul-2010 [4068] | Sure, I would think that USE would be faster than CONTEXT (as in R2) but it is not. |
BrianH 26-Jul-2010 [4069x3] | USE is just a helper function in R3. We use modules as the primary structuring model now. |
Or objects. | |
Now if you created the closure yourself ahead of time, instead of creating a new closure every time (as USE does) then it would be faster. | |
older newer | first last |