All the Rust features


#1

After @tamird recently fixed the tidy script to detect language features, I was curious to see them all. So here’s the list of every feature defined by Rust. It’s pretty neat that the build system can do this.

It would be even neater if there was a tool that scraped the git history, issue tracker and RFC tracker, and the docs, to produce a set of links related to each of these.

$ python2 src/bootstrap/bootstrap.py  --step check-tidy --stage 0
  • abi_sysv64 lang unstable 1.13.0
  • abi_vectorcall lang unstable 1.7.0
  • addr_parse_error_error lib stable 1.4.0
  • advanced_slice_patterns lang unstable 1.0.0
  • alloc lib unstable None
  • alloc_jemalloc lib unstable None
  • alloc_system lib unstable None
  • allocator lang unstable 1.0.0
  • allow_internal_unstable lang unstable 1.0.0
  • append lib stable 1.4.0
  • arc_counts lib unstable None
  • arc_unique lib stable 1.4.0
  • arc_weak lib stable 1.4.0
  • array_borrow lib stable 1.4.0
  • array_default lib stable 1.4.0
  • as_unsafe_cell lib unstable None
  • ascii lib stable 1.9.0
  • asm lang unstable 1.0.0
  • assert_ne lib stable 1.12.0
  • associated_consts lang unstable 1.0.0
  • associated_type_defaults lang unstable 1.2.0
  • associated_types lang stable 1.0.0
  • atomic_access lib unstable None
  • atomic_debug lib stable 1.3.0
  • attr_literals lang unstable 1.13.0
  • augmented_assignments lang stable 1.8.0
  • binary_heap_append lib stable 1.11.0
  • binary_heap_extras lib unstable None
  • binary_heap_extras_15 lib stable 1.5.0
  • binary_heap_peek_mut lib stable 1.12.0
  • binaryheap_debug lib stable 1.4.0
  • borrow_state lib unstable None
  • box_error lib stable 1.7.0
  • box_heap lib unstable None
  • box_patterns lang unstable 1.0.0
  • box_raw lib stable 1.4.0
  • box_slice_clone lib stable 1.3.0
  • box_str lib stable 1.4.0
  • box_syntax lang unstable 1.0.0
  • braced_empty_structs lang stable 1.8.0
  • btree_append lib stable 1.11.0
  • btree_drop lib stable 1.7.0
  • btree_range lib unstable None
  • btree_split_off lib stable 1.11.0
  • build_hasher lib stable 1.7.0
  • c_void_variant lib unstable None
  • catch_unwind lib stable 1.9.0
  • cell_as_ptr lib stable 1.12.0
  • cell_eq lib stable 1.2.0
  • cell_extras lib unstable None
  • cell_from lib stable 1.12.0
  • cell_get_mut lib stable 1.11.0
  • cell_map lib stable 1.8.0
  • cell_ord lib stable 1.10.0
  • cfg_target_feature lang unstable 1.4.0
  • cfg_target_has_atomic lang unstable 1.9.0
  • cfg_target_thread_local lang unstable 1.7.0
  • cfg_target_vendor lang unstable 1.5.0
  • chain_bufread lib stable 1.9.0
  • char_convert lib stable 1.13.0
  • char_escape_debug lib unstable None
  • char_from_unchecked lib stable 1.5.0
  • clone_from_slice lib stable 1.7.0
  • cmp_os_str lib stable 1.8.0
  • cmp_path lib stable 1.8.0
  • coerce_unsized lib unstable None
  • collection_placement lib unstable None
  • collections lib unstable None
  • collections_bound lib unstable None
  • collections_range lib unstable None
  • compiler_builtins lang unstable 1.13.0
  • compiler_builtins_lib lib unstable None
  • concat_idents lang unstable 1.0.0
  • concat_idents_macro lib unstable None
  • condvar_default lib stable 1.9.0
  • conservative_impl_trait lang unstable 1.12.0
  • const_fn lang unstable 1.2.0
  • const_indexing lang unstable 1.4.0
  • copy_from_slice lib stable 1.9.0
  • core lib stable 1.6.0
  • core_char lib stable 1.2.0
  • core_char_ext lib unstable None
  • core_float lib unstable None
  • core_impl_debug lib stable 1.9.0
  • core_intrinsics lib unstable None
  • core_panic lib unstable None
  • core_prelude lib stable 1.4.0
  • core_private_bignum lib unstable None
  • core_private_diy_float lib unstable None
  • core_slice_ext lib unstable None
  • core_str_ext lib unstable None
  • cow_add lib stable 1.13.0
  • cow_from_path lib stable 1.6.0
  • cow_from_vec lib stable 1.7.0
  • cow_os_str_as_ref_path lib stable 1.8.0
  • cow_str_from_iter lib stable 1.12.0
  • cstr_borrow lib stable 1.3.0
  • cstr_debug lib stable 1.3.0
  • cstr_default lib stable 1.10.0
  • cstr_from_bytes lib stable 1.10.0
  • cstr_memory lib stable 1.4.0
  • cstr_to_str lib stable 1.4.0
  • cstring_asref lib stable 1.7.0
  • cstring_drop lib stable 1.13.0
  • cstring_into lib stable 1.7.0
  • cursor_box_slice lib stable 1.5.0
  • custom_attribute lang unstable 1.0.0
  • custom_derive lang unstable 1.0.0
  • debug_btree_map lib stable 1.12.0
  • debug_builders lib stable 1.2.0
  • debug_hash_map lib stable 1.12.0
  • dec2flt lib unstable None
  • decode_utf16 lib stable 1.9.0
  • decode_utf8 lib unstable None
  • dedup_by lib unstable None
  • default lib stable 1.11.0
  • default_type_parameter_fallback lang unstable 1.3.0
  • default_type_params lang stable 1.0.0
  • deg_rad_conversions lib stable 1.7.0
  • deprecated lang stable 1.9.0
  • deque_extras lib unstable None
  • deque_extras_15 lib stable 1.5.0
  • derefmut_for_string lib stable 1.2.0
  • derive_clone_copy lib unstable None
  • derive_eq lib unstable None
  • dir_builder lib stable 1.6.0
  • dir_entry_debug lib stable 1.13.0
  • dir_entry_ext lib stable 1.1.0
  • discriminant_value lib unstable None
  • dotdot_in_tuple_patterns lang unstable 1.10.0
  • double_ended_skip_iterator lib stable 1.8.0
  • downgraded_weak lib stable 1.10.0
  • drain lib stable 1.6.0
  • drop_in_place lib stable 1.8.0
  • drop_types_in_const lang unstable 1.9.0
  • dropck_eyepatch lang unstable 1.10.0
  • dropck_parametricity lang unstable 1.3.0
  • duration lib stable 1.3.0
  • duration_checked_ops lib unstable None
  • encode_utf16 lib stable 1.8.0
  • enumset lib unstable None
  • env lib stable 1.0.0
  • env_iterators lib stable 1.11.0
  • error_downcast lib stable 1.3.0
  • error_type_id lib unstable None
  • exact_size_escape lib stable 1.11.0
  • exact_size_is_empty lib unstable None
  • exit_status_from lib stable 1.12.0
  • expand_open_options2 lib stable 1.9.0
  • extend_ref lib stable 1.2.0
  • extend_string lib stable 1.4.0
  • extended_compare_and_swap lib stable 1.10.0
  • f32_deg_rad_conversions lib stable 1.7.0
  • fd lib unstable None
  • fd_read lib unstable None
  • field_init_shorthand lang unstable 1.14.0
  • file_offset lib unstable None
  • file_try_clone lib stable 1.9.0
  • file_type lib stable 1.1.0
  • file_type_ext lib stable 1.5.0
  • fixed_size_array lib unstable None
  • float_extras lib unstable None
  • flt2dec lib unstable None
  • fmt_error lib stable 1.11.0
  • fmt_flags lib stable 1.5.0
  • fmt_flags_align lib unstable None
  • fmt_internals lib unstable None
  • fmt_write_blanket_impl lib stable 1.4.0
  • fmt_write_char lib stable 1.1.0
  • fn_once_output lib stable 1.12.0
  • fn_traits lib unstable None
  • fnbox lib unstable None
  • fnptr_impls lib stable 1.4.0
  • formatter_write lib stable 1.2.0
  • from_for_ptrs lib stable 1.6.0
  • from_raw_os lib stable 1.1.0
  • from_slice_v4 lib stable 1.9.0
  • fs_canonicalize lib stable 1.5.0
  • fs_ext lib stable 1.1.0
  • fs_time lib stable 1.10.0
  • fundamental lang unstable 1.0.0
  • fused lib unstable None
  • future_atomic_orderings lib unstable None
  • generic_param_attrs lang unstable 1.11.0
  • get_type_id lib unstable None
  • globs lang stable 1.0.0
  • hash_extend_copy lib stable 1.4.0
  • hash_slice lib stable 1.3.0
  • hasher_write lib stable 1.3.0
  • hashmap_build_hasher lib stable 1.7.0
  • hashmap_default_hasher lib stable 1.13.0
  • hashmap_public_hasher lib stable 1.9.0
  • heap_api lib unstable None
  • if_let lang stable 1.0.0
  • import_shadowing lang unstable 1.0.0
  • inclusive_range lib unstable None
  • inclusive_range_syntax lang unstable 1.7.0
  • insert_str lib unstable None
  • int_error_internals lib unstable None
  • integer_atomics lib unstable None
  • into_raw_os lib stable 1.4.0
  • intrinsics lang unstable 1.0.0
  • io lib unstable None
  • io_error_from_errorkind lib stable 1.14.0
  • io_error_inner lib stable 1.3.0
  • io_error_internals lib unstable None
  • io_invalid_data lib stable 1.2.0
  • io_take_into_inner lib unstable None
  • ip lib unstable None
  • ip_17 lib stable 1.7.0
  • ip_addr lib stable 1.7.0
  • ip_shared lib stable 1.12.0
  • ip_u32 lib stable 1.1.0
  • ipaddr_checker lib unstable None
  • ipv6_from_octets lib stable 1.9.0
  • ipv6_to_octets lib stable 1.12.0
  • is_char_boundary lib stable 1.9.0
  • issue_5723_bootstrap lang stable 1.0.0
  • item_like_imports lang unstable 1.13.0
  • iter_arith lib stable 1.11.0
  • iter_arith_traits lib stable 1.12.0
  • iter_cloned lib stable 1.1.0
  • iter_cmp_by_key lib stable 1.6.0
  • iter_empty lib stable 1.2.0
  • iter_max_by lib unstable None
  • iter_min_by lib unstable None
  • iter_once lib stable 1.2.0
  • iter_order lib stable 1.5.0
  • iter_to_slice lib stable 1.4.0
  • lang_items lang unstable 1.0.0
  • libstd_io_internals lib unstable None
  • libstd_sys_internals lib unstable None
  • libstd_thread_internals lib unstable None
  • link_args lang unstable 1.0.0
  • link_llvm_intrinsics lang unstable 1.0.0
  • linkage lang unstable 1.0.0
  • linked_from lang unstable 1.3.0
  • linked_list_contains lib stable 1.12.0
  • linked_list_extras lib unstable None
  • log_syntax lang unstable 1.0.0
  • lookup_host lib unstable None
  • lossless_prim_conv lib stable 1.5.0
  • macro_reexport lang unstable 1.0.0
  • macro_rules lang stable 1.0.0
  • main lang unstable 1.0.0
  • managed_boxes lang unstable 1.0.0
  • map_entry_keys lib stable 1.10.0
  • map_entry_recover_keys lib unstable None
  • map_entry_recover_keys2 lib stable 1.12.0
  • map_values_mut lib stable 1.10.0
  • metadata_ext lib stable 1.1.0
  • metadata_ext2 lib stable 1.8.0
  • mpsc_debug lib stable 1.7.0
  • mpsc_recv_timeout lib stable 1.12.0
  • mpsc_select lib unstable None
  • mut_slice_default lib stable 1.5.0
  • mutex_default lib stable 1.9.0
  • mutex_get_mut lib stable 1.6.0
  • mutex_into_inner lib stable 1.6.0
  • naked_functions lang unstable 1.9.0
  • needs_allocator lang unstable 1.4.0
  • needs_panic_runtime lang unstable 1.10.0
  • negate_unsigned lang unstable 1.0.0
  • net2_mutators lib stable 1.9.0
  • never_type lang unstable 1.13.0
  • never_type_impls lib unstable None
  • no_core lang unstable 1.3.0
  • no_debug lang unstable 1.5.0
  • no_panic_abs lib stable 1.13.0
  • no_std lang stable 1.6.0
  • non_ascii_idents lang unstable 1.0.0
  • nonzero lib unstable None
  • num_wrapping lib stable 1.2.0
  • omit_gdb_pretty_printer_section lang unstable 1.5.0
  • on_unimplemented lang unstable 1.0.0
  • once_new lib stable 1.2.0
  • once_poison lib unstable None
  • oom lib unstable None
  • op_assign_traits lib stable 1.8.0
  • open_options_ext lib stable 1.10.0
  • opt_out_copy lang unstable 1.0.0
  • optin_builtin_traits lang unstable 1.0.0
  • option_from lib stable 1.12.0
  • option_iter lib stable 1.4.0
  • ordering_chaining lib unstable None
  • os lib stable 1.0.0
  • osstring_default lib stable 1.9.0
  • osstring_simple_functions lib stable 1.9.0
  • panic_abort lib unstable None
  • panic_hooks lib stable 1.10.0
  • panic_runtime lang unstable 1.10.0
  • panic_unwind lib unstable None
  • park_timeout lib stable 1.4.0
  • partialeq_path lib stable 1.6.0
  • path_components_debug lib stable 1.13.0
  • path_ext lib stable 1.5.0
  • path_into_iter lib stable 1.6.0
  • path_iter_debug lib stable 1.13.0
  • path_strip_prefix lib stable 1.7.0
  • pattern lib unstable None
  • placement_in lib unstable None
  • placement_in_syntax lang unstable 1.0.0
  • placement_new_protocol lib unstable None
  • platform_intrinsics lang unstable 1.4.0
  • plugin lang unstable 1.0.0
  • plugin_registrar lang unstable 1.0.0
  • prelude_import lang unstable 1.2.0
  • print lib unstable None
  • proc_macro lang unstable 1.13.0
  • proc_macro_internals lib unstable None
  • proc_macro_lib lib unstable None
  • process lib stable 1.0.0
  • process_exec lib unstable None
  • process_exec2 lib stable 1.9.0
  • process_extensions lib stable 1.2.0
  • process_id lib stable 1.3.0
  • process_output_debug lib stable 1.7.0
  • pthread_t lib stable 1.8.0
  • ptr_as_ref lib stable 1.9.0
  • ptr_eq lib unstable None
  • pub_restricted lang unstable 1.9.0
  • pushpop_unsafe lang unstable 1.2.0
  • quad_precision_float lang unstable 1.0.0
  • question_mark lang stable 1.14.0
  • question_mark_carrier lib unstable None
  • quote lang unstable 1.0.0
  • rand lib unstable None
  • range_contains lib unstable None
  • raw lib unstable None
  • raw_ext lib stable 1.1.0
  • raw_os lib stable 1.1.0
  • rc_counts lib unstable None
  • rc_unique lib stable 1.4.0
  • rc_weak lib stable 1.4.0
  • rc_would_unwrap lib unstable None
  • read_exact lib stable 1.6.0
  • receiver_into_iter lib stable 1.1.0
  • receiver_try_iter lib unstable None
  • reflect lang unstable 1.0.0
  • reflect_marker lib unstable None
  • relaxed_adts lang unstable 1.12.0
  • rename_connect_to_join lib stable 1.3.0
  • repeat_str lib unstable None
  • repr_simd lang unstable 1.4.0
  • result_expect lib stable 1.4.0
  • result_iter lib stable 1.4.0
  • result_unwrap_or_default lib unstable None
  • resume_unwind lib stable 1.9.0
  • rt lib unstable None
  • rust1 lib stable 1.0.0
  • rustc_attrs lang unstable 1.0.0
  • rustc_diagnostic_macros lang unstable 1.0.0
  • rustc_private lib unstable None
  • rustdoc lib unstable None
  • rw_lock_default lib stable 1.9.0
  • rwlock_get_mut lib stable 1.6.0
  • rwlock_into_inner lib stable 1.6.0
  • set_permissions lib stable 1.1.0
  • set_recovery lib stable 1.9.0
  • set_stdio lib unstable None
  • shared lib unstable None
  • simd lang unstable 1.0.0
  • simd_ffi lang unstable 1.0.0
  • sip_hash_13 lib unstable None
  • slice_binary_search_by_key lib stable 1.10.0
  • slice_concat_ext lib unstable None
  • slice_iter_as_ref lib stable 1.12.0
  • slice_patterns lang unstable 1.0.0
  • slice_sort_by_key lib stable 1.7.0
  • slice_splits lib stable 1.5.0
  • slice_to_socket_addrs lib stable 1.8.0
  • slicing_syntax lang stable 1.0.0
  • smart_ptr_as_ref lib stable 1.5.0
  • sockaddr_checker lib unstable None
  • sockaddr_setters lib stable 1.9.0
  • socket_addr_from_str lib stable 1.5.0
  • socket_timeout lib stable 1.4.0
  • specialization lang unstable 1.7.0
  • split_off lib stable 1.4.0
  • split_whitespace lib stable 1.1.0
  • staged_api lang unstable 1.0.0
  • start lang unstable 1.0.0
  • static_in_const lang unstable 1.13.0
  • static_recursion lang unstable 1.3.0
  • std_panic lib stable 1.9.0
  • step_by lib unstable None
  • step_trait lib unstable None
  • stmt_expr_attributes lang unstable 1.6.0
  • str_escape lib unstable None
  • str_internals lib unstable None
  • str_match_indices lib stable 1.5.0
  • str_matches lib stable 1.2.0
  • str_parse_error lib stable 1.5.0
  • str_parse_error2 lib stable 1.8.0
  • str_replacen lib unstable None
  • str_slice_mut lib stable 1.5.0
  • str_split_at lib stable 1.4.0
  • str_to_string_specialization lib stable 1.9.0
  • string_as_str lib stable 1.7.0
  • string_box_error lib stable 1.7.0
  • string_from_cow_str lib stable 1.14.0
  • stringaddassign lib stable 1.12.0
  • strip_prefix lib stable 1.7.0
  • struct_inherit lang unstable 1.0.0
  • struct_variant lang stable 1.0.0
  • structural_match lang unstable 1.8.0
  • symlink lib stable 1.1.0
  • symlink_metadata lib stable 1.1.0
  • sync_poison lib stable 1.2.0
  • test lib unstable None
  • test_accepted_feature lang stable 1.0.0
  • test_removed_feature lang unstable 1.0.0
  • thread_extensions lib stable 1.9.0
  • thread_id lib unstable None
  • thread_local lang unstable 1.0.0
  • thread_local_internals lib unstable None
  • thread_local_state lib unstable None
  • thread_sleep lib stable 1.4.0
  • time lib stable 1.3.0
  • time2 lib stable 1.8.0
  • time_augmented_assignment lib stable 1.9.0
  • trace_macros lang unstable 1.0.0
  • try_borrow lib stable 1.13.0
  • try_from lib unstable None
  • tuple_indexing lang stable 1.0.0
  • type_ascription lang unstable 1.6.0
  • type_macros lang stable 1.13.0
  • unboxed_closures lang unstable 1.0.0
  • unicode lib unstable None
  • unicode_case_mapping lib stable 1.2.0
  • unique lib unstable None
  • unix_socket lib stable 1.10.0
  • unmarked_api lang unstable 1.0.0
  • unsafe_cell_default lib stable 1.9.0
  • unsafe_no_drop_flag lang unstable 1.0.0
  • unsize lib unstable None
  • untagged_unions lang unstable 1.13.0
  • unwind_attributes lang unstable 1.4.0
  • unwind_safe_atomic_refs lib stable 1.14.0
  • unwind_safe_lock_refs lib stable 1.12.0
  • update_panic_count lib unstable None
  • utf8_error lib stable 1.5.0
  • vec_as_mut lib stable 1.5.0
  • vec_as_slice lib stable 1.7.0
  • vec_deque_contains lib stable 1.12.0
  • vec_deque_retain lib stable 1.4.0
  • vec_extend_from_slice lib stable 1.6.0
  • vec_from_cow_slice lib stable 1.14.0
  • vec_into_iter_as_slice lib unstable None
  • vec_into_iter_clone lib stable 1.8.0
  • vec_intoiter_debug lib stable 1.13.0
  • vec_resize lib stable 1.5.0
  • vecdeque_vec_conversions lib stable 1.10.0
  • visible_private_types lang unstable 1.0.0
  • volatile lib stable 1.9.0
  • wait_timeout lib stable 1.5.0
  • while_let lang stable 1.0.0
  • windows_c lib unstable None
  • windows_handle lib unstable None
  • windows_net lib unstable None
  • windows_stdio lib unstable None
  • wrapping lib stable 1.7.0
  • wrapping_display lib stable 1.10.0
  • wrapping_div lib stable 1.3.0
  • wrapping_fmt lib stable 1.11.0
  • wrapping_impls lib stable 1.7.0
  • wrapping_neg lib stable 1.10.0
  • zero_one lib unstable None

The most used unstable features in Rust
The most used unstable features in Rust
#2

Reformatted as a table be more readable (feel free to copy the markdown and update your post):


#3

More stats:

Counts by area

Area | Count
---- | -----
lib  |  359
lang |  109

Counts by stability

Stability | Count
--------- | -----
   stable |  252
 unstable |  216

Counts by version

Version | Count
------- | -----
   None |  124   ====================
  1.0.0 |   62   ==========
  1.1.0 |   15   ==
  1.2.0 |   19   ===
  1.3.0 |   18   ==
  1.4.0 |   35   =====
  1.5.0 |   24   ===
  1.6.0 |   17   ==
  1.7.0 |   26   ====
  1.8.0 |   17   ==
  1.9.0 |   34   =====
 1.10.0 |   19   ===
 1.11.0 |   11   =
 1.12.0 |   22   ===
 1.13.0 |   19   ===
 1.14.0 |    6

#4

This is awesome.

…I may use it sometime in the next month to figure out which of those are documented in the reference as part of getting some motion on the “implementation” for RFC 1636.