This article is from the FAQ, by with numerous contributions by others.
BETA is a modern object-oriented language with comprehensive facilities for
procedural and functional programming. BETA has powerful abstraction
mechanisms than provide excellent support for design and implementation,
including data definition for persistent data. The abstraction mechanisms
include support for identification of objects, classification, and
composition. BETA is a strongly typed language (like Simula, Eiffel, and
C++), with most type checking being carried out at compile-time.
The abstraction mechanisms include class, procedure, function, coroutine,
process, exception, and many more, all unified into the ultimate abstraction
mechanism: the pattern. In addition to the pattern, BETA has subpattern,
virtual pattern, and pattern variable.
BETA does not only allow for passive objects as in Smalltalk, C++, and
Eiffel. BETA objects may also act as coroutines, making it possible to model
alternating sequential processes and quasi-parallel processes. BETA
coroutines may also be executed concurrently with supported facilities for
synchronization and communication, including monitors and rendezvous