Targeting C

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Oct 30 09:42:00 PDT 2009


rmcguire wrote:
> Andrei Alexandrescu <SeeWebsiteForEmail at erdani.org> wrote:
>  
>> grauzone wrote:
>>> Andrei Alexandrescu wrote:
>>>> Pelle Månsson wrote:
>>>>> Andrei Alexandrescu wrote:
>>>>>> Yigal Chripun wrote:
>>>>>>> On 23/10/2009 13:02, bearophile wrote:
>>>>>>>> Chris Nicholson-Sauls:
>>>>>>>>
>>>>>>>>> I prefer this (Scala):
>>>>>>>>> list = list ++ (0 to 10)
>>>>>>>> That's quite less readable. Scala sometimes has some unreadable 
>>>>>>>> syntax. Python has taught me how much useful a readable syntax is :-)
>>>>>>>> Designing languages requires to find a balance between several 
>>>>>>>> different and opposed needs.
>>>>>>>>
>>>>>>>> Bye,
>>>>>>>> bearophile
>>>>>>> how about this hypothetical syntax:
>>>>>>>
>>>>>>> list ~= [0..10];
>>>>>> I'm not sure what the type of "list" is supposed to be, but this 
>>>>>> works today for arrays:
>>>>>>
>>>>>> list ~= array(iota(0, 10));
>>>>>>
>>>>>>
>>>>>> Andrei
>>>>> What does iota mean?
>>>> http://www.digitalmars.com/d/2.0/phobos/std_range.html#iota
>>> This link jumps straight to:
>>>
>>> Take!(Sequence!("a.field[0] + n * 
>>> a.field[1]",Tuple!(CommonType!(B,E),S))) iota(B, E, S)(B begin, E end, S 
>>> step);
>>>
>>> Wow, please tell me this is a ddoc malfunction. I mean, that thing left 
>>> to iota is supposed to be a type?
>>>
>>> (OK, it _is_ a malfunction, but that thing is still supposed to be... a 
>>> type?)
>> Well what was I supposed to do? It was either define another type Iota, 
>> or reuse existing types. I chose to reuse.
>>
>> Andrei
>>
> 
> 
> Hi Andrei,
> 
> Could you tell me why:
> Take!(Sequence!("a.field[0] + n * a.field[1]",Tuple!(CommonType!(B,E),S)))
> 
> Is a type and not a value?
> 
> -Rory

Take!(
     Sequence!(
         "a.field[0] + n * a.field[1]",
         Tuple!(
             CommonType!(B,E),
             S
         )
     )
)

If you look here:

http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/algorithm.d

and in related files, you'll see that Take is a type with one parameter. 
Then Sequence is a type with two parameters. Then Tuple is a type with 
any number of parameters, and so is CommonType.

So in spite of it looking complicated, it's just a usual instantiation 
of a few parameterized types. (What may confuse a C++ programmer is the 
presence of the string -  it's just a template argument.)


Andrei



More information about the Digitalmars-d mailing list