Top 5

Christopher Wright dhasenan at gmail.com
Fri Oct 10 05:08:11 PDT 2008


Sergey Gromov wrote:
> Wed, 08 Oct 2008 15:07:27 -0500,
> Andrei Alexandrescu wrote:
>> Ok, per Aarti's suggestion: without speaking officially for Walter, let 
>> me ask this - what do you think are the top issues you'd like to see 
>> fixed in D?
> 
> I'd generally like less syntactic freedom in D.  Excessive amounts of 
> syntactic sugar cause troubles in many different places.  Economy of 
> syntax principle has a flip side: a single mistake can make your program 
> mean a whole different thing instead of simply giving you a syntax 
> error.  Redundancy is required to detect an error and suggest a fix.
> 
> 1.  Drop the "array is a slice" idea.  I liked it a lot when I saw the D 
> specs but it bit me immediately while I implemented a text parser.  The 
> idea sounds nice but it causes too many problems.
> 
> There are two major use cases for arrays: building and parsing.  When 
> building, you want fast append, you've got a limited number of arrays, 
> and you likely don't care if your arrays are a little fat.  When 
> parsing, you want data consistency, that is you don't want a sub-array 
> to change if you occasionally append to another sub-array.  You also 
> want to pass those sub-arrays around a lot and you probably want them to 
> be cheap.

Catenating an array to a slice shouldn't do it in place unless the slice 
includes the end of the original array. If it does, that's a bug.

And parsers generally don't need to modify the input. I'm rather curious 
as to why yours was.

> An array should be a fat object optimized for fast appending.  It should 
> be a class, because you want to pass it into functions and store 
> references to it while keeping it a distinct object.  Call it Array!(T) 
> or List or Vector or whatever.  It should be implicitly convertable to a 
> slice type T[] which can stay what it is now.  It should be built-in 
> because array new, .dup and slice ~ should return a new array instance.
> 
> It'll probably break lots of generic code.
> 
> 2.  Drop the "call a function however you want" idea.  Simple property 
> method syntax is nice, but excessive freedom is not.  Adding one simple 
> keyword fixes the situation.  See
>> http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=13471
> for an explanation.
> 
> It'll probably break lots of regular code.
> 
> 3.  Same concern but little experience.  Never bit me personally.  But 
> probably the delegate literal syntax should be dropped in favour of a 
> dedicated, distinct lambda expression syntax.
> 
> 4.  Fix the const system.  It scares people.  It scared me off D2 for a 
> while even though I liked D2 and I liked the *idea* of a const system.  
> There are two items on my wish-list:
> 
> a) const-transparent and const-inheriting methods, so that you don't 
> have to write the same method thrice as you do in C++ to grant const-
> correctness:
> 
> class A {
>   Object o;
>   constof!(o)(Object) get() { return o; }
> }
> invariant(A) a;
> typeof(a.get()); // invariant(Object)
> 
> b) unique return values that can be cast to any of mutable, const and 
> invariant.  The proposal is to have a "unique" keyword and a unique 
> constness type.  Only rvalue can be unique.  Unique can be returned.  
> Unique casts implicitly to any other constness type.  Nothing implicitly 
> casts to unique.  You can explicitly cast to unique.  New, malloc, 
> .deepdup return unique. .dup returns unique if hasNoPointers.



More information about the Digitalmars-d mailing list