[Python-Dev] New lines, carriage returns, and Windows (original) (raw)

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.

Regards, 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