File Manager

Current Path : /usr/lib/ruby/gems/3.0.0/gems/rbs-1.0.4/stdlib/fiber/0/
Upload File :
Current File : //usr/lib/ruby/gems/3.0.0/gems/rbs-1.0.4/stdlib/fiber/0/fiber.rbs

# Fibers are primitives for implementing light weight cooperative concurrency in
# Ruby. Basically they are a means of creating code blocks that can be paused
# and resumed, much like threads. The main difference is that they are never
# preempted and that the scheduling must be done by the programmer and not the
# VM.
#
# As opposed to other stackless light weight concurrency models, each fiber
# comes with a stack.  This enables the fiber to be paused from deeply nested
# function calls within the fiber block.  See the ruby(1) manpage to configure
# the size of the fiber stack(s).
#
# When a fiber is created it will not run automatically. Rather it must be
# explicitly asked to run using the Fiber#resume method. The code running inside
# the fiber can give up control by calling Fiber.yield in which case it yields
# control back to caller (the caller of the Fiber#resume).
#
# Upon yielding or termination the Fiber returns the value of the last executed
# expression
#
# For instance:
#
#     fiber = Fiber.new do
#       Fiber.yield 1
#       2
#     end
#
#     puts fiber.resume
#     puts fiber.resume
#     puts fiber.resume
#
# *produces*
#
#     1
#     2
#     FiberError: dead fiber called
#
# The Fiber#resume method accepts an arbitrary number of parameters, if it is
# the first call to #resume then they will be passed as block arguments.
# Otherwise they will be the return value of the call to Fiber.yield
#
# Example:
#
#     fiber = Fiber.new do |first|
#       second = Fiber.yield first + 2
#     end
#
#     puts fiber.resume 10
#     puts fiber.resume 1_000_000
#     puts fiber.resume "The fiber will be dead before I can cause trouble"
#
# *produces*
#
#     12
#     1000000
#     FiberError: dead fiber called
#
class Fiber
  # Returns the current fiber. You need to `require 'fiber'` before using this
  # method. If you are not running in the context of a fiber this method will
  # return the root fiber.
  #
  def self.current: () -> Fiber

  public

  # Returns true if the fiber can still be resumed (or transferred to). After
  # finishing execution of the fiber block this method will always return false.
  # You need to `require 'fiber'` before using this method.
  #
  def alive?: () -> bool

  # Transfer control to another fiber, resuming it from where it last stopped or
  # starting it if it was not resumed before. The calling fiber will be suspended
  # much like in a call to Fiber.yield. You need to `require 'fiber'` before using
  # this method.
  #
  # The fiber which receives the transfer call is treats it much like a resume
  # call. Arguments passed to transfer are treated like those passed to resume.
  #
  # You cannot call `resume` on a fiber that has been transferred to. If you call
  # `transfer` on a fiber, and later call `resume` on the the fiber, a
  # `FiberError` will be raised. Once you call `transfer` on a fiber, the only way
  # to resume processing the fiber is to call `transfer` on it again.
  #
  # Example:
  #
  #     fiber1 = Fiber.new do
  #       puts "In Fiber 1"
  #       Fiber.yield
  #       puts "In Fiber 1 again"
  #     end
  #
  #     fiber2 = Fiber.new do
  #       puts "In Fiber 2"
  #       fiber1.transfer
  #       puts "Never see this message"
  #     end
  #
  #     fiber3 = Fiber.new do
  #       puts "In Fiber 3"
  #     end
  #
  #     fiber2.resume
  #     fiber3.resume
  #     fiber1.resume rescue (p $!)
  #     fiber1.transfer
  #
  # *produces*
  #
  #     In Fiber 2
  #     In Fiber 1
  #     In Fiber 3
  #     #<FiberError: cannot resume transferred Fiber>
  #     In Fiber 1 again
  #
  def transfer: (*untyped) -> untyped
end

File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com