Turning ForceSpecConstr/NoSpecConstr into pragmas?

Geoffrey Mainland mainland
Wed Oct 9 14:20:12 UTC 2013


I have always wondered why this stuff was an annotation instead of a
pragma in the first place. Making it a pragma sounds like a great idea
to me, but I have no idea whether or not there's a good reason to make
ForceSpecConstr an annotation instead.

Geoff

On 10/09/2013 10:13 AM, Austin Seipp wrote:
> Hello all,
>
> Early last week I was reminded of something, which was that vector/dph
> depend on the stage2 compiler - this is because both packages use
> annotations to specify ForceSpecConstr and NoSpecConstr on several key
> datatypes.
>
> For most of our platforms (now including ARM,) this should generally
> be OK, because we have stage2 and the linker available to support it.
>
> But in particular, it makes vector and dph unusable for cross
> compilers. This might be somewhat problematic for e.g. iOS or an RPi,
> where we only have a stage1 cross compiler - but it's reasonable to
> assume we may want to use vector there! And more and more libraries
> depend on vector these days.
>
> I believe these are the only instances in which vector/dph needs
> stage2. So I ask: is it reasonable to change this to a pragma built
> into the compiler? That is,
>
> ------------------------------------------------------------
> data SPEC = SPEC | SPEC2
> {-# ANN type SPEC ForceSpecConstr #-}
>
> data PArray a
>         = PArray Int# (PData  a)
> {-# ANN type PArray NoSpecConstr #-}
> -------------------------------------------------------------
>
> becomes something like:
>
> -------------------------------------------------------------
> data SPEC = SPEC | SPEC2
> {-# SPECIALIZE Constructor SPEC #-}
>
> data PArray a
>         = PArray Int# (PData  a)
> {-# NOSPECIALIZE Constructor PArray #-}
> -------------------------------------------------------------
>
> I'm not particularly interested in a bikeshedding discussion about the
> exact syntax for the pragma (although this somewhat falls in line with
> 'INLINE ConLike' as a special case,) - I just want to know if this
> sounds reasonable.
>
> Looking at SpecConstr in the compiler, there seems to be quite a lot
> of note summarising that we need a better design - in particular,
> notes about nuking NoSpecConstr (as it appeared before
> ForceSpecConstr,) and turning ForceSpecConstr into a library type of
> some sort. I don't propose changing any of this really, just removing
> the dependency on the annotations.
>
> But if someone thinks a library type would be better suited for this -
> I'm totally fine with that too and am all-ears for a suggestion.
>
> And of course, both of these can continue to be supported for a while,
> although the patches to vector, at least, would be trivial to switch
> it over.
>
> Ben, Manuel, Simon - you three are the experts here I believe.
> Thoughts? Perhaps I'm missing something key here?




More information about the ghc-devs mailing list