Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-04-01 Thread H. S. Teoh via Digitalmars-d
On Sat, Apr 01, 2017 at 02:14:25PM +, rjframe via Digitalmars-d wrote:
> On Sat, 01 Apr 2017 07:39:49 +, Stefan Koch wrote:
> 
> > On Saturday, 1 April 2017 at 02:12:46 UTC, Walter Bright wrote:
> >> On 3/31/2017 6:33 PM, Jonathan M Davis via Digitalmars-d wrote:
> >>> [...]
> >>
> >> I know. But it is worth it. It should enable D compilers to scale
> >> to handling very large imports.
> > 
> > This should be optional and controlled via a switch like
> > --fast-parse ?
> 
> I wonder if `dmd -o-` should continue to parse everything (possibly
> including unittests, which it currently doesn't do) rather than parse
> lazily. Though it would benefit from a speed increase, it's used to
> syntax check and would be more useful if it actually does parse
> everything.

What's wrong with `dmd -unittest -o-`?


T

-- 
Unix is my IDE. -- Justin Whear


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-04-01 Thread rjframe via Digitalmars-d
On Sat, 01 Apr 2017 07:39:49 +, Stefan Koch wrote:

> On Saturday, 1 April 2017 at 02:12:46 UTC, Walter Bright wrote:
>> On 3/31/2017 6:33 PM, Jonathan M Davis via Digitalmars-d wrote:
>>> [...]
>>
>> I know. But it is worth it. It should enable D compilers to scale to
>> handling very large imports.
> 
> This should be optional and controlled via a switch like --fast-parse ?

I wonder if `dmd -o-` should continue to parse everything (possibly 
including unittests, which it currently doesn't do) rather than parse 
lazily. Though it would benefit from a speed increase, it's used to syntax 
check and would be more useful if it actually does parse everything.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-04-01 Thread Patrick Schluter via Digitalmars-d

On Saturday, 1 April 2017 at 09:20:06 UTC, Walter Bright wrote:

On 4/1/2017 12:39 AM, Stefan Koch wrote:
This should be optional and controlled via a switch like 
--fast-parse ?


Too many switches are a disease, and we already have an awful 
lot.


The non-parsing of unittests have been there for quite a while 
now, and have not caused any trouble. I see that as good 
evidence we're on a good path with this.


Indeed. There's no need for such a switch as there is already one 
-unittest.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-04-01 Thread Walter Bright via Digitalmars-d

On 4/1/2017 12:39 AM, Stefan Koch wrote:

This should be optional and controlled via a switch like --fast-parse ?


Too many switches are a disease, and we already have an awful lot.

The non-parsing of unittests have been there for quite a while now, and have not 
caused any trouble. I see that as good evidence we're on a good path with this.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-04-01 Thread Stefan Koch via Digitalmars-d

On Saturday, 1 April 2017 at 02:12:46 UTC, Walter Bright wrote:

On 3/31/2017 6:33 PM, Jonathan M Davis via Digitalmars-d wrote:

[...]


I know. But it is worth it. It should enable D compilers to 
scale to handling very large imports.


This should be optional and controlled via a switch like 
--fast-parse ?


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-31 Thread Walter Bright via Digitalmars-d

On 3/31/2017 6:33 PM, Jonathan M Davis via Digitalmars-d wrote:

There are certainly advantages to having the compiler skip over code where
it can, but it's pretty weird for the language to require that something be
valid and then have the compiler ignore it. That makes it really easy to
have something compile on one compiler but not another. Granted, properly
unit testing and testing code on a variety of platforms (so that all of the
version blocks and static if branches are tested) should catch those issues
regardless, but it does seem a bit off to me for the language to require
something and for the compiler to not care - especially the reference
compiler.


I know. But it is worth it. It should enable D compilers to scale to handling 
very large imports.




Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-31 Thread Jonathan M Davis via Digitalmars-d
On Friday, March 31, 2017 17:49:48 Walter Bright via Digitalmars-d wrote:
> One of my longer term goals for DMD is to make it as lazy as possible -
> only parse and do semantic analysis if the result is actually needed. Not
> doing the parse for unused unittest blocks is a step in that direction.
>
> The code is still required to be correct, but the compiler isn't required
> to diagnose it.

There are certainly advantages to having the compiler skip over code where
it can, but it's pretty weird for the language to require that something be
valid and then have the compiler ignore it. That makes it really easy to
have something compile on one compiler but not another. Granted, properly
unit testing and testing code on a variety of platforms (so that all of the
version blocks and static if branches are tested) should catch those issues
regardless, but it does seem a bit off to me for the language to require
something and for the compiler to not care - especially the reference
compiler.

- Jonathan M Davis



Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-31 Thread Walter Bright via Digitalmars-d

On 3/29/2017 4:16 AM, deadalnix wrote:

I was wondering. When uniitests aren't going to run, it may be desirable to skip
parsing altogether, just lexing and counting braces until the matching closing
brace is found.

Obviously, this means that no error will be found in unittests blocks. That can
contain pretty much anything that lex, so it's even more lax than what's allowed
inside a static if.

Is that an acceptable tradeof ?



One of my longer term goals for DMD is to make it as lazy as possible - only 
parse and do semantic analysis if the result is actually needed. Not doing the 
parse for unused unittest blocks is a step in that direction.


The code is still required to be correct, but the compiler isn't required to 
diagnose it.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-31 Thread deadalnix via Digitalmars-d

On Thursday, 30 March 2017 at 20:29:26 UTC, Dukc wrote:

On Thursday, 30 March 2017 at 17:22:20 UTC, Stefan Koch wrote:

SDC has the goal to be more principled.
And Not to be Mr. fast and loose, right ?
If a file parses it'd better be syntactically correct!
All of it.


Just an idea, but could the solution for SDC be to enable 
unittests by default, disabling them would be explicit? That 
would sure make using it alot more principled that dmd, 
regardless whether it syntax checks unittests when they are 
disabled.


SDC uses an utility called sdunit to JIT the unittest. Right now, 
sdunit doesn't handle exceptions so its utility is limited, but 
it's getting there.




Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-31 Thread Jacob Carlborg via Digitalmars-d

On 2017-03-29 13:16, deadalnix wrote:

I was wondering. When uniitests aren't going to run, it may be desirable
to skip parsing altogether, just lexing and counting braces until the
matching closing brace is found.

Obviously, this means that no error will be found in unittests blocks.
That can contain pretty much anything that lex, so it's even more lax
than what's allowed inside a static if.

Is that an acceptable tradeof ?


I know Andrei has said he want to do this for as much as possible.

--
/Jacob Carlborg


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread Dukc via Digitalmars-d

On Thursday, 30 March 2017 at 17:22:20 UTC, Stefan Koch wrote:

SDC has the goal to be more principled.
And Not to be Mr. fast and loose, right ?
If a file parses it'd better be syntactically correct!
All of it.


Just an idea, but could the solution for SDC be to enable 
unittests by default, disabling them would be explicit? That 
would sure make using it alot more principled that dmd, 
regardless whether it syntax checks unittests when they are 
disabled.





Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread XavierAP via Digitalmars-d

On Thursday, 30 March 2017 at 09:04:28 UTC, ixid wrote:

On Thursday, 30 March 2017 at 06:53:47 UTC, XavierAP wrote:


I would consider this harmful... The spec already states this 
about unit tests, so I'd guess the decision was taken in the 
past conscientiously.


If you're worried about compilation time, you can always 
define your unit tests in separate files that are included for 
compilation only when needed.


Why is it harmful (actually asking, not telling you you're 
wrong)? I thought we were going to use a pay for what you use 
philosophy, if a unit test is not run then why is it paid for?


rjframe and Stefan have said it better than I could. I do 
understand the more I think about it how people could be worried 
about the downsides. Priorities depends on user cases and some 
personal inclination. But with the stated arguments I would think 
it's a bit of a slippery slope. And moreover for people so 
concerned with compilation time there are easy clean workarounds 
such as separate files. Compilers could implement something 
analogous to pre-compiled headers for this case.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread Stefan Koch via Digitalmars-d

On Thursday, 30 March 2017 at 14:28:41 UTC, deadalnix wrote:
On Wednesday, 29 March 2017 at 19:32:50 UTC, Vladimir Panteleev 
wrote:

Sorry, is this not already the case?

$ dmd test.d
$ cat test.d
void main()
{
import std.stdio;
writeln("Hello, world!");
}


unittest
{
foo bar {} baz more-syntax!errors)blah
}
$ dmd test.d
$ ./test
Hello, world!


Alright then, it looks like it is :)

