Dear Neil,

Neil: For GHC in particular, they currently have a build system that works, 
what's the benefit of changing the build system?

John:

To make it even better. As I pointed out in my GHC ticket system feature 
request ticket (http://hackage.haskell.org/trac/ghc/ticket/3912) the build 
system is an octopus. It has tentacles that reaches into every aspect of what 
everyone is doing. I would also disagree that GHC has a build system that 
works. In its present condition it is fragile and sufficient time consuming 
that no one in their right mind would attempt to build it on a regular basis 
themselves personally. The task needs to be deferred to an automaton. This 
results in delays and paper work. People having to write back and forth to each 
other to discuss the problem. It is worse than this, however. This creates 
distance that will cause some things to fall through the cracks.

The real question, however, is can we do better? and I believe the answer to be 
resoundingly yes.

The present way of doing things is complicated and error prone even though it 
is deceptively easy comparatively speaking. Shell scripts are easy to write, 
but are a nightmare to maintain due to all sorts of things they don't get 
right. It is what we have gotten used to, however. A faulty way of doing things 
has become a part of the institution. Sounding perhaps a little like Steve Jobs 
such things are a black mark on the human spirit.

It is not my interest to be someone who mocks you from the side lines and you 
have to say in response to him, "Try doing it yourself." I am willing to pay my 
dues and not just be a critic, but someone who is in the muck working on a 
solution. So my response to Simon Marlow's most recent e-mail is, "Fair enough. 
I'll take that as a challenge."

Neil: As Simon says, I've got some experience using Haskell for writing build 
scripts. I had a fork of the Yhc build script written in Haskell, for example. 
I think it's a very good idea in general. For GHC in particular, they currently 
have a build system that works, what's the benefit of changing the build system?

John: I suppose my remark earlier about selling refrigerators to Eskimos might 
be applicable here. I have partially address this already. I just haven't 
gotten into all the details.

Neil: I think anywhere there is currently an embedded language is a good
candidate for replacing with Haskell and a DSL/library. This includes
Makefile's (and other places like buildbot etc)

John: You also spoke of the article and big O notation. I'll comment on that 
later since it will prove to be a distraction at the moment.

Neil: There are lots of things your build system can isolate you from, but the 
weirdities of shells are not one of them. You'll still have craziness with 
spaces, different programs requiring slashes (/) or (\) in different 
directions, path lengths (lower on Win2003 than XP). You've got a chance of 
abstracting some away, but it's not a panacea.

John:

I would disagree, but to disagree means that I have to go into some of the 
detail concerning how I intend to implement the code. It isn't merely that I 
hope to write it in Haskell. I am bringing with me other ideas as well. There 
is a lot of wrong thinking that we have become accustomed to. We have become 
accustomed to using a Domain Specific Language (DSL) to describe file system 
path names and such things as URLs.

One of the things that I intend to do is work with path names in a manner that 
is similar how it is done in Lisp, encoded as a data structure and not as a 
string. Though it is less convenient, it is precise. These aspects to the 
problem that you mention, the engineering constraints, can then be encoded as 
types. For example, a path name that requires backward slash as opposed to 
forward slash as the path name component separator correspond to different, 
albeit related, types. This stems from the fact that the type system does not 
merely consider ground types that refer to specific things like units of 
measure that are fixed, but also shades of gray. This is a U.S. unit as opposed 
to a British unit thanks to the Curry-Howard correspondence.

I will likely be exploring the limits of the Haskell type system. There are no 
dependent types for example, but this does not mean that the Haskell type 
system is insufficiently powerful to record a good size chunk of the explicit 
or implicit specification with precision. One possible area of research might 
be to examine how as built deviations from the specification, known as bugs, 
can be encoded using types.

I said earlier "Dependencies among files I anticipate could be treated as a 
type."

Neil: I'd be very surprised if that was possible.

John: Wait and see. You have given me something special Neil. You have given me 
evidence of non-obviousness.

I said earlier "I hope to use quasi-quotation to compensate for the syntactic 
overhead that general purpose computer programming languages have."

Neil: Haskell has very little syntactic overhead. If you write a program in
quasi-quotes you didn't really write a Haskell program (and all your
easily maintainable etc arguments are reduced).

John:

I would disagree here as well. I would concede that if the domain specific 
language were not useful and therefore unfamiliar to the maintainer you would 
have a point, however. Some care is needed to achieve a proper balance, kind of 
like the choice between short and long versions of command line options. Some 
command line options are so often used that an experienced user will have no 
trouble identifying them even though they are cryptic whereas less used command 
line options will need something less terse.

I would disagree with you that the use of quasi-quotes would cause the language 
to cease to be Haskell in that Haskell is a general purpose language. The 
domain specific language is there to make important activities convenient by 
avoiding the syntactic overhead a general purpose computer programming language 
causes. The downside of having a domain specific language is that you are 
trapped. You can't step outside of it. Even Haskell that appears unrecognizable 
due to the heavy use of quasi-quotes will retain the ability to step outside. 
Again, some care is needed to achieve a balance. The degree of convenience 
given to you by the domain specific language cannot be so great as to 
discourage the use of conventional Haskell where appropriate.

You have brought attention to some of the potential pitfalls that I certainly 
need to be aware of. You brought up a few other things, but this letter has to 
end some where. I may write further later.
_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to