www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Mono-D v0.4.1.2 - Heavily improved performance + Completion bugs

reply "alex" <info alexanderbothe.com> writes:
Hi everyone,

Right after the GSoC finished (I'm really sure I passed :)), I've 
just found more time to improve things drastically:

By using a nice combination of storing AST children both sorted 
by name in a dictionary and in normal list, I was able to 
increase the resolution performance extremely - that means it 
takes ~0.3 milliseconds instead of ~3ms to resolve a normal 
symbol like a local variable or a local class definition.
As a side effect, UFCS completion and preparation right after 
startup gained a maximum of performance boost! Tooltips and 
(later on) semantic highlighting could be done even more faster :)

Then I fixed several issues with template parameter deduction - 
and figured out several bugs or a kinda undefined behaviour of 
dmd:

class A(T) {
	class SubClass {}
}
class C(U: A!W.SubClass, W){}
class D : C!(A!int.SubClass) { } // is not allowed, but A!int is 
-- why?

Furthermore I fixed the parameter completion on this() and 
super() expressions, what implies a great usability bonus imho. 
Not to forget all the classic null-check issues and smaller bugs.



Cheers,
Alex

http://mono-d.alexanderbothe.com
https://github.com/aBothe/Mono-D/issues
Aug 23 2012
next sibling parent Piotr Szturmaj <bncrbme jadamspam.pl> writes:
alex wrote:
 Then I fixed several issues with template parameter deduction - and
 figured out several bugs or a kinda undefined behaviour of dmd:

 class A(T) {
      class SubClass {}
 }
 class C(U: A!W.SubClass, W){}
 class D : C!(A!int.SubClass) { } // is not allowed, but A!int is -- why?

try marking SubClass with static keyword.
Aug 23 2012
prev sibling next sibling parent "alex" <info alexanderbothe.com> writes:
On Thursday, 23 August 2012 at 23:23:39 UTC, Piotr Szturmaj wrote:
 alex wrote:
 Then I fixed several issues with template parameter deduction 
 - and
 figured out several bugs or a kinda undefined behaviour of dmd:

 class A(T) {
     class SubClass {}
 }
 class C(U: A!W.SubClass, W){}
 class D : C!(A!int.SubClass) { } // is not allowed, but A!int 
 is -- why?

try marking SubClass with static keyword.

This works indeed, but nervertheless not for templated sub classes like ... { static class SubClass(U) {} }
Aug 23 2012
prev sibling next sibling parent reply "F i L" <witte2008 gmail.com> writes:
http://i3.kym-cdn.com/entries/icons/original/000/004/128/BRILLIANT_.jpg

Great work as always, Alex :D
Aug 23 2012
parent Piotr Szturmaj <bncrbme jadamspam.pl> writes:
F i L wrote:
 http://i3.kym-cdn.com/entries/icons/original/000/004/128/BRILLIANT_.jpg

 Great work as always, Alex :D

Yes! This is really good project! :)
Aug 23 2012
prev sibling next sibling parent Nick Sabalausky <SeeWebsiteToContactMe semitwist.com> writes:
On Fri, 24 Aug 2012 01:18:25 +0200
"alex" <info alexanderbothe.com> wrote:
 
 class D : C!(A!int.SubClass) { } // is not allowed, but A!int is 
 -- why?
 

