Duck typing 2026-11-05
Duck typing uses an object's available operations as the practical interface required by a piece of code, rather than demanding membership in one particular class. The Python glossary describes calling the needed method or using the needed attribute directly. This supports flexible reuse across unrelated implementations.[ref]
For example, a procedure calling source.read() can accept a disk-backed file object or an in-memory object providing a compatible read method. Sharing that method name is insufficient if one method returns text while the procedure requires bytes, or if their error behavior differs. The required interface includes semantics as well as names. Duck typing is commonly used with dynamic typing, but it does not imply that missing or incompatible operations become valid.
Interpreter (computing) Created 2026-10-13 Updated 2026-10-14
An interpreter executes a program's operations according to its programming language semantics. It can recursively evaluate an abstract syntax tree, or follow an instruction sequence using an execution state such as a stack and an instruction pointer. It need not repeatedly read source code characters, and it need not use an abstract syntax tree at all.
Compilation and interpretation can coexist. In CPython, Python source code is compiled into bytecode for execution by an interpreter; its bytecode is not promised to remain stable between releases.[ref] The Python 3.14 compile function accepts text or an abstract syntax tree and can produce a code object, which eval or exec can execute.[ref] These operations make translation and execution separately accessible without requiring them to live in different applications.
Just-in-time compilation gives another combination: an interactive implementation can translate a submitted program expression into machine code and then execute it immediately. The LLVM 20.1.0 tutorial demonstrates this by adding an intermediate representation module to its just-in-time compilation facility, looking up the generated function, and calling it.[ref] Thus calling a programming language permanently "compiled" or "interpreted" hides an implementation choice: ask which representation is translated, which is executed, and when.