Claus, thanks for taking the time to articulate all this, speaking as the
mentor for the project this material is invaluable. I'd particularly like
to see a wiki page collecting issues, plans and priorities too.
My own priority is to have the compilation phases exposed. One (selfish)
reason for this is that it will force a number of refactorings and cleanups
inside GHC, that we've had on the radar for some time. As soon as there's
a wiki page up I can start downloading some of the contents of my
whiteboard onto it :-)
Keeping track of comments in the parser sounds like a high priority to me,
because we have an active customer (Haddock) to drive the design and test it.
Another active customer is Yi, as I understand it they are using the GHC
API to provide the features we had in Visual Haskell. This will be useful
for driving the aspects of the design that IDEs need.
Cheers,
Simon
Claus Reinke wrote:
thanks, I was wondering about your project. Is there a project
page documenting the issues/tickets you look at, and particularly
the plan of attack as it changes in the face of reality?-) I've found
http://code.google.com/soc/2008/haskell/appinfo.html?csaid=4189AF2C8AE5E25A
which covers a lot of ground, and some interesting issues, but
is so general (and design- rather than application-driven) that I've
been worried about how much of it you'll manage (and with which
priorities), given that the GHC API is indeed exposed rather than
designed and may thus interfere with your good intentions in
unexpected ways.
Also, there are very different user needs out there, some want
just analysis or some information extraction, some want source
transformation capabilities, some want a stable portable hs-plugins
replacement, some want to work with backends, etc. . you can't
please everyone, but until your focus is known, people can't
easily complain about your priorities.
IMHO, trying to support a semantics- and comment-preserving
roundtrip in (pretty . parse) would be a good way to start (David
says he's going to look at the extracting comments/pragmas part,
but they still need to be put back in during pretty printing). It sounds
simple, and if it is, it will enable a lot more usage of the GHC API;
and if it turns out not to be simple, you'll have a first sign of what
you're up against, and can adjust your expectations!-)
Making yourself available as you've done here "I'm here; I'm going
to work on this now; please cc me if you want to express your
priorities" sounds like a good way to pull together the many strands
of interests relating to the GHC API. Now we all have to dust off
our old "wouldn't it be nice if the API could do this and that"s.
Perhaps something similar to what the type family folks are doing
would help: use the ticket tracker for individual issues, have test
cases that demonstrate the issues and their resolution, have more
detailed documents online elsewhere, and a single wiki page to
tie everything together (making it easier to find relevant tickets
and the state of the art).
[cf http://hackage.haskell.org/trac/ghc/wiki/TypeFunctionsStatus ]
over the years, quite a few issues have been raised as tickets/
email/source comments, so collecting them would be a good
way to get an idea of what is needed, deciding which of those
issues would take how much effort would be a first useful
contribution, and seeing which of these you intend to tackle
would give the community at large a better chance to comment
on your priorities in relation to their needs.
I also hope you are in touch with Chaddaï - the port of HaRe
to the GHC API did not make it as a GSoC project, but I
understand he is going to do some work in this direction
anyway.
Looking forward to an improved GHC API!-)
Claus
ps. here are some first entries for your list, and for other
interested parties following along (I'd be very interested
to hear about your progress):
-
http://code.google.com/soc/2008/haskell/appinfo.html?csaid=4189AF2C8AE5E25A
(project outline)
- http://hackage.haskell.org/trac/ghc/ticket/1467
(GHC API: expose separate compilation stages;
your main ticket so far?)
- concerning exposed phases, it would also be useful if
the interface was more uniform (eg., AST, typed AST,..)
- search for NOTE in ghc/compiler/main/GHC.hs for some
related notes from an earlier GHC/HaRe meeting
- is it possible to use standalone deriving to get a generic
programming framework over the ASTs without blowing
up GHC's code for its own use (deriving Data, etc.)?
- http://www.haskell.org/pipermail/haskell-cafe/2008-May/042616.html
(GHC API: how to get the typechecked AST?)
- http://hackage.haskell.org/trac/ghc/ticket/1886
(GHC API should preserve and provide access to comments)
- dynamic loading of Haskell code, ala hs-plugins, but without
the version/platform issues (GHCi has to be able to do this
anyway, but it would be nice to have the ugly bits hidden,
such as unsafeCast#, or whatever it was). that might require
a standard for typeReps, if I recall correctly..
- is there a way to reduce version-skew for clients of the GHC
API (currently, there is no stability guaranteed at all, so if you
don't want to live with lots of #ifdefs and breakage, you keep
delaying your fantastic GHC API-base projects "until the dust
settles")
- I'm sure there have been many more, but that's the problem:
not all these issues have been collected as they were raised;
even if you don't tackle all of them, it would be nice if you
could collect all of them
On Fri, May 9, 2008 at 8:30 PM, Claus Reinke <[EMAIL PROTECTED]>
wrote:
> Ah, I didn't think about the GHC options that change the lexical
> syntax. You're right, using the GHC lexer should be easier.
>
and, if you do that, you could also make the GHC lexer
squirrel away the comments (including pragmas, if they aren't
already in the AST) someplace safe, indexed by, or at least
annotated with,
their source locations, and make this comment/
pragma storage available via the GHC API. (1a)
then, we'd need a way to merge those comments and pragmas
back into the output during pretty printing, and we'd have made
the first small step towards source-to-source transformations:
making code
survive semantically intact over (pretty . parse). (1b)
that would still not quite fullfill the GHC API comment ticket (*),
but that was only a quick sketch, not a definite design. it might be
sufficient to let each GHC API client do its own search to associate
bits of
comment/pragma storage with bits of AST.
if i understand you correctly, you are going to do (1a), so
if you could add that to the GHC API, we'd only need (1b)
to go from useable-for-analysis-and-extraction to
useable-for-transformation.
is that going to be a problem?
claus
(*) knowing the source location of some piece of AST is not
sufficient for figuring out whether it has any immediately
preceding or following comments (there might be other AST
fragments in between, closer to the next comment).
but, if one knows the nearest comment segment for each piece of AST,
one
could then build a map where the closest
AST pieces are mapped to (Just commentID), and the other
AST pieces are mapped to Nothing.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe