Ports are created with the built-in function open_port. I don't even care. The arguments can be primitive data types or compound data types. Messages can be sent to and received from ports, but these messages must obey the so-called "port protocol." Atoms are used within a program to denote distinguished values.