---
title: T-spec meeting 2024-02-22
tags: ["T-spec", "meeting", "minutes"]
date: 2024-02-22
discussion: https://rust-lang.zulipchat.com/#narrow/stream/399173-t-spec/topic/Meeting.202024-02-22
url: https://hackmd.io/3kYyq3C4SH696ZPnc3vzUQ
---
Attendees: Joel Marcey, Mara, Eric Huss, Connor Horman, Pietro, Monadic Cat
## Potential Agenda
- Recap discussion with lang team
- Feedback from opsem and types
- Finalize chapter structure
- Any other business
## Lang team discussion recap
Prepared document [here](https://hackmd.io/@rust-spec-team/Hy_EXvG2T).
Minutes of meeting [here](https://hackmd.io/UetDs_P1Sgmj8BEiWaXB5g).
Joel: Lang team, in the end, generally supported the overall proposal
Mara: Interesting part of the discussion was around intermediate representation.
Connor: Suggest we use minirust for dynamic semantics
Mara: minirust also suggested by opsem
Connor: can translate minirust to some custom IR
Mara: For static semantics, we need to define an intermediate form
Connor: We should definitely use minirust
Mara: Homework - read more about minirust and how it is specified
Joel: How much definition of minirust are we going to have to help define for the specification?
Connor: Ideally opsem will be ahead of the spec work. We just have to translate into prose
Mara: Need to understand the scope of minirust. Can probably work now on the first chapter that was defined by Felix for the lang team.
Joel: Any downsides to using minirust?
Connor: If we want to use MIR for borrow-checking
Eric: What exactly is minirust?
Connor: Defines a language that is syntactically similar to Rust
Eric: Where is more info on minirust?
Connor: Believe everything is in the minirust repository. Minirust has fewer constructs that Rust.
Mara: Should we invite RalfJ to present minirust to us? Or is there a presentation on minirust?
## Chapter Structure
Initial discussion from last meeting [here](https://hackmd.io/gqNmzYyKRD-slKYSidwrsA).
### Rough outline from last meeting
- Front Matter
- Introduction
- Specification Scope
- Terms and Definitions
- source.. something.. ?
- lexing/tokenization
- grammar, ast, macro invocations
- declarations/definitions
- bodies/expressions, operator precedence, etc.
- ...
- modules, interaction with file system
- macros and conditional compilation
- macro definitions
- macro expansion
- `#[cfg]`
- name resolution
- part 1: just paths into modules, for macros
- part 2: with traits, fn params, let-bound names, etc.
- or global vs local?
- defining.. items .. ?
- module paths, ..
- importing crates, ..
- visibility, pub/private, etc.
- name resolution
- hygiene
- macros 1.0 vs 2.0
- ...
- types (traits, types, resolution)
- borrow checking
- functions
- const/static/...
- expressions and control flow (stuff in function bodies, basically)
- temporaries
- patterns
- match exhaustiveness
- borrow checking
- type inferrence
- opsem (based on MIR?) (not mir, but something where while/for/loop etc. are no longer relevant, for example)
- memory model (atomic, non-atomic)
- memory layout/representation (Option, repr(), NonNull, ...)
- undefined behaviour
- ABI, FFI.. ?
- ..
- const eval
- .. ?
- core library
- traits and methods of builtin types
- core::*
- unsafety??
- ... ?
### Outline used in the lang team discussion
* Source code and Rust syntax tree (graph?) - T-lang
* Lexing/tokenization
* Grammar, AST
* Crates, modules, source files
* Macro invocations
* Macro expansion and conditional compilation
* Name/Path resolution of (mod-level) items
* Static semantics - mixed T-lang/T-types
* type checking
* associated item resolution
* existential (impl Trait) resolution
* borrow checking
* unsafe checking
* const eval - T-opsem?
* type inference
* Dynamic Semantics - T-opsem
* high level expression form
* pattern matching and binding
* dyn traits and dynamic method dispatch
* memory layout and value representation
* low level (MIR-like) statement form
* memory model (borrowing; atomics)
* ABIs and FFI linkage
* The Core library crate - T-libs-api
* builtin types' traits and methods
* core::* items
### Discussion
Mara: We asked opsem and lang teams what they thought of this type of chapter structure. We met with the lang team to discuss.
Mara: We should use the phases of compilation as a guideline. but we need to define those phases
Connor: Defining the phases as follows: lexing, parsing, macro expansion (including modules), type checking, monomorphization+const eval.
- Lexing
- Parsing
- Module system
- Macro Expansion (including `cfg`)
- Items
- Function bodies/expressions
- Name resolution
- Type checking
- Borrow Checking
- Monomorphization
- Const eval (expression checking, fn checking, evaluation)
- Dynamic semantics (runtime)
- Core library
Pietro: Should phases of compilation be the exact order of the top-level chapters?
Connor: They should serve as a guideline
Joel: Who are the teams that associated with each topic that will be responsible for helping us get the information needed to write prose?
Pietro: Maybe we should start with the hardest sections first where we do not have the knowledge on the team because that will require the most parallel use of time
Eric: Let's start writing stuff down of what we know. Also, don't expect others outside this team to write prose.
Pietro: Let's write something small that we know, but not everything. Harder for others to write from a blank slate than to review something already written.
Connor: hard to write opsem because a lot of it is not known or undecided.
Mara: The trick to writing and finishing, is to minimize context switches. If we do this right, we can do a chunk and make it complete. For example, all of lexing can be completed and approved. Then we could go to memory representation, and get that completed and approved.
Joel: The t-spec team writes as much as they can of everything until they can't any longer.
Connor: Should we do this as a group or as individuals?
Joel: Do all these topics have at least some researchable places?
Eric: Type inference may only have information in the code
Mara: But you can get requirements and boundary conditions, etc. with out understanding the code
Eric: Ferrocene actually has a bunch of stuff on inference.
Joel: Who are the writers? Mara, Joel, Connor (for basically. opsem). Eric will help with pointing in the right direction and content review. Pietro can help with questions around Ferrocene.
Eric: What is the licensing around using content from the Ferrocene spec?
Pietro: Will double check. Copyright Ferrous Systems and AdaCore, maybe?
Mara: Will review minirust and start write the lexing chapter
Connor: Can start writing Memory Layout Chapter. How do we represent target specific stuff?
Mara: Target specific stuff may be too specific for the specification right now. You can use "target defined".
Eric: It's going to be hard to draw boundaries around what requires target specific things, like inline assembly, linking and linker issues, etc.
## Any Other Business
Pietro: For next meeting, what do you expect from the core library section? Ferrous is going to work on this very soon.