This document discusses scope and namespacing in modern programming languages. It covers different scoping approaches including blocks, labeled namespaces like structures, primitive namespaces, dynamic scoping, and issues with separate compilation. Block scoping follows a classic rule where the scope of a definition is the block containing it, minus any interior redefinitions. Labeled namespaces allow naming and accessing definitions from outside the namespace. Primitive namespaces separate reserved names like types. Dynamic scoping resolves names at runtime based on the caller's environment. Separate compilation requires mechanisms to connect references across compilation units.