Re: What's going on with std.experimental.lexer?

2014-06-13 Thread Tom Browder via Digitalmars-d
On Wed, Jun 4, 2014 at 4:12 PM, Brian Schott via Digitalmars-d
digitalmars-d@puremagic.com wrote:
 I've been looking at ways to optimize the D lexer's operation using SIMD

Brian, i just found the lexer code repo (and fixed the broken code
link on the wiki), but the review thread on the wiki looks very old.

The wiki page:

  http://wiki.dlang.org/Review_Queue

The review thread link:

  http://forum.dlang.org/post/aiipgaqyddjijpjiu...@forum.dlang.org

Thanks.

Best regards,

-Tom


Re: What's going on with std.experimental.lexer?

2014-06-13 Thread Dicebot via Digitalmars-d
On Friday, 13 June 2014 at 12:01:00 UTC, Tom Browder via 
Digitalmars-d wrote:

On Wed, Jun 4, 2014 at 4:12 PM, Brian Schott via Digitalmars-d
digitalmars-d@puremagic.com wrote:
I've been looking at ways to optimize the D lexer's operation 
using SIMD


Brian, i just found the lexer code repo (and fixed the broken 
code
link on the wiki), but the review thread on the wiki looks very 
old.


The wiki page:

  http://wiki.dlang.org/Review_Queue

The review thread link:

  
http://forum.dlang.org/post/aiipgaqyddjijpjiu...@forum.dlang.org


Thanks.

Best regards,

-Tom


Last formal review has happened quite some time ago, this is 
correct. Much has been done since then. Anyway, I am ready to 
proceed with it as soon as Brian is.


Re: What's going on with std.experimental.lexer?

2014-06-13 Thread Dejan Lekic via Digitalmars-d

Please no.  See: javax

Spelling out 'experimental' is probably the best, for all those 
reasons

already stated.


What's wrong with javax?


Re: What's going on with std.experimental.lexer?

2014-06-13 Thread Dicebot via Digitalmars-d

On Friday, 13 June 2014 at 14:59:55 UTC, Dejan Lekic wrote:

Please no.  See: javax

Spelling out 'experimental' is probably the best, for all 
those reasons

already stated.


What's wrong with javax?


The fact that it started as same experimental package but stuff 
there never got moved to main namespace or actually changed in 
breaking fashion. Because many people missed experimental part 
and started using it as normal standard library package.


Re: What's going on with std.experimental.lexer?

2014-06-13 Thread dennis luehring via Digitalmars-d

Am 13.06.2014 16:59, schrieb Dejan Lekic:

Please no.  See: javax

Spelling out 'experimental' is probably the best, for all those
reasons
already stated.


What's wrong with javax?



experimental is 100% clear and simple to understand beeing evil

javax was interpreted as eXtendet or eXtra or whatever, so people have
no problem in using experimental stuff all the while


Re: What's going on with std.experimental.lexer?

2014-06-10 Thread Jonathan M Davis via Digitalmars-d
On Mon, 09 Jun 2014 14:23:59 -0700
Andrei Alexandrescu via Digitalmars-d digitalmars-d@puremagic.com
wrote:

 On 6/9/14, 2:15 PM, Dejan Lekic wrote:

  I am more for stdx, which is what some developers already use as
  package name for experimental stuff.

 The way I see it is instead of explaining stdx stands for the
 experimental part of std I'd rather use std.experimental which
 explains itself.

 We added immutable after having explained to a million people
 invariant in this context means immutable.

That and the fact that we'd like to avoid the javax disaster. std.experimental
_should_ be annoyingly long and obvious. We want people to use it, but it
needs to be clear that it's temporary and _experimental_ until it actually
ends up in std.

- Jonathan M Davis


Re: What's going on with std.experimental.lexer?

