PostScript is a programming language that lets you describe how a page looks. (It's a real, Turing-complete programming language, and you can do things like print a fractal with a couple of lines of PostScript.) It was popular with high-end printers like the Apple LaserWriter, and it required a real CPU inside the printer in order to evaluate the PostScript and render it into an image of the appropriate resolution, which could then be printed. So it was completely out of the question for consumer-level printers like cheap inkjets. Today, of course, adding a real computer to a cheap inkjet is entirely doable (a $5 Pi Zero is far more powerful than the LaserWriter), but in the past you basically needed a driver that ran on your computer that converted a high-level document (e.g., a page from a word processor) to physical instructions for the printer.
CUPS is a program that implements the Internet Printing Protocol, basically a way to send, view, and cancel print jobs over an HTTP API. If you have a local printer connected with a parallel port, you can run CUPS and have other machines send to it. The other thing CUPS does is conversions: you can send a PDF to CUPS, and it will run the driver to convert it to whatever format the printer needs. So an application that talks to CUPS only needs to know how to generate PDFs. CUPS also supports talking to remote print servers, e.g., other CUPS servers, printers that natively speak IPP, or printers that speak some other protocol.
Google Cloud Print is a service which has the unusual property that printers connect to it, not vice versa. Therefore you can print a document to a Google Cloud Print printer without being on the same network, which IPP doesn't let you do. (For printers without direct GCP support, you'd need to leave a computer plugged into it and running, but some newer printers with built-in networking know how to talk to Google and let you register it to your Google account.)