DIP10005: Dependency-Carrying Declarations is now available for community feedback

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Sat Dec 24 01:20:19 PST 2016


On Saturday, 24 December 2016 at 02:23:53 UTC, Chris Wright wrote:
> Appendix A: templates that would receive 'with(import foo)' in 
> Phobos.
>
> I used a relatively simple regex to look for this. If someone 
> put more than one line between a template and its constraints, 
> or comments with certain formatting, I may have missed it. 
> However, that would violate the phobos style guide.
>
> This doesn't include templates that use constraints defined in 
> their own modules, because that module must already be parsed 
> and no efficiency gains could be realized.
>
> It also omits a few cases where the module has a strong reason 
> to import the dependency aside from template constraints. I 
> believe this was only two constraints defined in std.digest, 
> used in one or two other modules.
>
> algorithm/comparison.d:98:template among(values...)
> experimental/typecons.d:82:private template 
> implementsInterface(Source,
> Targets...)
> experimental/typecons.d:94:    template implementsInterface()
> experimental/typecons.d:126:private template 
> implementsInterface(Source,
> Targets...)
> experimental/typecons.d:184:template wrap(Targets...)
> experimental/typecons.d:237:        template wrap(Source)
> range/package.d:2069:template Take(R)
> range/package.d:3501:template Cycle(R)
> range/interfaces.d:277:template MostDerivedInputRange(R)
> range/interfaces.d:336:template InputRangeObject(R)
> numeric.d:678:template FPTemporary(F)
> conv.d:3894:template octal(alias decimalInteger)
> utf.d:1136:package template codeUnitLimit(S)
> typecons.d:1779:private mixin template RebindableCommon(T, U, 
> alias This)
> typecons.d:1838:template Rebindable(T)
> typecons.d:4239:template wrap(Targets...)
> typecons.d:4252:    template wrap(Source)
> typecons.d:4412:template wrap(Targets...)
> typecons.d:4429:template unwrap(Target)
> typecons.d:4461:template unwrap(Target)
> format.d:657:template FormatSpec(Char)
> algorithm/iteration.d:1055:template filter(alias predicate) if 
> (is(typeof
> (unaryFun!predicate)))
> internal/math/biguintcore.d:81:template maxBigDigits(T) if 
> (isIntegral!T)
> meta.d:248:package template OldAlias(T) if (!isAggregateType!T 
> || is
> (Unqual!T == T))
> meta.d:254:package template OldAlias(T) if (isAggregateType!T 
> && !is
> (Unqual!T == T))
> utf.d:3542:template byUTF(C) if (isSomeChar!C)
>
>
> Appendix B: templates that would need to be extracted out in 
> phobos, if parsing their modules cost a non-negligible amount 
> of time.
>
> std.meta:
>     allSatisfy
>     anySatisfy
>     ApplyLeft
>
> std.range.primitives:
>     hasSlicing
>     isInputRange
>     isInfinite
>
> std.traits:
>     isAggregateType
>     isAssociativeArray
>     isDynamicArray
>     isFloatingPoint
>     isImplicitlyConvertible
>     isIntegral
>     isMutable
>     isSomeChar

There are a lot of templates in Phobos that never use the 
template keyword. The proposal doesn't only apply to constraints, 
it applies to the whole declaration.


More information about the Digitalmars-d mailing list