Jump to page: 1 25  
Page
Thread overview
Workaround for DIP 1005
Feb 03, 2017
rikki cattermole
Feb 03, 2017
Daniel N
Feb 03, 2017
Daniel Nielsen
Feb 03, 2017
Daniel Nielsen
Feb 04, 2017
crimaniak
Feb 04, 2017
Stefan Koch
Feb 04, 2017
crimaniak
Name That Technique!
Feb 03, 2017
Walter Bright
Feb 03, 2017
Ali Çehreli
Feb 04, 2017
Nick Sabalausky
Feb 04, 2017
deadalnix
Feb 04, 2017
David Gileadi
Feb 08, 2017
deadalnix
Feb 13, 2017
Ali Çehreli
Feb 05, 2017
Daniel Nielsen
Feb 06, 2017
Mike Parker
Feb 06, 2017
Mike Parker
Feb 06, 2017
Walter Bright
Feb 07, 2017
TheGag96
Feb 07, 2017
Andrea Fontana
Feb 07, 2017
Jack Stouffer
Feb 07, 2017
Jack Stouffer
Feb 07, 2017
Chris Wright
Feb 08, 2017
Walter Bright
Feb 03, 2017
Chris Wright
Automatic imports?
Feb 04, 2017
Ali Çehreli
Feb 04, 2017
Walter Bright
Feb 04, 2017
crimaniak
Feb 09, 2017
Jonathan M Davis
Feb 09, 2017
Daniel N
Feb 10, 2017
Nick Treleaven
Feb 14, 2017
Meta
Feb 14, 2017
John Colvin
February 03, 2017
DIP 1005 provides new syntax to make it possible to avoid global imports.
Till now global imports are necessary if a function uses types declared in some imported module within it's declaration or definition (otherwise a local import will do).

But this can already be worked around with some nice trick:

import someModule.SomeType;

SomeType fun()
{
   ...
}

can be replaced by:

fun.ST fun()
{
   import someModule.SomeType;
   alias ST = SomeType;
   ...
}

The same strategy works with types used in parameters or constraints, of course.

Any thoughts?
February 04, 2017
On 04/02/2017 3:43 AM, Dominikus Dittes Scherkl wrote:
> DIP 1005 provides new syntax to make it possible to avoid global imports.
> Till now global imports are necessary if a function uses types declared
> in some imported module within it's declaration or definition (otherwise
> a local import will do).
>
> But this can already be worked around with some nice trick:
>
> import someModule.SomeType;
>
> SomeType fun()
> {
>    ...
> }
>
> can be replaced by:
>
> fun.ST fun()
> {
>    import someModule.SomeType;
>    alias ST = SomeType;
>    ...
> }
>
> The same strategy works with types used in parameters or constraints, of
> course.
>
> Any thoughts?

Needless syntax sugar:

struct Foo { int x; }

Foo func() {
	return Foo(9);	
}

typeof(func()) func2() {
	return func();	
}

void main() {
	assert(func2.x == 9);	
}
February 03, 2017
On Friday, 3 February 2017 at 14:43:01 UTC, Dominikus Dittes Scherkl wrote:
> DIP 1005 provides new syntax to make it possible to avoid global imports.
> Any thoughts?

I like it!

template imp(string mod)
{
  mixin("import imp = " ~ mod ~ ";");
}

auto fun_time(imp!"std.datetime".SysTime tm)
{
  return tm;
}

void main()
{
  import std.stdio;
  import std.datetime;

  fun_time(Clock.currTime()).writeln;
}


February 03, 2017
On Friday, 3 February 2017 at 14:59:09 UTC, rikki cattermole wrote:
> On 04/02/2017 3:43 AM, Dominikus Dittes Scherkl wrote:
>> DIP 1005 provides new syntax to make it possible to avoid global imports.
>> But this can already be worked around with some nice trick:
>> Any thoughts?
>
> Needless syntax sugar:
?!?
What is syntactic sugar?
I did NOT propose any new syntax - my workaround already works with the current D language. In fact I think DIP1005 is syntactic sugar (maybe even "needless").
February 03, 2017
On Fri, 03 Feb 2017 14:43:01 +0000, Dominikus Dittes Scherkl wrote:
> fun.ST fun()
> {
>     import someModule.SomeType;
>     alias ST = SomeType;
>     ...
> }

What compiler version is this? I'm getting segfaults with both 2.072.2 and 2.073.0.

