Double colon (::) meant the same as .. on Unix/DOS, that is "go up one level". So you have to be careful when concatenating paths to not get double separators.
Paths starting with : were relative. If a path didn't start with the separator, the first component was the volume name (disk partition). Again, quite unlike Unix.
Also, remember it was common to have spaces in names on Mac, even the default harddrive on Macs was named "Macintosh HD". So an absolute path like "Macintosh HD:Programs:MacWrite" would have been common. (I grew up with Macs in Swedish, so I'm back translating the names here, could be that the names were slightly different in English.)
$ cat <<'EOF' >x.lisp
heredoc> (require :uiop)
heredoc> (let ((p (make-pathname :name "foo:bar")))
heredoc> (format t "~@{~A~%~}" (namestring p) (uiop:native-namestring p)))
heredoc> EOF
$ ccl -b -Q -l x.lisp </dev/null
foo\:bar
foo:bar
$ sbcl --script x.lisp
foo:bar
foo:bar $ touch "foo:bar"
In the Terminal, then Finder renders it as foo/bar.So who is lying, how is it stored in the directory entry in APFS itself?
(Other characters of course cause usability problems and are potentially even a security vulnerability depending on the terminal. But they're still "valid".)
Windows handles slash as well, also part of a unification with UNIX style paths intended for XEDOS.
C:\WINDOWS\system32>cd D:\backups\some-huge-directory
C:\WINDOWS\system32>del /s *
Oops. I learned to look twice before running a big dangerous command. And to use /d.macOS supports case-insensitivity[0] and performs unicode normalization[1] on filenames, and decomposes name data to an extent that the question "what does the fs see" is a bit moot.
With that said, the internal storage of filenames in APFS are a nul-terminated UTF-8 string[2], with (i'm pretty sure) colons as colons, which the Finder displays as slashes.
[0] if you make a file named "Makefile" then touch a file named "makefile", it'll touch the first file, instead of making a second file.
[1] if you make a file named "schön" (s-c-h-combining¨-o-n) and then search for (s-c-h-ö-n), you can find it, or vice versa. The particular normalization/canonicalization used is NFD.
[2] j_drec_key_t description in https://developer.apple.com/support/downloads/Apple-File-Sys...
Combining marks come after the character they modify, btw. (Presumably thanks to support from things like harfbuzz, modern systems will happily put two dots above an h.)
VMS used:
node::device:[dir1.dir2.dir3]filename.extension;version
from memory, you could have up to 15 nested directories.The versioning was cool as long as you remembered to clean them up.