{{language
|exec=machine
|gc=no
|safety=safe
|parampass=value
|checking=static
|compat=structural
|express=explicit
|strength=strong
}}
{{language programming paradigm|Imperative}}
{{implementation|Cowgol}}

'''Cowgol''' is a [[procedural programming|procedural]], [[imperative programming|imperative]],
stackless programming language with Ada-style syntax, meant for use on very small systems such as
8-bit micros. Cowgol is also the name of the premier (and so far only) implementation, which is itself
written in Cowgol and self-hosting, and which is small enough to run on several 8-bit micros.
Cowgol was developed by David Given.

Because most of the processors Cowgol targets do not support stack frames efficiently, Cowgol was designed
not to use them. Instead, every variable in the program is statically assigned a single location in memory.
(The official implementation overlaps variables it can prove aren't in scope at the same time.)
Recursion is forbidden. 

Aside from this, Cowgol has most of the features one would expect of a modern-ish procedural language.
Cowgol has strict type checking, type aliases, records with inheritance, and arbitarily nested subroutines.
Cowgol also has system programming features such as pointers and inline assembly, and it allows the programmer
to explicitly define the layout in memory of a record.

Cowgol currently supports MS-DOS (on the 8086), CP/M (on the 8080 and Z80),
the BBC Micro (6502), as well as others; modern Linux (x86 or PowerPC) is also supported. The Cowgol compiler is written to make it easy to add other back-ends. 

*[http://cowlark.com/cowgol/index.html Cowgol homepage]
*[https://github.com/davidgiven/cowgol Cowgol GitHub repository]