Bye bye, fast compilation times
Steven Schveighoffer
schveiguy at yahoo.com
Tue Feb 6 05:45:35 UTC 2018
On 2/6/18 12:35 AM, Dmitry Olshansky wrote:
> On Tuesday, 6 February 2018 at 04:35:42 UTC, Steven Schveighoffer wrote:
>> On 2/5/18 11:09 PM, psychoticRabbit wrote:
>>> On Monday, 5 February 2018 at 21:27:57 UTC, H. S. Teoh wrote:
>>>>
>>>> Comment out the call to `regex()`, and I get:
>>>>
>>>> ------
>>>> real 0m0.285s
>>>> user 0m0.262s
>>>> sys 0m0.023s
>>>> ------
>>>>
>>>
>>> regex is not the only one I avoid..
>>>
>>> how long you think this takes to compile?
>>> (try ldc2 too ..just for laughs ;-)
>>>
>>> ----
>>> import std.net.isemail;
>>>
>>> void main()
>>> {
>>> auto checkEmail = "someone at somewhere.com".isEmail();
>>> }
>>> ----
>>
>> I was surprised at this, then I looked at the first line of isEmail:
>>
>> static ipRegex =
>> ctRegex!(`\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}`~
>>
>> `(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$`.to!(const(Char)[]));
>>
>> So it's really still related to regex.
>
>
> That’s really bad idea - isEmail is template so the burden of freaking
> slow ctRegex
> is paid on per instantiation basis. Could be horrible with separate
> compilation.
Obviously it is horrible. On my mac, it took about 2.5 seconds to
compile this one line.
I'm not sure how to fix it though... I suppose you could make it 3
overloads, but this defeats a lot of the purpose of having templates in
the first place.
-Steve
More information about the Digitalmars-d
mailing list