mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
946e5cc668
``` $ benchmark-driver -v --rbenv 'before;after;before --jit;after --jit' benchmark/mjit_class.yml --repeat-count=4 before: ruby 2.8.0dev (2020-06-23T07:09:54Z master37a2e48d76
) [x86_64-linux] after: ruby 2.8.0dev (2020-06-23T17:29:56Z inline-class0ff147c007
) [x86_64-linux] before --jit: ruby 2.8.0dev (2020-06-23T07:09:54Z master37a2e48d76
) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-06-23T17:29:56Z inline-class0ff147c007
) +JIT [x86_64-linux] Calculating ------------------------------------- before after before --jit after --jit mjit_class(self) 39.219M 40.060M 53.502M 69.202M i/s - 40.000M times in 1.019915s 0.998495s 0.747631s 0.578021s mjit_class(1) 39.567M 41.242M 52.100M 68.895M i/s - 40.000M times in 1.010935s 0.969885s 0.767749s 0.580591s Comparison: mjit_class(self) after --jit: 69201690.7 i/s before --jit: 53502336.4 i/s - 1.29x slower after: 40060289.1 i/s - 1.73x slower before: 39218939.2 i/s - 1.76x slower mjit_class(1) after --jit: 68895358.6 i/s before --jit: 52100353.0 i/s - 1.32x slower after: 41241993.6 i/s - 1.67x slower before: 39567314.0 i/s - 1.74x slower ```
74 lines
2.4 KiB
Ruby
74 lines
2.4 KiB
Ruby
module Kernel
|
|
#
|
|
# call-seq:
|
|
# obj.class -> class
|
|
#
|
|
# Returns the class of <i>obj</i>. This method must always be called
|
|
# with an explicit receiver, as #class is also a reserved word in
|
|
# Ruby.
|
|
#
|
|
# 1.class #=> Integer
|
|
# self.class #=> Object
|
|
#--
|
|
# Equivalent to \c Object\#class in Ruby.
|
|
#
|
|
# Returns the class of \c obj, skipping singleton classes or module inclusions.
|
|
#++
|
|
#
|
|
def class
|
|
Primitive.attr! 'inline'
|
|
Primitive.cexpr! 'rb_obj_class(self)'
|
|
end
|
|
|
|
#
|
|
# call-seq:
|
|
# obj.clone(freeze: nil) -> an_object
|
|
#
|
|
# Produces a shallow copy of <i>obj</i>---the instance variables of
|
|
# <i>obj</i> are copied, but not the objects they reference.
|
|
# #clone copies the frozen value state of <i>obj</i>, unless the
|
|
# +:freeze+ keyword argument is given with a false or true value.
|
|
# See also the discussion under Object#dup.
|
|
#
|
|
# class Klass
|
|
# attr_accessor :str
|
|
# end
|
|
# s1 = Klass.new #=> #<Klass:0x401b3a38>
|
|
# s1.str = "Hello" #=> "Hello"
|
|
# s2 = s1.clone #=> #<Klass:0x401b3998 @str="Hello">
|
|
# s2.str[1,4] = "i" #=> "i"
|
|
# s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
|
|
# s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">"
|
|
#
|
|
# This method may have class-specific behavior. If so, that
|
|
# behavior will be documented under the #+initialize_copy+ method of
|
|
# the class.
|
|
#
|
|
def clone(freeze: nil)
|
|
Primitive.rb_obj_clone2(freeze)
|
|
end
|
|
|
|
module_function
|
|
|
|
#
|
|
# call-seq:
|
|
# Float(arg, exception: true) -> float or nil
|
|
#
|
|
# Returns <i>arg</i> converted to a float. Numeric types are
|
|
# converted directly, and with exception to String and
|
|
# <code>nil</code> the rest are converted using
|
|
# <i>arg</i><code>.to_f</code>. Converting a String with invalid
|
|
# characters will result in a ArgumentError. Converting
|
|
# <code>nil</code> generates a TypeError. Exceptions can be
|
|
# suppressed by passing <code>exception: false</code>.
|
|
#
|
|
# Float(1) #=> 1.0
|
|
# Float("123.456") #=> 123.456
|
|
# Float("123.0_badstring") #=> ArgumentError: invalid value for Float(): "123.0_badstring"
|
|
# Float(nil) #=> TypeError: can't convert nil into Float
|
|
# Float("123.0_badstring", exception: false) #=> nil
|
|
#
|
|
def Float(arg, exception: true)
|
|
Primitive.rb_f_float(arg, exception)
|
|
end
|
|
end
|