程序项

items.md
commit: b0e0ad6490d6517c19546b1023948986578fc378
本章译文最后维护日期:2020-11-8

句法:
Item:
   OuterAttribute*
      VisItem
   | MacroItem

VisItem:
   Visibility?
   (
         Module
      | ExternCrate
      | UseDeclaration
      | Function
      | TypeAlias
      | Struct
      | Enumeration
      | Union
      | ConstantItem
      | StaticItem
      | Trait
      | Implementation
      | ExternBlock
   )

MacroItem:
      MacroInvocationSemi
   | MacroRulesDefinition

*程序项*是 crate 的组成单元。程序项由一套嵌套的模块被组织在一个 crate 内。每个 crate 都有一个“最外层”的匿名模块;crate 中所有的程序项都在其 crate 的模块树中自己的路径

程序项在编译时就完全确定下来了,通常在执行期间保持结构稳定,并可以驻留在只读内存中。

有以下几类程序项:

有些程序项会形成子(数据)项声明的隐式作用域。换句话说,在一个函数或模块中,程序项的声明可以(在许多情况下)与语句、控制块、以及类似的能构成程序项主体的部件混合在一起。这些在作用域内的程序项的意义与在作用域外声明的程序项的意义相同(它仍然是静态项),只是该程序项在模块的命名空间中的路径名由封闭它的程序项的名称限定,或该程序项也可能是封闭它的程序项的私有程序项(比如函数的情况)。语法规范指定了子项声明可能出现的合法位置。