[Dlang-internal] Some suggestions for the d language

Max Haughton maxhaton at gmail.com
Fri Sep 20 01:35:52 UTC 2019


On Thursday, 19 September 2019 at 18:39:42 UTC, Shadowblitz16 
wrote:
> On Thursday, 19 September 2019 at 05:05:51 UTC, Max Haughton 
> wrote:
>> On Wednesday, 18 September 2019 at 21:03:36 UTC, Shadowblitz16 
>> wrote:
>>> I had some suggestions for the d language that I think would 
>>> improve it a bunch.
>>>
>>> 1. var keyword for autodetect of auto and mixin.
>>> this is just a optional way of typing auto and mixin. 
>>> automatically detects which one.
>>>
>>> 2. optional use of <> instead of !() and (). for templates.
>>> coming from the C# language it's my opinion it's easier to 
>>> type and is more readable.
>>>
>>> 3. coroutines (aka async functions) and yield overloads
>>> being able to execute functions and yield from them...
>>>
>>> bool coroutine(bool done)
>>> {
>>>   yield(false      );
>>>   yield(false,    3); //yields for 3 seconds (double)
>>>   yield(false, done); //yields until done is true (bool)
>>>   return true;
>>> }
>> 1. Why?
>>
>> 2. No, the reason why D uses ! Instead of <> is to make the 
>> compiler saner to implement.
>>
>> 3. Fibers are available in the standard library, which 
>> implement coroutines
>
> 1. var is easier to type and would be basically a universal 
> type.
>
> 2. right now is confusing to use.
> it might be harder to implement, but it makes code cleaner and 
> more readable.
>
> 3. I would rather not have to call a function for coroutines to 
> create them.
> its alot easier to just yield out of a function. of course if 
> this slows the language down it would be bad.
>
> I think the language should auto detect if a yield is used and 
> execute and store a coroutine until it is finished.

1. I guess, but again is it really an issue? If I'm reading you 
correctly, does inferring mixin from var even make sense 
semantically?

2. How is: "range.map!min" confusing compared to 
"range.map<min>"? Also, implementing this would require modifying 
the compiler *a lot*. D is specifically designed not to use this 
feature because ! is not a binary operator whereas < > are (To 
resolve this the parser has to have access to the symbol table)

3. You have to call something even if it's hidden. I would 
actually prefer coroutines or similar to be in the core language 
(It's very difficult if not impossible to check whether a 
function even attempts to call yield for example) but what is 
there works atm


More information about the Dlang-internal mailing list