First, it's possible that the docs are out of date; you should benchmark this
yourself before getting worried about it.
Second, hoisting optimizations are mostly performed by LLVM (see
createLICMPass), not julia. So you might as well ask this question over at
LLVM.
Best,
--Tim
On Wednesday, May 11, 2016 02:34:56 AM Ford Ox wrote:
> From docs:
>
> macro r_str(p)
>
> > Regex(p)
> > end
> >
> >
> > That’s all. This macro says that the literal contents of the string
> > literal r"^\s*(?:#|$)" should be passed to the
> > @r_str macro and the result of that expansion should be placed in the
> > syntax tree where the string literal occurs. In
> > other words, the expression r"^\s*(?:#|$)" is equivalent to placing the
> > following object directly into the syntax
> > tree:
> > Regex("^\\s*(?:#|\$)")
> >
> >
> > Not only is the string literal form shorter and far more convenient, but
> > it is also more efficient: since the regular
> > expression is compiled and the Regex object is actually created when the
> > code is compiled, the compilation occurs
> > only once, rather than every time the code is executed. Consider if the
> > regular expression occurs in a loop:
> > for line = lines
> > m = match(r"^\s*(?:#|$)", line)
> > if m == nothing
> > # non-comment
> > else
> > # comment
> > end
> > end
> >
> > Shouldn't the compiler optimize this code *on its own* like this ?
>
> re = Regex("^\\s*(?:#|\$)")
> for line = lines
> m = match(re, line)
> if m == nothing
> # non-comment
> else
> # comment
> end
> end
>
> This is kind of optimization which is really easy to detect and and execute.
> How is that so that julia is not able to do that?