2014-06-10 Thread Iain Buclaw via Digitalmars-d
On 10 June 2014 07:26, Jonathan M Davis via Digitalmars-d
digitalmars-d@puremagic.com wrote:
 On Mon, 09 Jun 2014 14:23:59 -0700
 Andrei Alexandrescu via Digitalmars-d digitalmars-d@puremagic.com
 wrote:

 On 6/9/14, 2:15 PM, Dejan Lekic wrote:

  I am more for stdx, which is what some developers already use as
  package name for experimental stuff.

 The way I see it is instead of explaining stdx stands for the
 experimental part of std I'd rather use std.experimental which
 explains itself.

 We added immutable after having explained to a million people
 invariant in this context means immutable.

 That and the fact that we'd like to avoid the javax disaster. std.experimental
 _should_ be annoyingly long and obvious. We want people to use it, but it
 needs to be clear that it's temporary and _experimental_ until it actually
 ends up in std.


I agree all the way with std.experimental as the package name.  Though
I might throw in an alternative argument to stdx and instead promote
unsafe.* or std.unsafe.  ;-)


Re: What's going on with std.experimental.lexer?

2014-06-10 Thread David Gileadi via Digitalmars-d

On 6/10/14, 3:57 AM, Iain Buclaw via Digitalmars-d wrote:

I agree all the way with std.experimental as the package name.  Though
I might throw in an alternative argument to stdx and instead promote
unsafe.* or std.unsafe.  ;-)


The only issue I see with *.unsafe.* is that it sounds related to 
@safety. So far I haven't seen a better name than std.experimental.


Re: What's going on with std.experimental.lexer?

2014-06-10 Thread Steven Schveighoffer via Digitalmars-d
On Tue, 10 Jun 2014 10:31:59 -0400, David Gileadi gilea...@nspmgmail.com  
wrote:



On 6/10/14, 3:57 AM, Iain Buclaw via Digitalmars-d wrote:

I agree all the way with std.experimental as the package name.  Though
I might throw in an alternative argument to stdx and instead promote
unsafe.* or std.unsafe.  ;-)


The only issue I see with *.unsafe.* is that it sounds related to  
@safety. So far I haven't seen a better name than std.experimental.


If it weren't a keyword, volatile would be a very good package name for  
this.


-Steve


Re: What's going on with std.experimental.lexer?

2014-06-09 Thread Brian Schott via Digitalmars-d

On Friday, 6 June 2014 at 23:50:40 UTC, Brian Schott wrote:

SIMD reduces execution time by 5.15% with DMD.
Compiling the non-SIMD code with GDC reduces execution time by 
42.39%.


So... There's that.


Changing the code generator to output a set of if statements that 
implements a binary search did more-or-less nothing with the DMD 
timings, but brought GDC's lead up to 49%. (i.e. the GDC-compiled 
version executes in 51% of the time that the DMD-compiled version 
does)


Re: What's going on with std.experimental.lexer?

2014-06-09 Thread Dejan Lekic via Digitalmars-d

On Thursday, 5 June 2014 at 10:57:37 UTC, Dicebot wrote:

On Wednesday, 4 June 2014 at 21:12:25 UTC, Brian Schott wrote:
I've been looking at ways to optimize the D lexer's operation 
using SIMD instructions. I'm not yet sure if I'll need to 
change the lexer generator's API to do this. I'm going to wait 
until I have my proof-of-concept code and some benchmark 
results before asking for a voting thread or creating a pull 
request.


I still thing we should use it more like `std.staging` - once 
your updates are ready, go through review/voting and keep 
module in `std.experimental` for at least one DMD release 
before adding to Phobos core.


This also means relaxing API requirements a lot for initial 
inclusion.


I am more for stdx, which is what some developers already use 
as package name for experimental stuff.


Re: What's going on with std.experimental.lexer?

2014-06-09 Thread Andrei Alexandrescu via Digitalmars-d

On 6/9/14, 2:15 PM, Dejan Lekic wrote:

