GHC 7.2.2 RC 1

2011-11-06 Thread Ian Lynagh

We are pleased to announce the first release candidate for GHC 7.2.2:

http://www.haskell.org/ghc/dist/7.2.2-rc1/

This includes the source tarball, installers for OS X and Windows, and
bindists for amd64/Linux, i386/Linux, amd64/FreeBSD and i386/FreeBSD.

7.2.2 will be a minimal bugfix release, fixing only bugs that cannot be
worked around. Please let us know if you find any showstoppers.


Thanks
Ian, on behalf of the GHC team


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: behaviour change in getDirectoryContents in GHC 7.2?

2011-11-06 Thread Max Bolingbroke
On 6 November 2011 04:14, John Millikin jmilli...@gmail.com wrote:
 For what it's worth, on my Ubuntu system, Nautilus ignores the locale
 and just treats all paths as either UTF8 or invalid.
 To me, this seems like the most reasonable option; the concept of
 locale encoding is entirely vestigal, and should only be used in
 certain specialized cases.

Unfortunately non-UTF8 locale encodings are seen in practice quite
often. I'm not sure about Linux, but certainly lots of Windows systems
are configured with a locale encoding like GBK or Big5.

 Paths as text is what *Windows* programmers expect. Paths as bytes is
 what's expected by programmers on non-Windows OSes, including Linux
 and OS X.

IIRC paths on OS X are guaranteed to be valid UTF-8. The only platform
that uses bytes for paths (that we care about) is Linux.

 I'm not saying one is inherently better than the other, but
 considering that various UNIX  and UNIX-like operating systems have
 been using byte-based paths for near on forty years now, trying to
 abolish them by redefining the type is not a useful action.

We have to:
 1. Provide an API that makes sense on all our supported OSes
 2. Have getArgs :: IO [String]
 3. Have it such that if you go to your console and write
(./MyHaskellProgram 你好) then getArgs tells you [你好]

Given these constraints I don't see any alternative to PEP-383 behaviour.

 If you're going to make all the System.IO stuff use text, at least
 give us an escape hatch. The unix package is ideally suited, as it's
 already inherently OS-specific. Something like this would be perfect:

You can already do this with the implemented design. We have:

openFile :: FilePath - IO Handle

The FilePath will be encoded in the fileSystemEncoding. On Unix this
will have PEP383 roundtripping behaviour. So if you want openFile' ::
[Byte] - IO Handle you can write something like this:

escape = map (\b - if b  128 then chr b else chr (0xEF00 + b))
openFile = openFile' . escape

The bytes that reach the API call will be exactly the ones you supply.
(You can also implement escape by just encoding the [Byte] with the
fileSystemEncoding).

Likewise, if you have a String and want to get the [Byte] we decoded
it from, you just need to encode the String again with the
fileSystemEncoding.

If this is not enough for you please let me know, but it seems to me
that it covers all your use cases, without any need to reimplement the
FFI bindings.

Max

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


RE: GHC 7.2.2 RC 1

2011-11-06 Thread Chris Dornan
It's looking good but base is still untrusted out of the box. Is this right?

Chris

-Original Message-
From: glasgow-haskell-users-boun...@haskell.org
[mailto:glasgow-haskell-users-boun...@haskell.org] On Behalf Of Ian Lynagh
Sent: 06 November 2011 13:19
To: glasgow-haskell-users@haskell.org
Subject: GHC 7.2.2 RC 1


We are pleased to announce the first release candidate for GHC 7.2.2:

http://www.haskell.org/ghc/dist/7.2.2-rc1/

This includes the source tarball, installers for OS X and Windows, and
bindists for amd64/Linux, i386/Linux, amd64/FreeBSD and i386/FreeBSD.

7.2.2 will be a minimal bugfix release, fixing only bugs that cannot be
worked around. Please let us know if you find any showstoppers.


Thanks
Ian, on behalf of the GHC team


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: behaviour change in getDirectoryContents in GHC 7.2?