I was asking for SDC.


SDC has the goal to be more principled.
And Not to be Mr. fast and loose, right ?
If a file parses it'd better be syntactically correct!
All of it.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread deadalnix via Digitalmars-d
On Wednesday, 29 March 2017 at 19:32:50 UTC, Vladimir Panteleev 
wrote:

Sorry, is this not already the case?

$ dmd test.d
$ cat test.d
void main()
{
import std.stdio;
writeln("Hello, world!");
}


unittest
{
foo bar {} baz more-syntax!errors)blah
}
$ dmd test.d
$ ./test
Hello, world!


Alright then, it looks like it is :)

I was asking for SDC.



Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread drug via Digitalmars-d

30.03.2017 14:47, rjframe пишет:

On Thu, 30 Mar 2017 09:04:28 +, ixid wrote:


Why is it harmful (actually asking, not telling you you're wrong)? I
thought we were going to use a pay for what you use philosophy, if a
unit test is not run then why is it paid for?


A person that doesn't run `dmd -unittest` (or `dub test`) prior to
committing code could commit broken tests. In my mind if you write tests
but don't run them, they're broken anyway.

--Ryan

Broken test could be parsable, but still broken. You need to run it to 
check if it is (not) broken anyway.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread rjframe via Digitalmars-d
On Thu, 30 Mar 2017 09:04:28 +, ixid wrote:

> Why is it harmful (actually asking, not telling you you're wrong)? I
> thought we were going to use a pay for what you use philosophy, if a
> unit test is not run then why is it paid for?

A person that doesn't run `dmd -unittest` (or `dub test`) prior to 
committing code could commit broken tests. In my mind if you write tests 
but don't run them, they're broken anyway.

--Ryan


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread Claude via Digitalmars-d
On Wednesday, 29 March 2017 at 19:43:52 UTC, Vladimir Panteleev 
wrote:
On Wednesday, 29 March 2017 at 19:32:50 UTC, Vladimir Panteleev 
wrote:

On Wednesday, 29 March 2017 at 11:16:28 UTC, deadalnix wrote:
I was wondering. When uniitests aren't going to run, it may 
be desirable to skip parsing altogether, just lexing and 
counting braces until the matching closing brace is found.


Sorry, is this not already the case?


https://github.com/dlang/dmd/pull/4704


To quote Walter Bright from that PR, unittest can contain invalid 
code ONLY if you never compile with -unittest (obviously), -D or 
-H.


It looks consistent to me: just don't parse it in release mode.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread ixid via Digitalmars-d

On Thursday, 30 March 2017 at 06:53:47 UTC, XavierAP wrote:

On Wednesday, 29 March 2017 at 11:16:28 UTC, deadalnix wrote:


Is that an acceptable tradeof ?


I would consider this harmful... The spec already states this 
about unit tests, so I'd guess the decision was taken in the 
past conscientiously.


If you're worried about compilation time, you can always define 
your unit tests in separate files that are included for 
compilation only when needed.


Why is it harmful (actually asking, not telling you you're 
wrong)? I thought we were going to use a pay for what you use 
philosophy, if a unit test is not run then why is it paid for?


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-30 Thread XavierAP via Digitalmars-d

On Wednesday, 29 March 2017 at 11:16:28 UTC, deadalnix wrote:


Is that an acceptable tradeof ?


I would consider this harmful... The spec already states this 
about unit tests, so I'd guess the decision was taken in the past 
conscientiously.


If you're worried about compilation time, you can always define 
your unit tests in separate files that are included for 
compilation only when needed.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-29 Thread Vladimir Panteleev via Digitalmars-d
On Wednesday, 29 March 2017 at 19:32:50 UTC, Vladimir Panteleev 
wrote:

On Wednesday, 29 March 2017 at 11:16:28 UTC, deadalnix wrote:
I was wondering. When uniitests aren't going to run, it may be 
desirable to skip parsing altogether, just lexing and counting 
braces until the matching closing brace is found.


Sorry, is this not already the case?


https://github.com/dlang/dmd/pull/4704


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-29 Thread Stefan Koch via Digitalmars-d
On Wednesday, 29 March 2017 at 19:32:50 UTC, Vladimir Panteleev 
wrote:

On Wednesday, 29 March 2017 at 11:16:28 UTC, deadalnix wrote:
I was wondering. When uniitests aren't going to run, it may be 
desirable to skip parsing altogether, just lexing and counting 
braces until the matching closing brace is found.


Sorry, is this not already the case?

$ dmd test.d
$ cat test.d
void main()
{
import std.stdio;
writeln("Hello, world!");
}


unittest
{
foo bar {} baz more-syntax!errors)blah
}
$ dmd test.d
$ ./test
Hello, world!


Surprise!


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-29 Thread Vladimir Panteleev via Digitalmars-d

On Wednesday, 29 March 2017 at 11:16:28 UTC, deadalnix wrote:
I was wondering. When uniitests aren't going to run, it may be 
desirable to skip parsing altogether, just lexing and counting 
braces until the matching closing brace is found.


Sorry, is this not already the case?

$ dmd test.d
$ cat test.d
void main()
{
import std.stdio;
writeln("Hello, world!");
}


unittest
{
foo bar {} baz more-syntax!errors)blah
}
$ dmd test.d
$ ./test
Hello, world!



Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-29 Thread Stefan Koch via Digitalmars-d

