World: r3wp
[Rebol School] Rebol School
older | first |
BrianH 24-Dec-2011 [4066x2] | It doesn't work that way in R2. Changes to a reference to the argument spec block don't change the function after it's created. Like this: >> a: [a] b: make function! a [print a] >> change a 'b == [] >> source b b: func [a][print a] >> words-of :b == [a] |
Note: In R2, if you use the old-style reflectors to get at the spec then you can replicate the R3 weirdness because it returns a reference to the original spec. The SPEC-OF reflector is much safer, even in R2, because it returns a deep copy instead. Have I mentioned lately just how bad it is to use the R2-style ordinal reflectors instead of the R3 style *-OF reflectors? | |
Janko 24-Dec-2011 [4068x2] | Brian: interesting inconsistency. I have no idea how come it happens, I would assume help somehow uses words-of to show arguments so it couldn't happen :) |
about my example code, I didn't explain it good enough. I am not giving them arguments intentionally .. I will make better example. | |
Steeve 24-Dec-2011 [4070] | in R2, one can't prevent MAKE to reconstruct functions. in R3 you,can do such by using COPY instead. |
BrianH 24-Dec-2011 [4071x5] | Janko, don't worry, I got it. The message beginning with "In C1 and C2 you are " was in answer to your question. |
HELP uses WORDS-OF to show the arguments at the top, but uses SPEC-OF to get the detailed argument help below. The spec returned by SPEC-OF doesn't have any effect on the execution of the function - it's just documentation. | |
The inconsistency between R2 and R3 is because R3's reflection model was changed to be more secure, and easier to sandbox. In R3 you can't get a reference to the real spec and body of a function after the function is created, at least from non-native, non-debug code. That is why the hack above required saving a reference to the spec from before the function was created; if you don't do that, you won't be able to get at the spec or body afterwards if your security settings are set to the defaults (and turned on - that's another story). | |
The inconsistency between R2's and R3's spec and body copying behavior during MAKE function! was an efficiency issue. The startup code of R3 uses a non-copying version of FUNC, and this speeds up startup quite a bit. However, the function builder mezzanines copy the spec and body, moving the copying behavior from the MAKE action to the mezzanine code - it's still about as fast because the actual copying is done by the same native code. As a side benefit, we get a bit more flexibility when we need it, especially when you don't leak references to the original spec and body that were passed to the MAKE action. MAKE module! does the same non-copying behavior for the same reason, though MODULE doesn't make a copy because the body is generally even bigger, and is not saved at all in the constructed module. | |
The main built-in function that takes advantage of the flexibility is FUNCT, which copies the spec and body before it does its collection of locals and binding to the static local object. In R2, the spec and body are copied again after that by the MAKE action, doubling the copying overhead. In R3, they aren't. | |
Endo 27-Dec-2011 [4076x2] | Is it possible to send command -line arguments to the new REBOL process using LAUNCH? launch "test.r" ;this one works launch "-s test.r" ;REBOL starts in TRACE ON mode (I don't know if %test.r will start or not, too much trace log to wait) launch "--secure allow test.r" ;shows USAGE and doesn't start %test.r launch "-q test.r" ; trace mode again. |
I'm using R2 2.7.8.3.1 | |
Pekr 27-Dec-2011 [4078] | Not sure launch can do that, or if there was not related any bug. But - you might use CALL, it is now free .... |
Gregg 27-Dec-2011 [4079] | I standardized on using CALL some time back, as RUN and LAUNCH weren't available or consistent in all REBOL versions. system/options/boot makes using CALL easy for LAUNCH-like behavior. |
Endo 27-Dec-2011 [4080] | @Pekr - @Gregg: Thank you. For encapped files, system/options/boot points to encapped .exe right? |
Gregg 27-Dec-2011 [4081x2] | Yes. |
In cases where I need to launch REBOL from encapped, I have included config options; sometimes on a per-command basis, so I can launch a specific version of REBOL for different needs. | |
Endo 27-Dec-2011 [4083] | You put rebol.exe into your encapped file? Or into the same folder? And how do you put license.key to enable /Pro features? |
GrahamC 27-Dec-2011 [4084] | you don't need key if encapped. |
Gregg 27-Dec-2011 [4085] | I haven't done that for commercial products where I would have to redistribute REBOL; only systems where the environment is controlled and REBOL is in use/licensed. |
Endo 27-Dec-2011 [4086] | Ok, now I see. If I have a encapped script and need to launch a new REBOL process to execute another script (not encapped), is it the correct way, CALL my exe with a command-line argument to execute the other script? |
nve 27-Dec-2011 [4087] | I want to declare a function with several rafinments by only one can be selected : myfunc: func [/r1 /r2] [...] myfunc/f1 or myfunc/f2 I don't want to allow : myfunc/f1/f2 |
Henrik 28-Dec-2011 [4088x2] | That is not possible, but you can determine presedence of use in the function body, so the outcome would be the same, or you could make an error, if both refinements are used. |
>> a: func [/b /c] [if all [b c] [make error! "Only one refinement can be used."]] >> a == none >> a/b == none >> a/c == none >> a/b/c ** User Error: Only one refinement can be used. ** Near: make error! "Only one refinement can be used." | |
GrahamC 28-Dec-2011 [4090] | Endo, launch with parameters stopped workng years ago. So, we had to move to call instead |
Endo 28-Dec-2011 [4091] | GrahamC: Thanks. I'll keep that in mind. |
nve 28-Dec-2011 [4092] | @Henrik : thanks a lot ! |
BrianH 28-Dec-2011 [4093x2] | nve, there is a built-in error that might be better for you to use. Try this: >> cause-error 'script 'bad-refines none ** script error: incompatible or invalid refinements |
That error is apparently not in R2 though, sorry. | |
ChristianE 4-Jan-2012 [4095] | nve, there's TOO-MANY-REFINES in R2: >> cause-error 'script 'too-many-refines none ** Script Error: Too many refinements |
Marco 16-Jan-2012 [4096x2] | Is there a way to avoid conversion of numbers to scientific notation by mold? >> mold 0.004 == "4E-3" or have you a function to convert back a string representing a number with exponent to one eithout it? |
eithout = without | |
Gregg 16-Jan-2012 [4098x4] | You have to do it yourself. |
Many people have examples and funcs out there for it. | |
http://www.rebol.org/view-script.r?script=format-decimal.r | |
I have a general FORMAT func I use, but it's quite heavy as it handles a lot of things. | |
Marco 16-Jan-2012 [4102] | Thanks. The one from Nick should be ok. |
Ladislav 16-Jan-2012 [4103] | You can also check http://www.rebol.org/view-script.r?script=printf.r |
Endo 17-Jan-2012 [4104x2] | I've also put a format-number function that I use on Checklists on Altme. It works well for me. >> format-number 1 / 3 == "0.333333333333333" |
Under Checklists / Code Snippets. | |
Marco 18-Jan-2012 [4106] | The function by Nick is a little slow since I have a lot of numbers. This is faster but not very fast: format-decimal: func [x /local e q] [ x: form x if find x "E-" [ e: to-integer next next q: find x "E-" clear q remove find x "." if #"-" = first x [x: next x] insert/dup x "0" e insert next x "." ] head x ] The idea from Ladislav is nice but I would like most a more "rebol" solution. |
Endo 18-Jan-2012 [4107] | Scientific notation of numbers and automatic reformating time! values (00:00:00 --> 0:00) are the most annoying parts of REBOL for me. It would be more useful if it doesn't happen when FORMing. |
Evgeniy Philippov 23-Jan-2012 [4108] | Is there a possibility for cyrillic/Russian at Rebol/View except for pixelart drawing the characters? |
Kaj 23-Jan-2012 [4109x2] | In R3/View, but it's currently buggy and limited to Windows and Amiga |
Since you'd have to switch languages anyway, you could also consider Red with the GTK+ binding | |
Evgeniy Philippov 23-Jan-2012 [4111:last] | Uh. In Red, everything is possible with any bindings |
older | first |