From: ghorner Date: 2009-05-22T13:27:18+09:00 Subject: what's the purpose of IRB.conf[:CONTEXT_MODE] and/or TOPLEVEL_BINDING? 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/workspace.rb#L21 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