4 ms·
> I would personally call any method that Kernel responds to a "global" method. But it's not really "global," because it's not actually accessible "everywhere,
by ryandv 2y ago
> I would personally call any method that Kernel responds to a "global" method.
But it's not really "global," because it's not actually accessible "everywhere," and so it's a poor choice of terminology. From the BasicObject docs [0]:
BasicObject does not include Kernel (for methods like puts)
Illustrated below:
class Quux < BasicObject
def initialize
puts "hello"
end
end
Quux.new # NoMethodError (undefined method `puts' for #<Quux:0x0000000134989768>)
Better not to use shady terminology and to dive into the actual mechanisms and details behind how things actually work. Imprecise terminology leads to inaccurate mental models of what the system is actually doing.
Though maybe you could argue that methods on `BasicObject` are "global" in a way.
[0] https://ruby-doc.org/3.3.5/BasicObject.html https://ruby-doc.org/3.3.5/BasicObject.html
- TZubiri 2y agoI presume this means that there are scenarios where Kernel doesn't exist. In scenarios where Kernel exists, it is global. For example if running on an embedded system without a Kernel. The fact that the kernel is globally accessible to all objects is not a criticism of the language, you can't make up purity where it doesn't exist, as much as we may desire our programs are not ethereal math incantations that exist on Plato's world of ideals, and sometimes they depend on the Kernel which is the same for the whole process, (Duh). I didn't even get into CPU defined functions like addition, and assignment. How would you argue that + is not a global function? If you want to argue that it can be overloaded, recall that we speak of the default function in a read only capacity.