JuliaLang/julia — pull request #9098 by timholy (2014-11-21 17:07:20+00:00)
Title: WIP: expunging @ngenerate and @nsplat

This one's for you, @JeffBezanson. Happy early thesis-defense.

Now that we have `stagedfunction`s/`@generated function`s, there is no need for `@ngenerate`. (`@nsplat` still might have a purpose, but without `@ngenerate` I think we might as well ditch both at once. You can fake de-splatting with `stagedfunction`s.) This is a WIP at getting rid of them. Currently if I try to convert those last few BitArray methods, I get failures: building hangs at `primes.jl`, the first file after `multidimensional.jl`. Interestingly, they all involve `@ncall`, leading me to suspect a type-inference problem. #8504 is a likely suspect.

This is broken up in a series of small steps because it was basically murder to debug this---these functions are core infrastructure, and with multiple breakages it's hard to figure out what's happening. Given that we don't fully trust stagedfunctions yet (see https://github.com/JuliaLang/julia/pull/8501#issuecomment-63922923), I also thought it would be good to ensure that `git bisect` would be as informative as possible. But if people object, I can (reluctantly) squash. Just don't ask me to bisect any problems later :smile:.

See also https://github.com/JuliaLang/Compat.jl/pull/19, which hopefully will provide backward-compatibility. I know this wasn't an exported interface, but I still felt guilty about just yanking it. I'll also write up some docs about how to convert functions.