The sequential subset of Erlang supports eager evaluation, single assignment, and dynamic typing. Messages can be sent to and received from ports, but these messages must obey the so-called "port protocol." Erlang is a general-purpose, concurrent, functional programming language. The syntax {D1,D2,...,Dn} denotes a tuple whose arguments are D1, D2, ... Dn. Ports are created with the built-in function open_port.