On Thursday, 5 June 2014 at 10:57:37 UTC, Dicebot wrote:

On Wednesday, 4 June 2014 at 21:12:25 UTC, Brian Schott wrote:

I've been looking at ways to optimize the D lexer's operation using
SIMD instructions. I'm not yet sure if I'll need to change the lexer
generator's API to do this. I'm going to wait until I have my
proof-of-concept code and some benchmark results before asking for a
voting thread or creating a pull request.


I still thing we should use it more like `std.staging` - once your
updates are ready, go through review/voting and keep module in
`std.experimental` for at least one DMD release before adding to
Phobos core.

This also means relaxing API requirements a lot for initial inclusion.


I am more for stdx, which is what some developers already use as
package name for experimental stuff.


The way I see it is instead of explaining stdx stands for the 
experimental part of std I'd rather use std.experimental which explains 
itself.


We added immutable after having explained to a million people 
invariant in this context means immutable.



Andrei


Re: What's going on with std.experimental.lexer?

2014-06-09 Thread Jeremy Powers via Digitalmars-d
On Mon, Jun 9, 2014 at 2:15 PM, Dejan Lekic via Digitalmars-d 
digitalmars-d@puremagic.com wrote:

 I am more for stdx, which is what some developers already use as package
 name for experimental stuff.


Please no.  See: javax

Spelling out 'experimental' is probably the best, for all those reasons
already stated.


Re: What's going on with std.experimental.lexer?

2014-06-09 Thread dennis luehring via Digitalmars-d

Am 09.06.2014 22:21, schrieb Brian Schott:

On Friday, 6 June 2014 at 23:50:40 UTC, Brian Schott wrote:

SIMD reduces execution time by 5.15% with DMD.
Compiling the non-SIMD code with GDC reduces execution time by
42.39%.

So... There's that.


Changing the code generator to output a set of if statements that
implements a binary search did more-or-less nothing with the DMD
timings, but brought GDC's lead up to 49%. (i.e. the GDC-compiled
version executes in 51% of the time that the DMD-compiled version
does)



the LLVM optimizer is also very good (sometimes far better then the gcc 
one) - what are your LDC timings?


Re: What's going on with std.experimental.lexer?

2014-06-08 Thread dennis luehring via Digitalmars-d

Am 07.06.2014 01:50, schrieb Brian Schott:

On Friday, 6 June 2014 at 00:33:23 UTC, Brian Schott wrote:

Implementing some SIMD code just in the lexWhitespace function
causes a drop in total lexing time of roughly 3.7%. This looks
promising so far, so I'm going to implement similar code in
lexStringLiteral, lexSlashStarComment, lexSlashSlashComment,
and lexSlashPlusComment.


Some moe numbers:

SIMD reduces execution time by 5.15% with DMD.
Compiling the non-SIMD code with GDC reduces execution time by
42.39%.

So... There's that.



thats why im always puzzled when people start to optimze algorithms 
based on DMD results - currently one should always compare any results 
before optimization with GDC/LDC


Re: What's going on with std.experimental.lexer?

2014-06-08 Thread Martin Nowak via Digitalmars-d

On 06/08/2014 08:21 PM, dennis luehring wrote:

thats why im always puzzled when people start to optimze algorithms
based on DMD results - currently one should always compare any results
before optimization with GDC/LDC


I second that, dmd results are easily misleading as you often optimize 
around backend deficiencies.


Re: What's going on with std.experimental.lexer?

2014-06-06 Thread Jonathan M Davis via Digitalmars-d
On Thu, 05 Jun 2014 10:57:35 +
Dicebot via Digitalmars-d digitalmars-d@puremagic.com wrote:

 On Wednesday, 4 June 2014 at 21:12:25 UTC, Brian Schott wrote:
  I've been looking at ways to optimize the D lexer's operation
  using SIMD instructions. I'm not yet sure if I'll need to
  change the lexer generator's API to do this. I'm going to wait
  until I have my proof-of-concept code and some benchmark
  results before asking for a voting thread or creating a pull
  request.

 I still thing we should use it more like `std.staging` - once
 your updates are ready, go through review/voting and keep module
 in `std.experimental` for at least one DMD release before adding
 to Phobos core.

 This also means relaxing API requirements a lot for initial
 inclusion.

