• A
    std: Improve non-task-based usage · 0c7c93b8
    Alex Crichton 提交于
    A few notable improvements were implemented to cut down on the number of aborts
    triggered by the standard library when a local task is not found.
    
    * Primarily, the unwinding functionality was restructured to support an unsafe
      top-level function, `try`. This function invokes a closure, capturing any
      failure which occurs inside of it. The purpose of this function is to be as
      lightweight of a "try block" as possible for rust, intended for use when the
      runtime is difficult to set up.
    
      This function is *not* meant to be used by normal rust code, nor should it be
      consider for use with normal rust code.
    
    * When invoking spawn(), a `fail!()` is triggered rather than an abort.
    
    * When invoking LocalIo::borrow(), which is transitively called by all I/O
      constructors, None is returned rather than aborting to indicate that there is
      no local I/O implementation.
    
    * Invoking get() on a TLD key will return None if no task is available
    
    * Invoking replace() on a TLD key will fail if no task is available.
    
    A test case was also added showing the variety of things that you can do without
    a runtime or task set up now. In general, this is just a refactoring to abort
    less quickly in the standard library when a local task is not found.
    0c7c93b8
local_data.rs 14.7 KB