On 2/13/22 05:58, kdevel wrote:
> On Sunday, 13 February 2022 at 01:27:45 UTC, Ali Çehreli wrote:
>> [...]
>> > If I remove the constraint (the if-stuff) I get
>> >
>> >     v1.d(12): Error: cannot implicitly convert expression
>> `kv.value()`
>> > of type `byte` to `string`
>> >     v1.d(23): Error: template instance
>> `v1.update!(string[int],
>> > byte[short])` error instantiating
>>
>> That's inferior because now the error message is pointing at the
>> implementation of a library function and confuses everyone.
>
> It confuses me not really. (Function) templates are by their very nature
> visible to the user and I got used to reading the implementations.

Point taken but how deep should we understand library code, not all being Phobos. My pet peeve:

import std.stdio;

void main(string[] args) {
  writefln!"hello"(42);
}

/usr/include/dlang/dmd/std/stdio.d(4442): Error: no property `msg` for type `string`

I am happy that it's caught at compile time but what 'msg' property are we talking about? What does it have to be with me?

I would like it if the

It would be better if the compilation error said:

  Must satify formatSpecsMatchArgs!("hello", int)

I am not sure whether it's practical or efficient at compile time.

> The constraints appear artificial to me: Neither are there means which
> ensure
> that a list of Constraints is complete nor is it ensured that a list of
> constraints is not overly restrictive.

Agreed.

> It seems that these Constraints
> constitute
> another class of things which may get out of sync with the actual code
> (besides program documentation, program comments and function names).

Agreed.

>
> Doesn't this re-iteration of what is already implicitly contained in the
> line
>
>     target[kv.key] = kv.value;

I don't agree with that because there is no 'target', 'kv', etc. in the programmer's code. Should we really expect the programmers be programmers? :p

> violate the DRY principle?

Agreed.

Ali

Reply via email to