2011-11-06 Thread John Millikin
2011/11/6 Max Bolingbroke batterseapo...@hotmail.com:
 On 6 November 2011 04:14, John Millikin jmilli...@gmail.com wrote:
 For what it's worth, on my Ubuntu system, Nautilus ignores the locale
 and just treats all paths as either UTF8 or invalid.
 To me, this seems like the most reasonable option; the concept of
 locale encoding is entirely vestigal, and should only be used in
 certain specialized cases.

 Unfortunately non-UTF8 locale encodings are seen in practice quite
 often. I'm not sure about Linux, but certainly lots of Windows systems
 are configured with a locale encoding like GBK or Big5.

This doesn't really matter for file paths, though. The Win32 file API
uses wide-character functions, which ought to work with Unicode text
regardless of what the user set their locale to.

 Paths as text is what *Windows* programmers expect. Paths as bytes is
 what's expected by programmers on non-Windows OSes, including Linux
 and OS X.

 IIRC paths on OS X are guaranteed to be valid UTF-8. The only platform
 that uses bytes for paths (that we care about) is Linux.

UTF-8 is bytes. It can be treated as text in some cases, but it's
better to think about it as bytes.

 I'm not saying one is inherently better than the other, but
 considering that various UNIX  and UNIX-like operating systems have
 been using byte-based paths for near on forty years now, trying to
 abolish them by redefining the type is not a useful action.

 We have to:
  1. Provide an API that makes sense on all our supported OSes
  2. Have getArgs :: IO [String]
  3. Have it such that if you go to your console and write
 (./MyHaskellProgram 你好) then getArgs tells you [你好]

 Given these constraints I don't see any alternative to PEP-383 behaviour.

Requirement #1 directly contradicts #2 and #3.

 If you're going to make all the System.IO stuff use text, at least
 give us an escape hatch. The unix package is ideally suited, as it's
 already inherently OS-specific. Something like this would be perfect:

 You can already do this with the implemented design. We have:

 openFile :: FilePath - IO Handle

 The FilePath will be encoded in the fileSystemEncoding. On Unix this
 will have PEP383 roundtripping behaviour. So if you want openFile' ::
 [Byte] - IO Handle you can write something like this:

 escape = map (\b - if b  128 then chr b else chr (0xEF00 + b))
 openFile = openFile' . escape

 The bytes that reach the API call will be exactly the ones you supply.
 (You can also implement escape by just encoding the [Byte] with the
 fileSystemEncoding).

 Likewise, if you have a String and want to get the [Byte] we decoded
 it from, you just need to encode the String again with the
 fileSystemEncoding.

 If this is not enough for you please let me know, but it seems to me
 that it covers all your use cases, without any need to reimplement the
 FFI bindings.

This is not enough, since these strings are still being passed through
the potentially (and in 7.2.1, actually) broken path encoder.

If the unix package had defined functions which operate on the
correct type (CString / ByteString), then it would not be necessary to
patch base. I could just call the POSIX functions from system-fileio
and be done with it.

And this solution still assumes that there is such a thing as a
filesystem encoding in POSIX. There isn't. A file path is an arbitrary
sequence of bytes, with no significance except what the application
user interface decides.

It seems to me that there's two ways to provide bindings to operating
system functionality.

One is to give low-level access, using abstractions as close to the
real API as possible. In this model, unix would provide functions
like [[ rename :: ByteString - ByteString - IO () ]], and I would
know that it's not going to do anything weird to the parameters.

Another is to pretend that operating systems are all the same, and can
have their APIs abstracted away to some hypothetical virtual system.
This model just makes it more difficult for programmers to access the
OS, as they have to learn both the standard API, *and* whatever weird
thing has been layered on top of it.

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: behaviour change in getDirectoryContents in GHC 7.2?

2011-11-06 Thread Donn Cave
Quoth John Millikin jmilli...@gmail.com,
...
 One is to give low-level access, using abstractions as close to the
 real API as possible. In this model, unix would provide functions
 like [[ rename :: ByteString - ByteString - IO () ]], and I would
 know that it's not going to do anything weird to the parameters.

