Skip to content

alloc is incomplete #468

@nazar-pc

Description

@nazar-pc

I tried to compile some no-std code and it failed like this:

Details
error[E0432]: unresolved import `alloc::sync`
  --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/stdlib.rs:53:31
   |
53 |         pub(crate) use alloc::sync::*;
   |                               ^^^^ could not find `sync` in `alloc`

error[E0432]: unresolved imports `crate::stdlib::sync::Arc`, `crate::stdlib::sync::Weak`
   --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/dispatcher.rs:137:9
    |
137 |         Arc, Weak,
    |         ^^^  ^^^^ no `Weak` in `stdlib::no_std::sync`
    |         |
    |         no `Arc` in `stdlib::no_std::sync`
    |
    = help: consider importing one of these structs instead:
            crate::stdlib::rc::Weak
            alloc::rc::Weak

error[E0432]: unresolved import `crate::stdlib::sync::Arc`
 --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/subscriber.rs:7:5
  |
7 |     sync::Arc,
  |     ^^^^^^^^^ no `Arc` in `stdlib::no_std::sync`

   Compiling indexmap v2.3.0
error[E0599]: no method named `compare_exchange_weak` found for struct `AtomicBool` in the current scope
  --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/spin/mutex.rs:43:14
   |
41 |           while self
   |  _______________-
42 | |             .lock
43 | |             .compare_exchange_weak(false, true, Ordering::Acquire, Ordering::Relaxed)
   | |             -^^^^^^^^^^^^^^^^^^^^^ method not found in `AtomicBool`
   | |_____________|
   |

error[E0599]: no method named `compare_exchange` found for struct `AtomicBool` in the current scope
  --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/spin/mutex.rs:70:14
   |
68 |           if self
   |  ____________-
69 | |             .lock
70 | |             .compare_exchange(false, true, Ordering::Acquire, Ordering::Relaxed)
   | |             -^^^^^^^^^^^^^^^^ method not found in `AtomicBool`
   | |_____________|
   |

error[E0599]: no method named `compare_exchange` found for struct `AtomicUsize` in the current scope
  --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/spin/once.rs:77:39
   |
77 |             status = match self.state.compare_exchange(
   |                            -----------^^^^^^^^^^^^^^^^ method not found in `AtomicUsize`

error[E0599]: no method named `compare_exchange` found for struct `AtomicU8` in the current scope
   --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/callsite.rs:312:33
    |
312 |         match self.registration.compare_exchange(
    |               ------------------^^^^^^^^^^^^^^^^ method not found in `AtomicU8`

error[E0599]: no method named `compare_exchange` found for struct `AtomicUsize` in the current scope
    --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.7.1/src/bytes.rs:1206:10
     |
1204 |       if (*shared)
     |  ________-
1205 | |         .ref_cnt
1206 | |         .compare_exchange(1, 0, Ordering::AcqRel, Ordering::Relaxed)
     | |         -^^^^^^^^^^^^^^^^ method not found in `AtomicUsize`
     | |_________|
     |

error[E0599]: no method named `fetch_add` found for struct `AtomicUsize` in the current scope
    --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.7.1/src/bytes.rs:1282:38
     |
1282 |     let old_size = (*shared).ref_cnt.fetch_add(1, Ordering::Relaxed);
     |                                      ^^^^^^^^^ method not found in `AtomicUsize`

error[E0599]: no method named `compare_exchange` found for struct `AtomicPtr` in the current scope
   --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/callsite.rs:453:34
    |
453 |             match self.list_head.compare_exchange(
    |                   ---------------^^^^^^^^^^^^^^^^ method not found in `AtomicPtr<DefaultCallsite>`

error[E0599]: no method named `compare_exchange` found for reference `&AtomicPtr<()>` in the current scope
    --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.7.1/src/bytes.rs:1342:16
     |
1342 |     match atom.compare_exchange(ptr as _, shared as _, Ordering::AcqRel, Ordering::Acquire) {
     |                ^^^^^^^^^^^^^^^^ method not found in `&AtomicPtr<()>`

error[E0599]: no method named `fetch_sub` found for struct `AtomicUsize` in the current scope
    --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.7.1/src/bytes.rs:1370:23
     |
1370 |     if (*ptr).ref_cnt.fetch_sub(1, Ordering::Release) != 1 {
     |                       ^^^^^^^^^ method not found in `AtomicUsize`

error[E0599]: no method named `compare_exchange` found for struct `AtomicUsize` in the current scope
   --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/dispatcher.rs:308:10
    |
307 |       if GLOBAL_INIT
    |  ________-
308 | |         .compare_exchange(
    | |         -^^^^^^^^^^^^^^^^ method not found in `AtomicUsize`
    | |_________|
    |

error[E0599]: no method named `fetch_add` found for struct `AtomicUsize` in the current scope
    --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.7.1/src/bytes_mut.rs:1421:37
     |
1421 |     let old_size = (*ptr).ref_count.fetch_add(1, Ordering::Relaxed);
     |                                     ^^^^^^^^^ method not found in `AtomicUsize`

error[E0599]: no method named `fetch_sub` found for struct `AtomicUsize` in the current scope
    --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.7.1/src/bytes_mut.rs:1430:25
     |
1430 |     if (*ptr).ref_count.fetch_sub(1, Ordering::Release) != 1 {
     |                         ^^^^^^^^^ method not found in `AtomicUsize`

error[E0599]: no method named `swap` found for struct `AtomicUsize` in the current scope
   --> /home/nazar-pc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-core-0.1.32/src/metadata.rs:746:19
    |
746 |         MAX_LEVEL.swap(val, Ordering::AcqRel);
    |                   ^^^^ method not found in `AtomicUsize`

I have not found an issue that details what is already supported and what is not.

I'm also wondering whether enabling guest-std has any drawbacks? Enabling it while keeping no_std works and brings full alloc into the picture, but I suspect it may result in a different version of the code (at least from standard library point of view, not sure about jolt itslef) being compiled. Dependencies will still be compiled with no_std support though.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions