Skip to content

Document lang items #978

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed

Conversation

MikailBag
Copy link
Contributor

@MikailBag MikailBag commented Dec 1, 2020

I'm not sure where to put this page, selected the simplest place.

Copy link
Member

@jyn514 jyn514 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for writing it up! There's definitely useful info here, but I'm not sure the dev-guide is the right place for it.

Comment on lines 200 to 289
## List of all language items

This is a list of all language items in Rust along with where they are located in
the source code.

- Primitives
- `i8`: `libcore/num/mod.rs`
- `i16`: `libcore/num/mod.rs`
- `i32`: `libcore/num/mod.rs`
- `i64`: `libcore/num/mod.rs`
- `i128`: `libcore/num/mod.rs`
- `isize`: `libcore/num/mod.rs`
- `u8`: `libcore/num/mod.rs`
- `u16`: `libcore/num/mod.rs`
- `u32`: `libcore/num/mod.rs`
- `u64`: `libcore/num/mod.rs`
- `u128`: `libcore/num/mod.rs`
- `usize`: `libcore/num/mod.rs`
- `f32`: `libstd/f32.rs`
- `f64`: `libstd/f64.rs`
- `char`: `libcore/char.rs`
- `slice`: `liballoc/slice.rs`
- `str`: `liballoc/str.rs`
- `const_ptr`: `libcore/ptr.rs`
- `mut_ptr`: `libcore/ptr.rs`
- Runtime
- `start`: `libstd/rt.rs`
- `eh_personality`: `libpanic_unwind/emcc.rs` (EMCC)
- `eh_personality`: `libpanic_unwind/gcc.rs` (GNU)
- `eh_personality`: `libpanic_unwind/seh.rs` (SEH)
- `eh_catch_typeinfo`: `libpanic_unwind/emcc.rs` (EMCC)
- `panic`: `libcore/panicking.rs`
- `panic_bounds_check`: `libcore/panicking.rs`
- `panic_impl`: `libcore/panicking.rs`
- `panic_impl`: `libstd/panicking.rs`
- Allocations
- `owned_box`: `liballoc/boxed.rs`
- `exchange_malloc`: `liballoc/heap.rs`
- `box_free`: `liballoc/heap.rs`
- Operands
- `not`: `libcore/ops/bit.rs`
- `bitand`: `libcore/ops/bit.rs`
- `bitor`: `libcore/ops/bit.rs`
- `bitxor`: `libcore/ops/bit.rs`
- `shl`: `libcore/ops/bit.rs`
- `shr`: `libcore/ops/bit.rs`
- `bitand_assign`: `libcore/ops/bit.rs`
- `bitor_assign`: `libcore/ops/bit.rs`
- `bitxor_assign`: `libcore/ops/bit.rs`
- `shl_assign`: `libcore/ops/bit.rs`
- `shr_assign`: `libcore/ops/bit.rs`
- `deref`: `libcore/ops/deref.rs`
- `deref_mut`: `libcore/ops/deref.rs`
- `index`: `libcore/ops/index.rs`
- `index_mut`: `libcore/ops/index.rs`
- `add`: `libcore/ops/arith.rs`
- `sub`: `libcore/ops/arith.rs`
- `mul`: `libcore/ops/arith.rs`
- `div`: `libcore/ops/arith.rs`
- `rem`: `libcore/ops/arith.rs`
- `neg`: `libcore/ops/arith.rs`
- `add_assign`: `libcore/ops/arith.rs`
- `sub_assign`: `libcore/ops/arith.rs`
- `mul_assign`: `libcore/ops/arith.rs`
- `div_assign`: `libcore/ops/arith.rs`
- `rem_assign`: `libcore/ops/arith.rs`
- `eq`: `libcore/cmp.rs`
- `ord`: `libcore/cmp.rs`
- Functions
- `fn`: `libcore/ops/function.rs`
- `fn_mut`: `libcore/ops/function.rs`
- `fn_once`: `libcore/ops/function.rs`
- `generator_state`: `libcore/ops/generator.rs`
- `generator`: `libcore/ops/generator.rs`
- Opting out
- `unsafe_cell` (relaxes pointer provenance rules, allowing const-to-mut casts): `libcore/cell.rs`
- `manually_drop` (opts out of implicit destructor call): `libcore/mem/manually_drop.rs`
- Other
- `coerce_unsized`: `libcore/ops/unsize.rs`
- `drop`: `libcore/ops/drop.rs`
- `drop_in_place`: `libcore/ptr.rs`
- `clone`: `libcore/clone.rs`
- `copy`: `libcore/marker.rs`
- `send`: `libcore/marker.rs`
- `sized`: `libcore/marker.rs`
- `unsize`: `libcore/marker.rs`
- `sync`: `libcore/marker.rs`
- `phantom_data`: `libcore/marker.rs`
- `discriminant_kind`: `libcore/marker.rs`
- `freeze`: `libcore/marker.rs`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will very rapidly get out of date. Since you can easily rederive it with rg 'lang = "', I don't think it needs to go in the guide.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Also the filenames are wrong: it should be library/core/src/... not libcore/...)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it's better to link to https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/lang_items/enum.LangItem.html instead? That will always be up to date. It won't have the files in library but you can grep for those pretty easily.

@MikailBag
Copy link
Contributor Author

MikailBag commented Dec 1, 2020

Oh, I should have made it clear that I'm not author of this text (but of course I can try to improve it according to review). It's a bit actualized page from the unstable book.

@nikomatsakis proposed moving it to rustc-dev-guide. I think documentation of std implementation details fits rustc-dev-guide. Is there a better place?

@jyn514
Copy link
Member

jyn514 commented Dec 1, 2020

@spastorino do you have opinions on this?

@spastorino
Copy link
Member

@jyn514 I like the idea of having content about lang items in the guide and this is great but as you pointed out we may want to improve some things. I don't have any further comment than what you've already stated.

@jyn514 jyn514 added the S-waiting-on-author Status: this PR is waiting for additional action by the OP label Dec 6, 2020
- `generator_state`: `library/core/src/ops/generator.rs`
- `generator`: `library/core/src/ops/generator.rs`
- Opting out
- `unsafe_cell` (relaxes pointer provenance rules, allowing const-to-mut casts): `library/core/src/cell.rs`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Btw, you need to wrap this line.

@jyn514
Copy link
Member

jyn514 commented Apr 9, 2021

Hi @MikailBag, it's been a while - are you still planning to work on this?

Copy link
Contributor

@nikomatsakis nikomatsakis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems pretty useful to document indeed. I was expecting though to read more about how the code in the compiler can gain access to lang items and some of the patterns we have around that.

Another interesting angle: sometimes, when you have compiler errors in libcore, it's useful to create a standalone binary / library for reproducing the failure. That might be a good thing to mention or even use as the motivating case.

I think we should land this PR, but it'd be ideal to tweak it to have more of a "rustc-dev" angle.

@MikailBag
Copy link
Contributor Author

MikailBag commented Apr 13, 2021

Sorry for the huge delay.

I've just turned this PR into an MVP that only contains a small introduction and a list of lang items.

I think that examples should be better added (or ported from the Unstable Book) in follow-up PRs because my compiler knowledge (and English writing skills 😄) is not enough for writing a good example.

Comment on lines +15 to +19
Others can be overriden to achieve some
specific goals.

For example, later sections describe how to control
your binary startup or override panic implementation.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is no longer true.

Suggested change
Others can be overriden to achieve some
specific goals.
For example, later sections describe how to control
your binary startup or override panic implementation.
Others can be overridden to achieve some specific goals; for example, you can control your binary's entrypoint.

Comment on lines +29 to +30
- the traits in `std::marker` used to indicate types of
various kinds; lang items `send`, `sync` and `copy`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- the traits in `std::marker` used to indicate types of
various kinds; lang items `send`, `sync` and `copy`.
- the traits in `std::marker` used to indicate properties of
types that are used by the compiler; lang items `send`, `sync` and `copy`.

Comment on lines +43 to +133
## List of all language items

This is a list of all language items in Rust along with where they are located in
the source code.

- Primitives
- `i8`: `library/core/src/num/mod.rs`
- `i16`: `library/core/src/num/mod.rs`
- `i32`: `library/core/src/num/mod.rs`
- `i64`: `library/core/src/num/mod.rs`
- `i128`: `library/core/src/num/mod.rs`
- `isize`: `library/core/src/num/mod.rs`
- `u8`: `library/core/src/num/mod.rs`
- `u16`: `library/core/src/num/mod.rs`
- `u32`: `library/core/src/num/mod.rs`
- `u64`: `library/core/src/num/mod.rs`
- `u128`: `library/core/src/num/mod.rs`
- `usize`: `library/core/src/num/mod.rs`
- `f32`: `library/std/src/f32.rs`
- `f64`: `library/std/src/f64.rs`
- `char`: `library/core/src/char.rs`
- `slice`: `library/alloc/src/slice.rs`
- `str`: `library/alloc/src/str.rs`
- `const_ptr`: `library/core/src/ptr.rs`
- `mut_ptr`: `library/core/src/ptr.rs`
- Runtime
- `start`: `library/std/src/rt.rs`
- `eh_personality`: `library/panic_unwind/src/emcc.rs` (EMCC)
- `eh_personality`: `library/panic_unwind/src/gcc.rs` (GNU)
- `eh_personality`: `library/panic_unwind/src/seh.rs` (SEH)
- `eh_catch_typeinfo`: `library/panic_unwind/src/emcc.rs` (EMCC)
- `panic`: `library/core/src/panicking.rs`
- `panic_bounds_check`: `library/core/src/panicking.rs`
- `panic_impl`: `library/core/src/panicking.rs`
- `panic_impl`: `library/std/src/panicking.rs`
- Allocations
- `owned_box`: `library/alloc/src/boxed.rs`
- `exchange_malloc`: `library/alloc/src/heap.rs`
- `box_free`: `library/alloc/src/heap.rs`
- Operands
- `not`: `library/core/src/ops/bit.rs`
- `bitand`: `library/core/src/ops/bit.rs`
- `bitor`: `library/core/src/ops/bit.rs`
- `bitxor`: `library/core/src/ops/bit.rs`
- `shl`: `library/core/src/ops/bit.rs`
- `shr`: `library/core/src/ops/bit.rs`
- `bitand_assign`: `library/core/src/ops/bit.rs`
- `bitor_assign`: `library/core/src/ops/bit.rs`
- `bitxor_assign`: `library/core/src/ops/bit.rs`
- `shl_assign`: `library/core/src/ops/bit.rs`
- `shr_assign`: `library/core/src/ops/bit.rs`
- `deref`: `library/core/src/ops/deref.rs`
- `deref_mut`: `library/core/src/ops/deref.rs`
- `index`: `library/core/src/ops/index.rs`
- `index_mut`: `library/core/src/ops/index.rs`
- `add`: `library/core/src/ops/arith.rs`
- `sub`: `library/core/src/ops/arith.rs`
- `mul`: `library/core/src/ops/arith.rs`
- `div`: `library/core/src/ops/arith.rs`
- `rem`: `library/core/src/ops/arith.rs`
- `neg`: `library/core/src/ops/arith.rs`
- `add_assign`: `library/core/src/ops/arith.rs`
- `sub_assign`: `library/core/src/ops/arith.rs`
- `mul_assign`: `library/core/src/ops/arith.rs`
- `div_assign`: `library/core/src/ops/arith.rs`
- `rem_assign`: `library/core/src/ops/arith.rs`
- `eq`: `library/core/src/cmp.rs`
- `ord`: `library/core/src/cmp.rs`
- Functions
- `fn`: `library/core/src/ops/function.rs`
- `fn_mut`: `library/core/src/ops/function.rs`
- `fn_once`: `library/core/src/ops/function.rs`
- `generator_state`: `library/core/src/ops/generator.rs`
- `generator`: `library/core/src/ops/generator.rs`
- Opting out
- `unsafe_cell` (relaxes pointer provenance rules, allowing const-to-mut
casts): `library/core/src/cell.rs`
- `manually_drop` (opts out of implicit destructor call): `library/core/src/mem/manually_drop.rs`
- Other
- `coerce_unsized`: `library/core/src/ops/unsize.rs`
- `drop`: `library/core/src/ops/drop.rs`
- `drop_in_place`: `library/core/src/ptr.rs`
- `clone`: `library/core/src/clone.rs`
- `copy`: `library/core/src/marker.rs`
- `send`: `library/core/src/marker.rs`
- `sized`: `libcrary/ore/msrc/arker.rs`
- `unsize`: `library/core/src/marker.rs`
- `sync`: `library/core/src/marker.rs`
- `phantom_data`: `libcore/marker.rs`
- `discriminant_kind`: `library/core/src/marker.rs`
- `freeze`: `library/core/src/marker.rs`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still think this is not a good fit because it will get outdated so rapidly. Maybe instead you could recommend rg '#\[lang' library or looking at https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/lang_items/enum.LangItem.html ?

Copy link
Member

@camelid camelid Apr 13, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I was going to suggest that it would be better to have people look at the autogenerated docs. And suggesting rg -F '#[lang' library/ is probably a good idea too.

@jyn514
Copy link
Member

jyn514 commented Apr 27, 2021

Hi @MikailBag, are you planning to follow-up on this?

@MikailBag
Copy link
Contributor Author

Given that I don't have enough understanding of how this page should look, I'm going to close this PR for now.

@MikailBag MikailBag closed this Apr 27, 2021
@jyn514 jyn514 mentioned this pull request Apr 29, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-author Status: this PR is waiting for additional action by the OP
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants