BeCecil, A Core Object-Oriented Language with Block Structure and Multimethods: Semantics and Typing by Craig Chambers and Gary T. Leavens Abstract We present and analyze the semantics and static type system for BeCecil, a theoretical (core) language with multimethods. BeCecil is a simple and orthogonal version of object-oriented languages like Cecil, CLOS, and Dylan. BeCecil has a new, simple mechanism for information hiding, which allows subclassing and yet can preserve representation invariants. BeCecil is also block-structured; within a block, one can extend a generic function with new multimethods, which may come from other generic functions. The inheritance relationships of objects may be extended in any block, and are statically scoped. The type system separates classes from types, and inheritance from subtyping. Subtype relationships are also extensible and statically scoped. These features combine to make BeCecil unusually expressive, while still allowing static typechecking. Keywords: Multimethods, generic functions, object-oriented programming languages, encapsulation, information hiding, static typechecking, block structure, subtyping, inheritance, BeCecil language. 1994 CR Categories: D.3.1 [Programming Languages] Formal Definitions and Theory - semantics; D.3.2 [Programming Languages] Language Classifications - object-oriented languages; D.3.3 [Programming Languages] Language Constructs and Features - abstract data types, control structures, procedures, functions, and subroutines; D.3.m [Programming Languages] Miscellaneous - multimethods, generic functions, type systems; F.3.2 [Logics and Meanings of Programs] Semantics of Programming Languages - operational semantics; F.3.3 [Logics and Meanings of Programs] Studies of Program Constructs - control primitives, type structure. This report also appears as a technical report from the Department of Computer Science and Engineering, University of Washington, Seattle, WA, numbered UW-CSE-96-12-02.