Difference between revisions of "Beyond D2"

From D Wiki
Jump to: navigation, search
Line 5: Line 5:
 
This page came up from email thread http://forum.dlang.org/post/ygmtislwwhfftiqrujan@forum.dlang.org.
 
This page came up from email thread http://forum.dlang.org/post/ygmtislwwhfftiqrujan@forum.dlang.org.
  
== Questionable design choices ==
+
== Contentious points ==
  
 
* is virtual by default a good idea with separate compilation model?
 
* is virtual by default a good idea with separate compilation model?
  
== Syntax changes ==
+
== Features to drop ==
* get rid of C-style expression lists in parenthesis; these would be reserved for tuples
 
* Go style a := b meaning auto a = b
 
* semi-column optional
 
* Go style lightweight if/while/etc expressions that don't require () around the if statement:
 
<syntaxhighlight lang="d">
 
while x>=0 {...}
 
</syntaxhighlight>
 
* full UFCS support: foo.mixin, foo.assert, foo.stringof, foo.typeof
 
  
 +
* drop built-ins: foreach_reverse, sort
  
== Features to drop ==
+
* get rid of opSlice/opSliceAssign etc:
 +
** a..b is instead syntax sugar for a Slice object:
 +
** rationale for opSlice, opSliceAssign, vs a..b being syntax suger for a Slice struct? http://forum.dlang.org/post/mailman.551.1365290408.4724.digitalmars-d-learn@puremagic.com
  
 
* strings: stop conflating range of code points with range of code units:
 
* strings: stop conflating range of code points with range of code units:
Line 29: Line 24:
 
** Andrei mentioned it here as well: http://forum.dlang.org/post/l3h49k$b6$1@digitalmars.com
 
** Andrei mentioned it here as well: http://forum.dlang.org/post/l3h49k$b6$1@digitalmars.com
 
   "It is my opinion that a better solution exists (in the form of making representation accessible only through a property .rep)"
 
   "It is my opinion that a better solution exists (in the form of making representation accessible only through a property .rep)"
 
* drop built-ins: foreach_reverse, sort
 
  
 
* stop conflating paths with strings; would make a lot of code safer and cross platform; would still allow implicit conversion via alias this.
 
* stop conflating paths with strings; would make a lot of code safer and cross platform; would still allow implicit conversion via alias this.
 
** http://forum.dlang.org/post/op.wx7lqwvx54xghj@puck.auriga.bhead.co.uk + code
 
** http://forum.dlang.org/post/op.wx7lqwvx54xghj@puck.auriga.bhead.co.uk + code
 
* get rid of opSlice/opSliceAssign etc:
 
** a..b is instead syntax sugar for a Slice object:
 
** rationale for opSlice, opSliceAssign, vs a..b being syntax suger for a Slice struct? http://forum.dlang.org/post/mailman.551.1365290408.4724.digitalmars-d-learn@puremagic.com
 
  
 
* can we get rid of @property?
 
* can we get rid of @property?
  
 
== Features to add ==
 
== Features to add ==
 +
 
* AST macros   
 
* AST macros   
 
** proposal: https://dl.dropboxusercontent.com/u/18386187/ast_macros.html#scroll_to_here
 
** proposal: https://dl.dropboxusercontent.com/u/18386187/ast_macros.html#scroll_to_here
Line 59: Line 49:
 
** could follow DIP32 but use (a,b) syntax instead; we would get rid of C-style expression lists to enable this
 
** could follow DIP32 but use (a,b) syntax instead; we would get rid of C-style expression lists to enable this
  
=== Arrays ===
+
=== Arrays and Ranges ===
  
 
* multidimensional indexing and slicing:  
 
* multidimensional indexing and slicing:  
Line 80: Line 70:
 
* improved dmd/rdmd command line: http://wiki.dlang.org/DIP41
 
* improved dmd/rdmd command line: http://wiki.dlang.org/DIP41
 
* Incremental compilation support in rdmd: http://d.puremagic.com/issues/show_bug.cgi?id=9673
 
* Incremental compilation support in rdmd: http://d.puremagic.com/issues/show_bug.cgi?id=9673
 +
 +
== Syntax changes ==
 +
* get rid of C-style expression lists in parenthesis; these would be reserved for tuples
 +
* Go style a := b meaning auto a = b
 +
* semi-column optional
 +
* Go style lightweight if/while/etc expressions that don't require () around the if statement:
 +
<syntaxhighlight lang="d">
 +
while x>=0 {...}
 +
</syntaxhighlight>
 +
* full UFCS support: foo.mixin, foo.assert, foo.stringof, foo.typeof
 +
  
 
== More controversial features to add ==
 
== More controversial features to add ==

Revision as of 02:50, 10 November 2013

Motivation

This page can be used as a centralized place to discuss parts of D2's design that are controversial, undesirable or that could be improved, including those that are too late to fix in D2. Also discussed here are features that would be worthy of consideration in a hypothetical successor for D2 (D3? E? ). This page came up from email thread http://forum.dlang.org/post/ygmtislwwhfftiqrujan@forum.dlang.org.

Contentious points

  • is virtual by default a good idea with separate compilation model?

Features to drop

  • drop built-ins: foreach_reverse, sort
  • strings: stop conflating range of code points with range of code units:
    • "foo" represents a range of code points
    • "foo".rep represents a range of code units, eg: immutable(char)[]
    • This would remove a *lot* of special case code in phobos and make it easier to write generic code, eg, would remove need for distinguishing ElementType vs ForeachType
    • I've discussed this in email:"iteration over a string"
    • Andrei mentioned it here as well: http://forum.dlang.org/post/l3h49k$b6$1@digitalmars.com
 "It is my opinion that a better solution exists (in the form of making representation accessible only through a property .rep)"
  • can we get rid of @property?

Features to add

  • python style named parameter arguments
  • Yield return
  • R-value references
  • Safe references
  • language syntax for tuples; unify syntax for compile time tuples with runtime tuples
    • could follow DIP32 but use (a,b) syntax instead; we would get rid of C-style expression lists to enable this

Arrays and Ranges

  • builtin slices with begin..end:step or begin..end..step

Compilation

  • allow JIT (to be used sparingly), to allow runtime eval statements.
  • Compiler as a library (eg llvm/clang toolchain)
  • Compiler written in D2, and then bootstrapped from their as done in rust and many other languages

Tooling

Syntax changes

  • get rid of C-style expression lists in parenthesis; these would be reserved for tuples
  • Go style a := b meaning auto a = b
  • semi-column optional
  • Go style lightweight if/while/etc expressions that don't require () around the if statement:
while x>=0 {...}
  • full UFCS support: foo.mixin, foo.assert, foo.stringof, foo.typeof


More controversial features to add

  • store code as AST,
    • The 1st idea is to get rid of styleguides completely and allow people to read/write code with their preferred style. Codes gets stored and exchanged as AST; clients read the AST and converts it on the fly as source code in the user's preferred formatting.
    • speeds up compilation: only currently modified code needs to get translation from source to AST
    • More future proof and eases refactoring
  • Allow transparently including C headers in code as in Go; could use swig behind the scenes

Page originally created by Timothee Cour on 11/09/2013; copyright: public domain. TODO: add discussion/DIP/webpage links to each item