IIRC, I've had problems doing anything complex in a no-paren template parameter. I always figured if you're doing no-parens, it had to be a single token (Maybe I'm wrong?). Does it work if you do this?: A!(int.SubClass)
Aug 23 2012
prev sibling next sibling parent Jacob Carlborg <doob me.com> writes:
On 2012-08-24 01:18, alex wrote:
 Hi everyone,

 Right after the GSoC finished (I'm really sure I passed :)), I've just
 found more time to improve things drastically:

 By using a nice combination of storing AST children both sorted by name
 in a dictionary and in normal list, I was able to increase the
 resolution performance extremely - that means it takes ~0.3 milliseconds
 instead of ~3ms to resolve a normal symbol like a local variable or a
 local class definition.
 As a side effect, UFCS completion and preparation right after startup
 gained a maximum of performance boost! Tooltips and (later on) semantic
 highlighting could be done even more faster :)

 Then I fixed several issues with template parameter deduction - and
 figured out several bugs or a kinda undefined behaviour of dmd:

 class A(T) {
      class SubClass {}
 }
 class C(U: A!W.SubClass, W){}
 class D : C!(A!int.SubClass) { } // is not allowed, but A!int is -- why?

 Furthermore I fixed the parameter completion on this() and super()
 expressions, what implies a great usability bonus imho. Not to forget
 all the classic null-check issues and smaller bugs.

That sounds great. I think it's time I give Mono-D a try. -- /Jacob Carlborg
Aug 23 2012
prev sibling next sibling parent "Bernard Helyer" <b.helyer gmail.com> writes:
 IIRC, I've had problems doing anything complex in a no-paren 
 template
 parameter. I always figured if you're doing no-parens, it had 
 to be a
 single token (Maybe I'm wrong?). Does it work if you do this?:
 A!(int.SubClass)

primitive or identifier, iirc
Aug 24 2012
prev sibling next sibling parent "alex" <info alexanderbothe.com> writes:
On Friday, 24 August 2012 at 00:10:03 UTC, Piotr Szturmaj wrote:
 F i L wrote:
 http://i3.kym-cdn.com/entries/icons/original/000/004/128/BRILLIANT_.jpg

 Great work as always, Alex :D

Yes! This is really good project! :)

Thanks :D
Aug 24 2012
prev sibling next sibling parent "alex" <info alexanderbothe.com> writes:
On Friday, 24 August 2012 at 02:40:43 UTC, Nick Sabalausky wrote:
 On Fri, 24 Aug 2012 01:18:25 +0200
 "alex" <info alexanderbothe.com> wrote:
 
 class D : C!(A!int.SubClass) { } // is not allowed, but A!int 
 is -- why?
 

IIRC, I've had problems doing anything complex in a no-paren template parameter. I always figured if you're doing no-parens, it had to be a single token (Maybe I'm wrong?). Does it work if you do this?: A!(int.SubClass)

It's working just with the subclass marked as static and without any further template paramters, not with A!(int.SubClass) but with A!int.SubClass :)
Aug 24 2012
prev sibling next sibling parent Bruno Medeiros <brunodomedeiros+dng gmail.com> writes:
On 24/08/2012 00:18, alex wrote:
 Hi everyone,

 Right after the GSoC finished (I'm really sure I passed :)), I've just
 found more time to improve things drastically:

I also have to extend my congratulations for the work you have done. I tried Mono-D several releases ago (before Summmer), and even then it was already very good in its semantic functionality (autocomplete etc.). It was the only D IDE to come anywhere close to what DDT and Descent had in terms of semantic functionality (sorry VisualD and others :P ), and even more, it actually didn't just come close but actually surpassed it significantly! -- Bruno Medeiros - Software Engineer
Nov 07 2012
prev sibling parent "alex" <info alexanderbothe.com> writes:
On Wednesday, 7 November 2012 at 12:48:30 UTC, Bruno Medeiros 
wrote:
 On 24/08/2012 00:18, alex wrote:
 Hi everyone,

 Right after the GSoC finished (I'm really sure I passed :)), 
 I've just
 found more time to improve things drastically:

I also have to extend my congratulations for the work you have done. I tried Mono-D several releases ago (before Summmer), and even then it was already very good in its semantic functionality (autocomplete etc.). It was the only D IDE to come anywhere close to what DDT and Descent had in terms of semantic functionality (sorry VisualD and others :P ), and even more, it actually didn't just come close but actually surpassed it significantly!

Thanks! Hopefully I can release the new 0.4.1.9 version today :)
Nov 08 2012