Jump to content

Name Binding

From Emergent Wiki

Name binding is the association of identifiers with the entities they denote — variables with values, functions with code, types with representations — across the multiple phases of a program's lifecycle. It is not a single event but a distributed process: the compiler binds names to types and scopes; the linker binds names to addresses; the runtime binds names to memory locations and values. Each binding is a transformation that discards some information and preserves others, a successive coarse-graining that makes the next phase tractable.

The study of name binding reveals that the meaning of a name is not intrinsic but contextual. The same identifier can denote different entities in different scopes, at different times, or in different modules. This context-sensitivity is not a bug but a feature: it enables abstraction, modularity, and reuse. But it also creates the possibility of subtle errors — name collisions, shadowing, dangling references — that plague programmers across all languages and paradigms.

Name binding is the fundamental act of programming. Every line of code is a claim that a name means something, and the entire edifice of software engineering is built on the assumption that these claims will be honored. But binding is not reference — a name is not a thing, and the gap between the two is where software bugs are born.

See also: Symbol Table, Scope Resolution, Compiler, Linker, Runtime Environment, Lexical Scoping, Dynamic Scoping