Yeah. std.experimental really should be for stuff that's gone through the
review process and is essentially ready for inclusion in Phobos but needs more
real world usage to make sure that it really is fully ready to be merged into
std and then have its API frozen. It really doesn't make any sense to put
anything that's in more flux than that in there, because the release cycle is
just way too long for it.

Now, Brian's lexer might effectively be at that point already, I don't know.
It's been reviewed before, but I generally haven't had much time to look it
over for those reviews and don't know what state it's currently in. So, if its
API is close enough to final at this point, then it could probably be put in
std.experimental, but if it's still in a lot of flux, then that probably isn't
appropriate.

We do need to figure out what the official process is on this though so that
it's clear when it's appropriate for something to go in std.experimental,
otherwise we'll have folks who keep trying to put stuff in there which really
isn't ready yet, and we'll keep end up arguing over what can and can't go in
there.

- Jonathan M Davis


Re: What's going on with std.experimental.lexer?

2014-06-06 Thread Brian Schott via Digitalmars-d

On Friday, 6 June 2014 at 00:33:23 UTC, Brian Schott wrote:
Implementing some SIMD code just in the lexWhitespace function 
causes a drop in total lexing time of roughly 3.7%. This looks 
promising so far, so I'm going to implement similar code in 
lexStringLiteral, lexSlashStarComment, lexSlashSlashComment, 
and lexSlashPlusComment.


Some moe numbers:

SIMD reduces execution time by 5.15% with DMD.
Compiling the non-SIMD code with GDC reduces execution time by 
42.39%.


So... There's that.


Re: What's going on with std.experimental.lexer?

2014-06-05 Thread Philpax via Digitalmars-d
I've been meaning to mention this, but I use 
std.experimental.lexer in a code generation tool for our project; 
it's worked well so far, and I'd happily recommend its use. 
Looking forward to further updates.


Re: What's going on with std.experimental.lexer?

2014-06-05 Thread Dicebot via Digitalmars-d

On Wednesday, 4 June 2014 at 21:12:25 UTC, Brian Schott wrote:
I've been looking at ways to optimize the D lexer's operation 
using SIMD instructions. I'm not yet sure if I'll need to 
change the lexer generator's API to do this. I'm going to wait 
until I have my proof-of-concept code and some benchmark 
results before asking for a voting thread or creating a pull 
request.


I still thing we should use it more like `std.staging` - once 
your updates are ready, go through review/voting and keep module 
in `std.experimental` for at least one DMD release before adding 
to Phobos core.


This also means relaxing API requirements a lot for initial 
inclusion.


Re: What's going on with std.experimental.lexer?

2014-06-05 Thread Brian Schott via Digitalmars-d

On Wednesday, 4 June 2014 at 21:12:25 UTC, Brian Schott wrote:
I've been looking at ways to optimize the D lexer's operation 
using SIMD instructions. I'm not yet sure if I'll need to 
change the lexer generator's API to do this. I'm going to wait 
until I have my proof-of-concept code and some benchmark 
results before asking for a voting thread or creating a pull 
request.


Implementing some SIMD code just in the lexWhitespace function 
causes a drop in total lexing time of roughly 3.7%. This looks 
promising so far, so I'm going to implement similar code in 
lexStringLiteral, lexSlashStarComment, lexSlashSlashComment, and 
lexSlashPlusComment.


So far this only uses SSE2 instructions, so all 64-bit x86 
processors can benefit from this. (SSE4.2 would allow us to do 
more interesting things, but it's not as common)