I like that a lot.  In the PEP I see the phrase in the same way that
the C interfaces can ignore the encoding - and the above low level
access seems to belong to that same non-problematic category.

Donn

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: GHC 7.2.2 RC 1

2011-11-06 Thread Kyra

On 11/6/2011 5:18 PM, Ian Lynagh wrote:

7.2.2 will be a minimal bugfix release, fixing only bugs that cannot be
worked around. Please let us know if you find any showstoppers.

#5531 is still there and no workarounds are known. Also, it's specific 
for post 7.0.Xs.  Not sure if this counts as showstopper, though.


Cheers, Kyra


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: behaviour change in getDirectoryContents in GHC 7.2?

2011-11-06 Thread John Lask
for what it is worth, I would like to see both System.IO and Directory
export internal functions where the filepath is a Raw Byte representation.

I have utilities that regularly scan 100,000 of files and hash the path
the details of which are irrelevant to this discussion, the point being
that the locale encoding/decoding is not relevant in this situation and
adds unnecessary overhead that would affect the speed of the file-system
scans.

A  denotation of a filepath as an uninterpreted sequence of bytes is the
lowest common denominator for all systems that I know of and would be
worthwhile to export from the system libraries upon which other
abstractions can be built.

I agree that for the general user the current behavior is sufficient,
however exporting the raw interface would be beneficial for some users,
for instance those that have responded to this thread.


On 7/11/2011 2:42 AM, Max Bolingbroke wrote:
 On 6 November 2011 04:14, John Millikinjmilli...@gmail.com  wrote:
 For what it's worth, on my Ubuntu system, Nautilus ignores the locale
 and just treats all paths as either UTF8 or invalid.
 To me, this seems like the most reasonable option; the concept of
 locale encoding is entirely vestigal, and should only be used in
 certain specialized cases.
 
 Unfortunately non-UTF8 locale encodings are seen in practice quite
 often. I'm not sure about Linux, but certainly lots of Windows systems
 are configured with a locale encoding like GBK or Big5.
 
 Paths as text is what *Windows* programmers expect. Paths as bytes is
 what's expected by programmers on non-Windows OSes, including Linux
 and OS X.
 
 IIRC paths on OS X are guaranteed to be valid UTF-8. The only platform
 that uses bytes for paths (that we care about) is Linux.
 
 I'm not saying one is inherently better than the other, but
 considering that various UNIX  and UNIX-like operating systems have
 been using byte-based paths for near on forty years now, trying to
 abolish them by redefining the type is not a useful action.
 
 We have to:
   1. Provide an API that makes sense on all our supported OSes
   2. Have getArgs :: IO [String]
   3. Have it such that if you go to your console and write
 (./MyHaskellProgram 你好) then getArgs tells you [你好]
 
 Given these constraints I don't see any alternative to PEP-383 behaviour.
 
 If you're going to make all the System.IO stuff use text, at least
 give us an escape hatch. The unix package is ideally suited, as it's
 already inherently OS-specific. Something like this would be perfect:
 
 You can already do this with the implemented design. We have:
 
 openFile :: FilePath -  IO Handle
 
 The FilePath will be encoded in the fileSystemEncoding. On Unix this
 will have PEP383 roundtripping behaviour. So if you want openFile' ::
 [Byte] -  IO Handle you can write something like this:
 
 escape = map (\b -  if b  128 then chr b else chr (0xEF00 + b))
 openFile = openFile' . escape
 
 The bytes that reach the API call will be exactly the ones you supply.
 (You can also implement escape by just encoding the [Byte] with the
 fileSystemEncoding).
 
 Likewise, if you have a String and want to get the [Byte] we decoded
 it from, you just need to encode the String again with the
 fileSystemEncoding.
 
 If this is not enough for you please let me know, but it seems to me
 that it covers all your use cases, without any need to reimplement the
 FFI bindings.
 
 Max
 
 ___
 Glasgow-haskell-users mailing list
 Glasgow-haskell-users@haskell.org
 http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: behaviour change in getDirectoryContents in GHC 7.2?

