2016-09-12 14 views
5

Điều gì sai với mã này?const fns là một tính năng không ổn định khi sử dụng AtomicUsize :: new

use std::sync::atomic::AtomicUsize; 

static mut counter: AtomicUsize = AtomicUsize::new(0); 

fn main() {} 

tôi nhận được lỗi này:

error: const fns are an unstable feature 
--> src/main.rs:3:35 
    |> 
3 |> static mut counter: AtomicUsize = AtomicUsize::new(0); 
    |>         ^^^^^^^^^^^^^^^^^^^ 
help: in Nightly builds, add `#![feature(const_fn)]` to the crate attributes to enable 

Các tài liệu đề cập đến rằng kích thước int nguyên tử khác là không ổn định, nhưng AtomicUsize dường như ổn định.

Mục đích của việc này là để có được bộ đếm nguyên tử cho mỗi quá trình.

+3

Nguyên tử không cần và không nên ở trong 'mấu tĩnh ', nó phải ở dạng' tĩnh' đơn giản. Các hoạt động nguyên tử sử dụng tính đột biến nội tại khi sửa đổi chúng. Bạn thấy rằng tất cả các phương thức đột biến của chúng đều sử dụng '& self' làm đối số đầu tiên (tham chiếu được chia sẻ). – bluss

+1

À vâng có ý nghĩa, bởi vì họ không cần phải dựa vào người kiểm tra tiền vay. – Timmmm

Trả lời

9

Có, bạn không thể gọi các chức năng nằm ngoài chức năng của Rust 1.10. Điều đó đòi hỏi một tính năng chưa ổn định: đánh giá hàm liên tục.

Bạn có thể khởi tạo một biến nguyên tử về không sử dụng ATOMIC_USIZE_INIT (hoặc các biến thể thích hợp):

use std::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT}; 

static COUNTER: AtomicUsize = ATOMIC_USIZE_INIT; 

fn main() {} 

Như bluss points out, không có cần phải thực hiện này có thể thay đổi. Và khi trình biên dịch chỉ ra, các giá trị staticconst phải ở trong SCREAMING_SNAKE_CASE.

Các vấn đề liên quan