Worth noting is that @ was not the universal separator for host and username. BITNET (and its sister networks) based on IBM’s networking protocols used with word “AT” (separated by spaces) so, back in the olden days I was U12921 AT UICVM. UUCP placed the host name first and used ! to separate the hostname from the user with explicit routing occasionally given by multiple !s to separate a list of machines, e.g., foo!bar!jarthur!dhosek And the DECNET protocol used :: with the host name first (e.g., YMIR::DHOSEK) It wasn’t until the grand unification of all the various academic and commercial networks in the late 80s with the “net of nets” which became the Internet that @ became more universal, although IBM systems retained their “AT” and VMS systems had the awkward IN%"dhosek@ymir.claremont.edu" syntax to allow emailing outside the local DECnet.

The DECNET one is pretty.

Agreed.

This is how the R language allows you to explicitly scope functions from packages. I honestly love that syntax.

E.g., `dplyr::filter`, `limma::voom`

C++ also uses (::), by the way. R probably borrowed it from C++.

Most likely from Common Lisp due to links between R and Lisp. In CL double colon lets you access unexported symbols from a package, while single colon accesses only the exported ones

Oh I think you're right and both took it from Common Lisp, which largely predates namespaces in C++ and R.