Reported as https://issues.dlang.org/show_bug.cgi?id=17140
February 03, 2017
On 2/3/17 10:41 AM, Daniel N wrote:
> On Friday, 3 February 2017 at 14:43:01 UTC, Dominikus Dittes Scherkl wrote:
>> DIP 1005 provides new syntax to make it possible to avoid global imports.
>> Any thoughts?
>
> I like it!
>
> template imp(string mod)
> {
>   mixin("import imp = " ~ mod ~ ";");
> }
>
> auto fun_time(imp!"std.datetime".SysTime tm)
> {
>   return tm;
> }
>
> void main()
> {
>   import std.stdio;
>   import std.datetime;
>
>   fun_time(Clock.currTime()).writeln;
> }

Wow. This is... brilliant. Thanks for the great idea. I ran a few tests and it seems to be doing out of the box most of what we want with DIP1005 with no language change at all.

Congratulations!


Andrei

February 03, 2017
On 2/3/17 2:14 PM, Andrei Alexandrescu wrote:
> On 2/3/17 10:41 AM, Daniel N wrote:
>> On Friday, 3 February 2017 at 14:43:01 UTC, Dominikus Dittes Scherkl
>> wrote:
>>> DIP 1005 provides new syntax to make it possible to avoid global
>>> imports.
>>> Any thoughts?
>>
>> I like it!
>>
>> template imp(string mod)
>> {
>>   mixin("import imp = " ~ mod ~ ";");
>> }
>>
>> auto fun_time(imp!"std.datetime".SysTime tm)
>> {
>>   return tm;
>> }
>>
>> void main()
>> {
>>   import std.stdio;
>>   import std.datetime;
>>
>>   fun_time(Clock.currTime()).writeln;
>> }
>
> Wow. This is... brilliant. Thanks for the great idea. I ran a few tests
> and it seems to be doing out of the box most of what we want with
> DIP1005 with no language change at all.
>
> Congratulations!

I should also extend thanks to Dominik, who provided the initial idea and the inspiration for this one. -- Andrei

February 03, 2017
On Friday, 3 February 2017 at 19:14:16 UTC, Andrei Alexandrescu wrote:
>
> Wow. This is... brilliant. Thanks for the great idea. I ran a few tests and it seems to be doing out of the box most of what we want with DIP1005 with no language change at all.
>
> Congratulations!
>
>
> Andrei

Thank you very much. I was just going to mail you directly to make sure the idea wasn't lost in the forum flood, will be exciting to see some measurements using this idiom.

Daniel N

February 03, 2017
On Friday, 3 February 2017 at 20:04:22 UTC, Daniel Nielsen wrote:
> On Friday, 3 February 2017 at 19:14:16 UTC, Andrei Alexandrescu wrote:
>>
>> Wow. This is... brilliant. Thanks for the great idea. I ran a few tests and it seems to be doing out of the box most of what we want with DIP1005 with no language change at all.
>>
>> Congratulations!
>>
>>
>> Andrei
>

I just had to try one more thing. It never ceases to amaze me what is possible in D today.

template imp(string mod) { mixin("import imp = " ~ mod ~ ";"); }
auto fun_time(imp!"std.datetime".SysTime tm) { return tm; }

void main()
{
  with(imp!"std.datetime")
    static if(is(Clock))
      with(imp!"std.stdio")
        Clock.currTime.fun_time.writeln;
}

February 03, 2017
On 2/3/2017 11:14 AM, Andrei Alexandrescu wrote:
> On 2/3/17 10:41 AM, Daniel N wrote:
>> On Friday, 3 February 2017 at 14:43:01 UTC, Dominikus Dittes Scherkl wrote:
>>> DIP 1005 provides new syntax to make it possible to avoid global imports.
>>> Any thoughts?
>>
>> I like it!
>>
>> template imp(string mod)
>> {
>>   mixin("import imp = " ~ mod ~ ";");
>> }
>>
>> auto fun_time(imp!"std.datetime".SysTime tm)
>> {
>>   return tm;
>> }
>>
>> void main()
>> {
>>   import std.stdio;
>>   import std.datetime;
>>
>>   fun_time(Clock.currTime()).writeln;
>> }
>
> Wow. This is... brilliant. Thanks for the great idea. I ran a few tests and it
> seems to be doing out of the box most of what we want with DIP1005 with no
> language change at all.
>
> Congratulations!

I agree, it's pretty dazz! We need to give this technique a memorable name (not an acronym). I thought "Voldemort Types" turned out rather well, whereas CTFE is klunky, UFCS is even worse. The absolute worst is C++ SFINAE.

Any ideas?

  Scherkl-Nielsen Lookup?

The perfect bikeshedding moment!

Daniel, Dominikus: please consider writing an article about this.

« First   ‹ Prev
1 2 3 4 5