On Wednesday, 29 March 2017 at 11:16:28 UTC, deadalnix wrote:
I was wondering. When uniitests aren't going to run, it may be 
desirable to skip parsing altogether, just lexing and counting 
braces until the matching closing brace is found.


Obviously, this means that no error will be found in unittests 
blocks. That can contain pretty much anything that lex, so it's 
even more lax than what's allowed inside a static if.


Is that an acceptable tradeof ?


I would not do this trade off,
It's highly surprising since no other language feature works that 
way.

Also parsing is rather cheap.



Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-29 Thread rikki cattermole via Digitalmars-d

On 29/03/2017 1:16 PM, deadalnix wrote:

On Wednesday, 29 March 2017 at 11:22:59 UTC, rikki cattermole wrote:

Which is basically what you said.


It isn't. version needs to be parsed and thus, grammatically valid.


Hmm, well that is another thing that could be disabled to shave some 
time off the build times I suppose.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-29 Thread deadalnix via Digitalmars-d
On Wednesday, 29 March 2017 at 11:22:59 UTC, rikki cattermole 
wrote:

Which is basically what you said.


It isn't. version needs to be parsed and thus, grammatically 
valid.


Re: Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-29 Thread rikki cattermole via Digitalmars-d

On 29/03/2017 12:16 PM, deadalnix wrote:

I was wondering. When uniitests aren't going to run, it may be desirable
to skip parsing altogether, just lexing and counting braces until the
matching closing brace is found.

Obviously, this means that no error will be found in unittests blocks.
That can contain pretty much anything that lex, so it's even more lax
than what's allowed inside a static if.

Is that an acceptable tradeof ?


I see no reason to not to treat it as:

version(unittest) {
void func_() {
...
}
}

Which is basically what you said.


Is it acceptable to not parse unittest blocks when unittests are disabled ?

2017-03-29 Thread deadalnix via Digitalmars-d
I was wondering. When uniitests aren't going to run, it may be 
desirable to skip parsing altogether, just lexing and counting 
braces until the matching closing brace is found.


Obviously, this means that no error will be found in unittests 
blocks. That can contain pretty much anything that lex, so it's 
even more lax than what's allowed inside a static if.


Is that an acceptable tradeof ?