Exquisite code samples

SomeDude lovelydear at mailmetrash.com
Mon Jul 16 15:03:37 PDT 2012


On Monday, 9 July 2012 at 11:40:37 UTC, Gor Gyolchanyan wrote:
> On Mon, Jul 9, 2012 at 3:30 PM, Paulo Pinto 
> <pjmlp at progtools.org> wrote:
>
>> On Monday, 9 July 2012 at 11:16:45 UTC, Gor Gyolchanyan wrote:
>>
>>> I've put together a code sample, which could demonstrate the 
>>> awesome power
>>> of D when it comes to getting good results very quickly and 
>>> safely.
>>> Perhaps
>>> it could end up on display for newcomers:
>>>
>>> import std.traits;
>>>
>>> /// Returns the t-th point on the bezier curve, defined by 
>>> non-empty set p
>>> of d-dimensional points, where t : [0, 1] and d > 1.
>>> real[d] bezier(size_t d, Number)(Number[d][] p, Number t)
>>>     if(d > 1 && isFloatingPoint!Number)
>>> in
>>> {
>>>     assert(p.length > 0);
>>>     assert(t >= 0.0L && t <= 1.0L);
>>> }
>>> body
>>> {
>>>     return p.length > 1 ? (1 - t) * p[0..$-1].bezier(t) + t *
>>> p[1..$].bezier(t) : p[0];
>>> }
>>>
>>> /// Returns k unidistant points on the bezier curve, defined 
>>> by non-empty
>>> set p of d-dimensional points, where k > 0 and d > 1.
>>> real[d][] bezier(size_t d, Number)(Number[d][] p, size_t k)
>>>     if(d > 1 && isFloatingPoint!Number)
>>> in
>>> {
>>>     assert(p.length > 0);
>>>     assert(k > 0);
>>> }
>>> body
>>> {
>>>     Number[d][] result = new Number[d][k];
>>>     foreach(i; 0..k)
>>>         result[k] = p.bezier(i * (1.0L / k));
>>>     return result;
>>> }
>>>
>>
>> I would not show this to newcomers, as they would probably go 
>> running for
>> Go.
>>
>> This type of code is quite nice and the reason why I think I 
>> am better
>> served with D than Go, but newcomers without strong generic 
>> programming
>> background in other languages might get scared.
>>
>> --
>> Paulo
>>
>
> You're right. This is a bit advanced code sample, which uses 
> templates,
> template constraints, contract programming among syntax 
> advantages of D.


At least, with a main() and an input, it would be a bit more 
interesting and illustrative of the "modeling power" of D than 
the examples of the http://dlang.org/index.html home page, which 
are stupid and mostly don't work at all. (even the simplest 
example gives the ridiculous result of 895 until one manually 
breaks the input text with carriage returns).


More information about the Digitalmars-d mailing list