2011-11-06 Thread Daniel Peebles
Can't we just have the usual .Internal module convention, where people who
want internals can get at them if they need to, and most people get a
simpler interface? It's amazingly frustrating when you have a library that
does 99% of what you need it to do, except for one tiny internal detail
that the author didn't foresee anyone needing, so didn't export.

2011/11/6 John Lask jvl...@hotmail.com

 for what it is worth, I would like to see both System.IO and Directory
 export internal functions where the filepath is a Raw Byte
 representation.

 I have utilities that regularly scan 100,000 of files and hash the path
 the details of which are irrelevant to this discussion, the point being
 that the locale encoding/decoding is not relevant in this situation and
 adds unnecessary overhead that would affect the speed of the file-system
 scans.

 A  denotation of a filepath as an uninterpreted sequence of bytes is the
 lowest common denominator for all systems that I know of and would be
 worthwhile to export from the system libraries upon which other
 abstractions can be built.

 I agree that for the general user the current behavior is sufficient,
 however exporting the raw interface would be beneficial for some users,
 for instance those that have responded to this thread.


 On 7/11/2011 2:42 AM, Max Bolingbroke wrote:
  On 6 November 2011 04:14, John Millikinjmilli...@gmail.com  wrote:
  For what it's worth, on my Ubuntu system, Nautilus ignores the locale
  and just treats all paths as either UTF8 or invalid.
  To me, this seems like the most reasonable option; the concept of
  locale encoding is entirely vestigal, and should only be used in
  certain specialized cases.
 
  Unfortunately non-UTF8 locale encodings are seen in practice quite
  often. I'm not sure about Linux, but certainly lots of Windows systems
  are configured with a locale encoding like GBK or Big5.
 
  Paths as text is what *Windows* programmers expect. Paths as bytes is
  what's expected by programmers on non-Windows OSes, including Linux
  and OS X.
 
  IIRC paths on OS X are guaranteed to be valid UTF-8. The only platform
  that uses bytes for paths (that we care about) is Linux.
 
  I'm not saying one is inherently better than the other, but
  considering that various UNIX  and UNIX-like operating systems have
  been using byte-based paths for near on forty years now, trying to
  abolish them by redefining the type is not a useful action.
 
  We have to:
1. Provide an API that makes sense on all our supported OSes
2. Have getArgs :: IO [String]
3. Have it such that if you go to your console and write
  (./MyHaskellProgram 你好) then getArgs tells you [你好]
 
  Given these constraints I don't see any alternative to PEP-383 behaviour.
 
  If you're going to make all the System.IO stuff use text, at least
  give us an escape hatch. The unix package is ideally suited, as it's
  already inherently OS-specific. Something like this would be perfect:
 
  You can already do this with the implemented design. We have:
 
  openFile :: FilePath -  IO Handle
 
  The FilePath will be encoded in the fileSystemEncoding. On Unix this
  will have PEP383 roundtripping behaviour. So if you want openFile' ::
  [Byte] -  IO Handle you can write something like this:
 
  escape = map (\b -  if b  128 then chr b else chr (0xEF00 + b))
  openFile = openFile' . escape
 
  The bytes that reach the API call will be exactly the ones you supply.
  (You can also implement escape by just encoding the [Byte] with the
  fileSystemEncoding).
 
  Likewise, if you have a String and want to get the [Byte] we decoded
  it from, you just need to encode the String again with the
  fileSystemEncoding.
 
  If this is not enough for you please let me know, but it seems to me
  that it covers all your use cases, without any need to reimplement the
  FFI bindings.
 
  Max
 
  ___
  Glasgow-haskell-users mailing list
  Glasgow-haskell-users@haskell.org
  http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


 ___
 Glasgow-haskell-users mailing list
 Glasgow-haskell-users@haskell.org
 http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users