[Python-Dev] New lines, carriage returns, and Windows

Nick Maclaren nmm1 at cus.cam.ac.uk
Sun Sep 30 11:49:56 CEST 2007

Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
> I don't see how this is different from Unix/C "\n" being
> an atomic newline character.

Have you used systems with the I/O models I referred to (or ones
with newlines being out-of-bound data)?

> If you're saying that BCPL is better because it defines
> standard semantics for more control characters than just
> "\n", that may be true, but C is doing about the best it
> can with "\n" as far as I can see, given all the crazy
> things that different OSes want to do with line endings.

I am afraid that you are wrong - see my other posting for how
to do it better.  Look, I have implemented both of those two models
on systems that are FAR more different than most people can imagine.
Both work, and neither causes confusion.  The C/Unix/Python one does.

> In any case, the problem which started all this isn't
> really an I/O problem at all, it's a mismatch between
> the world of Python strings which use "\n" and .NET
> library code expecting strings which use "\r\n".

That's an I/O problem :-)

> The correct thing to do with that is to translate whenever
> a string crosses a boundary between Python code and
> .NET code. This is something that ought to be done
> automatically by the Python/.NET interfacing machinery,
> maybe by having a different type for .NET strings.

Agreed.  But the REASON it causes trouble is the inconsistency
in the basic C/Unix/Python text I/O model.  Let's consider just
\f, \r and \n, and a few questions:

    Exactly what does a free-standing \f mean?

    Does \n\f\n mean starting at the top of a page or one line down?

    How do \r and \f interact with line-buffering?  Think about
MacOS here.

I could go on, but those are enough to indicate that the problem
is insoluble.  The answer "Undefined but not even explicitly
discouraged" is a recipe for confusion.

Nick Maclaren,
University of Cambridge Computing Service,
New Museums Site, Pembroke Street, Cambridge CB2 3QH, England.
Email:  nmm1 at cam.ac.uk
Tel.:  +44 1223 334761    Fax:  +44 1223 334679

More information about the Python-Dev mailing list