1. 9
  1. 5

    The hinting technique described here was used for all line drawing on NeXT systems (which used a Display PostScript implementation licensed from Adobe), which is part of the reason they they look so good in comparison to other contemporary systems on a range of different displays.

    The PostScript drawing model was amazingly influential. Cairo implements it, as does Quartz, so it’s the foundation of all UNIX GUIs today. Canvas uses it, so it’s in all web pages that do dynamic rendering.

    PostScript itself made some mistakes, in particular as a Turing-complete language. This made it impossible to use as an editable format and also impossible to usefully estimate the time taken to render a page. I had a nice demo of this back in the day: a PosScript document that was about 40 bytes and generated fractal trees up to some depth and took half an hour to render with the default value, on a fast PC. My laser printer back then had a 50MHz MIPS chip and could print 10 pages per minute if you sent it (rasterised) PCL data, but took over a minute to print a page of PostScript text generated by LaTeX.

    PDF fixed this in two ways. First, it removed the flow control constructs from PostScript, so rendering time is proportional to file size. Most of the complex flow control was unused by anything other than hand-written PS because editors want to generate data files, not programs. It was mostly used for fonts and PostScript separated out font data with embedded hinting to get the same benefits without such a complex VM. Second, it added a notion of objects. The last thing in a PDF document is an index of all object and their versions. You can edit a PDF by appending more object and then adding a new dictionary that lists the changes from the previous one (embedding the entire history in the document). You can then prepare it for publication by writing a new PDF that contains only the object that have not been superseded. A few governments failed to realise this and redacted documents by adding black rectangles over things, allowing them to be un-redacted by truncating the file.