In the Pascal of the past (30, 40 years ago) there would be functions that can't be (easily) implemented, but since the era of Delphi (mid 90s) at the latest this is not the case anymore.
This wasn't the case even way before Delphi: most Pascal compilers of the mid-80s (1982 the oldest I know about: Pascal MT+ v5) already allowed for this in one way or other.
I never used newer than about v3. Or perhaps v2. And while I might have seen worse compilers it was everything expected from DR: I ended up having to rewrite the runtime library to save x87 state, and it obfuscated its .obj format by appending a rolling zero bit to each byte and packing the result.
The thing is that while valid for what he was talking about, Kerningham's critic was one of the last even remotely founded on fact, and even then most compiler producers had started to solve most of those shortcomings in one way or other.
The point about Write()-like functions taking multiple parameters and the colon-separated format specification is valid criticism of the early syntax, but the important fact is that there are alternative ways of achieving the same result from Delphi onwards.
However I'd throw in as a detail that Pascal was very much typical of early-70s compilers in that its predefined functions were handled by the compiler (so could have non-standard syntax) rather than there being a more general library mechanism.
Even if Kernighan's criticism was based on fact, it demonstrated that he didn't really /get/ the idea of type checking: a 10-element array is /not/ assignment-compatible with a 9-element array hence it is not compatible in the more general sense of being an interchangeable parameter.
Such things /can/ be a problem if using Pascal or its close relatives for systems programming (e.g. passing network packets around), but Kernighan wasn't claiming to do that so I feel his criticism was out of place.
MarkMLl