Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
what's the purpose of IRB.conf[:CONTEXT_MODE] and/or TOPLEVEL_BINDING?
ghorner
5/21/2009 6:44:00 AM
Hi all,
I'm peering into irb's internals and am wondering what's the purpose
of IRB.conf[:CONTEXT_MODE]? I understand most of the ruby code but all
my googling has yet to bring up _anyone_ who uses this. Here is a link
to the beginning of it's implementation in irb:
http://github.com/akitaonrails/ruby191-stable-mirror/blob/c1a8d6cd2bd595ae3985edd2314f48d3d1a92188/lib/irb/worksp...
To summarize the implementation, IRB.conf[:CONTEXT_MODE] can be set to
one of 4 values: 0,1,2,3 (default is 3). Depending on the value, a
binding is created for use when evaluating a line in irb:
0: eval("proc{binding}.call", TOPLEVEL_BINDING ...)
1: creates a binding to a temporary file
2: thread friendly binding from an irb file
3: eval("def irb_binding; binding; end; irb_binding",
TOPLEVEL_BINDING ...)
Right off the bat, I don't know the use cases for cases 1 and 2. Is a
binding in a temporary file perhaps more secure? As for cases 0 and 3
rue on irc helped me understand the difference between them: case 0
the binding has access to local variables of TOPLEVEL_BINDING while
case 3 doesn't. But when I grep in ruby's source, the only mention of
TOPLEVEL_BINDING is in irb libs and erb.rb. So of what use is case 0
when almost no libraries use TOPLEVEL_BINDING and when the binding
could just very well be TOPLEVEL_BINDING itself?
Thoughts, insights?
Thanks,
Gabriel
1 Answer
ghorner
5/22/2009 6:17:00 PM
0
On May 21, 2:43 am, ghorner <gabriel.hor...@gmail.com> wrote:
> Hi all,
> I'm peering into irb's internals and am wondering what's the purpose
> of IRB.conf[:CONTEXT_MODE]? I understand most of the ruby code but all
> my googling has yet to bring up _anyone_ who uses this. Here is a link
> to the beginning of it's implementation in irb:
http://github.com/akitaonrails/ruby191-stable-mirror/blob/c...
...
>
> To summarize the implementation, IRB.conf[:CONTEXT_MODE] can be set to
> one of 4 values: 0,1,2,3 (default is 3). Depending on the value, a
> binding is created for use when evaluating a line in irb:
>
> 0: eval("proc{binding}.call", TOPLEVEL_BINDING ...)
> 1: creates a binding to a temporary file
> 2: thread friendly binding from an irb file
> 3: eval("def irb_binding; binding; end; irb_binding",
> TOPLEVEL_BINDING ...)
>
> Right off the bat, I don't know the use cases for cases 1 and 2. Is a
> binding in a temporary file perhaps more secure? As for cases 0 and 3
> rue on irc helped me understand the difference between them: case 0
> the binding has access to local variables of TOPLEVEL_BINDING while
> case 3 doesn't. But when I grep in ruby's source, the only mention of
> TOPLEVEL_BINDING is in irb libs and erb.rb. So of what use is case 0
> when almost no libraries use TOPLEVEL_BINDING and when the binding
> could just very well be TOPLEVEL_BINDING itself?
>
> Thoughts, insights?
> Thanks,
> Gabriel
I know some of irb's confusing, but is this really that confusing? Any
takers?
Gabriel
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
what's the purpose of IRB.conf[:CONTEXT_MODE] and/or TOPLEVEL_BINDING?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password