Difference between revisions of "DIPs"

From D Wiki
Jump to: navigation, search
(Add DIP37)
(add "deprecated" warning to DIP list)
 
(85 intermediate revisions by 37 users not shown)
Line 1: Line 1:
 +
<div style="background:#ffd; padding: 0.5ex 0.5ex;">
 +
<span style="font-size: 1.4em; color: #ca4;">&#9888;</span> This is an archive of DIPs created before 2016-07-01. Please check the [https://github.com/dlang/DIPs new repository] for an up-to-date list and information about the DIP process.
 +
</div>
 +
 +
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
 
! ID
 
! ID
Line 22: Line 27:
 
| [[DIP4]]
 
| [[DIP4]]
 
| Properties
 
| Properties
| [[DIP6|Superseded]]
+
| [[DIP6|Superseded by DIP6]]
 
| an alternate usage/definition syntax for properties.
 
| an alternate usage/definition syntax for properties.
 
|-
 
|-
 
| [[DIP5]]
 
| [[DIP5]]
 
| Properties 2
 
| Properties 2
| [[DIP6|Superseded]]
+
| [[DIP6|Superseded by DIP6]]
 
| a variant of DIP4.
 
| a variant of DIP4.
 
|-
 
|-
Line 77: Line 82:
 
| [[DIP15]]
 
| [[DIP15]]
 
| Import of packages
 
| Import of packages
| Draft
+
| [[DIP37|Superseded by DIP37]]
 
| Improve imports of packages with submodules.
 
| Improve imports of packages with submodules.
 
|-
 
|-
 
| [[DIP16]]
 
| [[DIP16]]
 
| Transparently substitute module with package
 
| Transparently substitute module with package
| Draft
+
| [[DIP37|Superseded by DIP37]]
 
|
 
|
 
|-
 
|-
 
| [[DIP17]]
 
| [[DIP17]]
 
| Sane volatile statement
 
| Sane volatile statement
| [[DIP20|Superseeded]]
+
| [[DIP20|Superseded by DIP20]]
 
|
 
|
 
|-
 
|-
Line 97: Line 102:
 
| [[DIP20]]
 
| [[DIP20]]
 
| Volatile read/write intrinsics
 
| Volatile read/write intrinsics
| Draft
+
| '''Implemented'''
 
| Intrinsics to perform C-style volatile loads/stores from/to memory.
 
| Intrinsics to perform C-style volatile loads/stores from/to memory.
 
|-
 
|-
Line 106: Line 111:
 
|-
 
|-
 
| [[DIP22]]
 
| [[DIP22]]
| Private symbol visibility
+
| Private symbol (in)visibility
 
| Draft
 
| Draft
 
| Modification of private & Co symbol rules to reduce name clashes. Add internal linkage storage class.
 
| Modification of private & Co symbol rules to reduce name clashes. Add internal linkage storage class.
|
 
 
|-
 
|-
 
| [[DIP23]]
 
| [[DIP23]]
 
| Fixing property redux
 
| Fixing property redux
 
| Draft
 
| Draft
|Initial
+
| Initial
 
|-
 
|-
 
| [[DIP24]]
 
| [[DIP24]]
Line 123: Line 127:
 
| [[DIP25]]
 
| [[DIP25]]
 
| Sealed references
 
| Sealed references
| Draft
+
| '''Implemented 2.067'''
 +
|
 
|-
 
|-
 
| [[DIP26]]
 
| [[DIP26]]
Line 144: Line 149:
 
| Draft
 
| Draft
 
| Unique pointers can be implicitly cast to/from immutable and shared.
 
| Unique pointers can be implicitly cast to/from immutable and shared.
|
 
 
|-
 
|-
 
| [[DIP30]]
 
| [[DIP30]]
Line 183: Line 187:
 
| [[DIP37]]
 
| [[DIP37]]
 
| Importing Packages as if They Were Modules
 
| Importing Packages as if They Were Modules
| Verbally approved by Walter and Andrei at dconf 2013, but some details may need to be ironed out if anyone comes up with issues with it.
+
| '''Implemented'''
 
| Allow for packages to be imported as if they were modules by providing a ''package.d'' file.
 
| Allow for packages to be imported as if they were modules by providing a ''package.d'' file.
 +
|
 +
|-
 +
| [[DIP38]]
 +
| Safe references without runtime checks
 +
| Draft
 +
|
 +
|-
 +
| [[DIP39]]
 +
| Safe rvalue references: backwards compatible, safe against ref/nonref code evolution, compatible with UFCS and DIP38.
 +
| Draft
 +
|
 +
|-
 +
| [[DIP40]]
 +
| Template parameter deduction for constructors.
 +
| Draft
 +
|
 +
|-
 +
| [[DIP41]]
 +
| dmd/rdmd command line overhaul.
 +
| Draft
 +
|
 +
|-
 +
| [[DIP42]]
 +
| Support enum E(T) = expression; for manifest constants
 +
| '''Implemented'''
 +
|
 +
|-
 +
| [[DIP43]]
 +
| D/Objective-C
 +
| Draft
 +
| Adds language extensions to make D ABI compatible with Objective-C.
 +
|-
 +
| [[DIP44]]
 +
| scope(this)
 +
| Draft
 +
| Extends scope guards to class / struct lifetime.
 +
|-
 +
| [[DIP45]]
 +
| making export an attribute
 +
| Draft
 +
| Turn export into an attribute and fix various shortcomings of its current implementation.
 +
|-
 +
| [[DIP46]]
 +
| region based storage allocation
 +
| Draft
 +
| Library addition to GC to allow for region based allocation strategies
 +
|-
 +
| [[DIP47]]
 +
| Outline Member Functions of Aggregates
 +
| Draft
 +
| Allow class/struct member function definitions to be placed outside of the class/struct declaration.
 +
|-
 +
| [[DIP48]]
 +
| Interface specifications for aggregate types
 +
| Draft
 +
|
 +
|-
 +
| [[DIP49]]
 +
| Define qualified postblit
 +
| Draft
 +
| Fix D2 type-system hole.
 +
|-
 +
| [[DIP50]]
 +
| AST Macros
 +
| Draft
 +
| Abstract Syntax Tree macros. A general solution for language extensions.
 +
|-
 +
| [[DIP51]]
 +
| not-virtual-by-default
 +
| Draft
 +
| Change the behaviour of class methods so they are not virtual by default.
 +
|-
 +
| [[DIP52]]
 +
| Implicit conversions
 +
| Draft
 +
| Add more implicit conversion options for user-defined types.
 +
|-
 +
| [[DIP53]]
 +
| Qualified constructor revisited
 +
| Draft
 +
| Make qualified constructor definition more simple and understandable.
 +
|-
 +
| [[DIP54]]
 +
| Revamp of Phobos tuple types
 +
| Draft
 +
| Address frequent informational confusion around std.typetuple & friends, initiate transition to std.meta.* package
 +
|-
 +
| [[DIP55]]
 +
| Access Data Items In Ancestor Stack Frames
 +
| Draft
 +
| Support for *caller pointer in functions and adding class features to functions
 +
|-
 +
| [[DIP56]]
 +
| Provide Pragma to control function inlining
 +
| '''Implemented'''
 +
| Add pragma(inline,true); and pragma(inline,false);
 +
|-
 +
| [[DIP57]]
 +
| static foreach
 +
| Draft
 +
|
 +
|-
 +
| [[DIP58]]
 +
| Make ".." a binary operator
 +
| Draft
 +
|
 +
|-
 +
| [[DIP59]]
 +
| ??
 +
| Draft
 +
|
 +
|-
 +
| [[DIP60]]
 +
| Add @nogc function attribute
 +
| '''Implemented'''
 +
|
 +
|-
 +
| [[DIP61]]
 +
| Add namespace scopes to support calling external C++ functions in C++ namespaces
 +
| '''Implemented'''
 +
|
 +
|-
 +
| [[DIP62]]
 +
| Volatile type qualifier for unoptimizable variables in embedded programming
 +
| '''Rejected'''
 +
|
 +
|-
 +
| [[DIP63]]
 +
| Operator overloading for raw templates
 +
| Draft
 +
|
 +
|-
 +
| [[DIP64]]
 +
| Attribute Cleanup
 +
| Draft
 +
|
 +
|-
 +
| [[DIP65]]
 +
| Exception handling syntax cleanup
 +
| '''Rejected'''
 +
|
 +
|-
 +
| [[DIP66]]
 +
| (Multiple) alias this
 +
| Conditionally Approved
 +
|
 +
|-
 +
| [[DIP67]]
 +
| Associative Ranges
 +
| '''Rejected'''
 +
|
 +
|-
 +
| [[DIP68]]
 +
| Add @nogc attribute on types
 +
| Draft
 +
|
 +
|-
 +
| [[DIP69]]
 +
| Implement scope for escape proof references
 +
| Draft
 +
|
 +
|-
 +
| [[DIP70]]
 +
| @api/extern(noinfer) attribute
 +
| Draft
 +
|
 +
|-
 +
| [[DIP71]]
 +
| 'noscope' and 'out!param' attributes
 +
| Draft
 +
|
 +
|-
 +
| [[DIP72]]
 +
| Provide a Uniform Compiler Info Syntax
 +
| Draft
 +
|
 +
|-
 +
| [[DIP73]]
 +
| D Drafting Library
 +
| Draft
 +
|
 +
|-
 +
| [[DIP74]]
 +
| Reference Counted Class Objects
 +
| Draft
 +
|
 +
|-
 +
| [[DIP75]]
 +
| Release Process
 +
| Approved experimentally for 2.068
 +
|
 +
|-
 +
| [[DIP76]]
 +
| Autodecode should not throw
 +
| Draft
 +
| Like std.utf.byDchar, it should emit Replacement Character instead
 +
|
 +
|-
 +
| [[DIP77]]
 +
| Fix Unsafe RC Pass By Ref
 +
| Draft
 +
| Fix memory safety issue in DIP25
 +
|-
 +
| [[DIP78]]
 +
| AST Macros Lite
 +
| Rejected
 +
| Abstract Syntax Tree macros without syntax extensions in the language.
 +
|-
 +
| [[DIP79]]
 +
| Negation of attributes
 +
| Draft
 +
| Negation of attributes without the need for new keywords.
 +
|-
 +
| [[DIP80]]
 +
| Phobos additions
 +
| Draft
 +
| Additions that would make phobos even more useful.
 +
|-
 +
| [[DIP81]]
 +
| Writing files at compile time
 +
| Draft
 +
|-
 +
| [[DIP82]]
 +
| static unittest blocks
 +
| Draft
 +
| Allow for unittest blocks to be declared inside of templates which are compiled and run exactly once rather than once per instantiation.
 +
|-
 +
| [[DIP83]]
 +
| Configurable Assert Diagnostics
 +
| Draft
 +
| Allow for assert's to do pretty printing of its failing expression. Printing is configurable via specific sets of (template) function overloads.
 +
|-
 +
| [[DIP84]]
 +
| Static Inheritance
 +
| Draft
 +
| Express intent to the compiler that a user-defined type conforms to a static interface.
 +
|-
 +
| [[DIP85]]
 +
| Lazy initialization of const members
 +
| Draft
 +
| Allow limited mutation of const objects, ensuring the mutation is not observable by external code.
 +
|-
 +
| [[DIP86]]
 +
| "deprecated" attribute/storage class consistency
 +
| Draft
 +
| Allow "deprecated ( stringLiteral )" to act as a storage class.
 +
|-
 +
| [[DIP87]]
 +
| Enhanced foreign-language binding
 +
| Draft
 +
| Improve extern() to be more generic and support binding symbols that share a name with a D keyword.
 +
|-
 +
| [[DIP88]]
 +
| Named Parameters
 +
| Draft
 +
| Allow specifying named function parameters with `arg:`
 +
|-
 +
| [[DIP89]]
 +
| @mutable members in immutable data structures
 +
| Draft
 +
| Proposes an officially sanctioned way to mutate members in immutable data structures.
 +
|-
 +
| [[DIP90]]
 +
| Scoped Pointers
 +
| Draft
 +
| Tag pointers with 'scope' and 'return scope' to prevent pointer escapes
 
|}
 
|}
 +
 +
----
 +
[[Category:DIP]]

Latest revision as of 22:34, 13 July 2016

This is an archive of DIPs created before 2016-07-01. Please check the new repository for an up-to-date list and information about the DIP process.


ID Title Status Description
DIP1 Template DIP Draft This is a DIP template that can be used as a model to start a new proposal.
DIP2 Const code bloat Approved proposed solution for bug 1961.
DIP3 Remove inheritance protection Approved non-public inheritance in a single inheritance language that has a single root object hierarchy makes little sense.
DIP4 Properties Superseded by DIP6 an alternate usage/definition syntax for properties.
DIP5 Properties 2 Superseded by DIP6 a variant of DIP4.
DIP6 Annotations Approved extend the D programming language with annotations.
DIP7 Operator overloading Approved Revamped operator overloading.
DIP8 Improving Runtime Type Info Draft Templating RTTI.
DIP9 Redo toString API Draft Replace inefficient aggregate toString API with efficient delegate-based version that supports formatting.
DIP10 Qualified constructors and destructors for structs Draft
DIP11 Automatic downloading of imports Draft Support automatically downloading imported files via new import path specifications or pragmas.
DIP12 C API Headers Approved Collection of D headers for common C libraries.
DIP13 Import path binding Draft Allow to bind an import path to a package.
DIP14 Import path binding in source code Draft Allow to bind an import path to a package from within sources.
DIP15 Import of packages Superseded by DIP37 Improve imports of packages with submodules.
DIP16 Transparently substitute module with package Superseded by DIP37
DIP17 Sane volatile statement Superseded by DIP20
DIP18 Non-GC Threads Draft
DIP20 Volatile read/write intrinsics Implemented Intrinsics to perform C-style volatile loads/stores from/to memory.
DIP21 Fixing property Draft
DIP22 Private symbol (in)visibility Draft Modification of private & Co symbol rules to reduce name clashes. Add internal linkage storage class.
DIP23 Fixing property redux Draft Initial
DIP24 Fixing properties and optional parens. Draft Fixing properties and optional parens. Only those. In a general and straightforward way. (counter proposal to DIP23)
DIP25 Sealed references Implemented 2.067
DIP26 Properties the other way round Draft
DIP27 Function definition Draft
DIP28 Property definition Draft
DIP29 Unique pointers Draft Unique pointers can be implicitly cast to/from immutable and shared.
DIP30 Delegate definition Draft
DIP31 Defined compile time paradox resolution Draft
DIP32 Uniform tuple syntax Draft
DIP33 A standard exception hierarchy Draft
DIP34 Static array literals Draft
DIP35 Sealed References Amendment Draft
DIP36 Rvalue References Rejected
DIP37 Importing Packages as if They Were Modules Implemented Allow for packages to be imported as if they were modules by providing a package.d file.
DIP38 Safe references without runtime checks Draft
DIP39 Safe rvalue references: backwards compatible, safe against ref/nonref code evolution, compatible with UFCS and DIP38. Draft
DIP40 Template parameter deduction for constructors. Draft
DIP41 dmd/rdmd command line overhaul. Draft
DIP42 Support enum E(T) = expression; for manifest constants Implemented
DIP43 D/Objective-C Draft Adds language extensions to make D ABI compatible with Objective-C.
DIP44 scope(this) Draft Extends scope guards to class / struct lifetime.
DIP45 making export an attribute Draft Turn export into an attribute and fix various shortcomings of its current implementation.
DIP46 region based storage allocation Draft Library addition to GC to allow for region based allocation strategies
DIP47 Outline Member Functions of Aggregates Draft Allow class/struct member function definitions to be placed outside of the class/struct declaration.
DIP48 Interface specifications for aggregate types Draft
DIP49 Define qualified postblit Draft Fix D2 type-system hole.
DIP50 AST Macros Draft Abstract Syntax Tree macros. A general solution for language extensions.
DIP51 not-virtual-by-default Draft Change the behaviour of class methods so they are not virtual by default.
DIP52 Implicit conversions Draft Add more implicit conversion options for user-defined types.
DIP53 Qualified constructor revisited Draft Make qualified constructor definition more simple and understandable.
DIP54 Revamp of Phobos tuple types Draft Address frequent informational confusion around std.typetuple & friends, initiate transition to std.meta.* package
DIP55 Access Data Items In Ancestor Stack Frames Draft Support for *caller pointer in functions and adding class features to functions
DIP56 Provide Pragma to control function inlining Implemented Add pragma(inline,true); and pragma(inline,false);
DIP57 static foreach Draft
DIP58 Make ".." a binary operator Draft
DIP59 ?? Draft
DIP60 Add @nogc function attribute Implemented
DIP61 Add namespace scopes to support calling external C++ functions in C++ namespaces Implemented
DIP62 Volatile type qualifier for unoptimizable variables in embedded programming Rejected
DIP63 Operator overloading for raw templates Draft
DIP64 Attribute Cleanup Draft
DIP65 Exception handling syntax cleanup Rejected
DIP66 (Multiple) alias this Conditionally Approved
DIP67 Associative Ranges Rejected
DIP68 Add @nogc attribute on types Draft
DIP69 Implement scope for escape proof references Draft
DIP70 @api/extern(noinfer) attribute Draft
DIP71 'noscope' and 'out!param' attributes Draft
DIP72 Provide a Uniform Compiler Info Syntax Draft
DIP73 D Drafting Library Draft
DIP74 Reference Counted Class Objects Draft
DIP75 Release Process Approved experimentally for 2.068
DIP76 Autodecode should not throw Draft Like std.utf.byDchar, it should emit Replacement Character instead
DIP77 Fix Unsafe RC Pass By Ref Draft Fix memory safety issue in DIP25
DIP78 AST Macros Lite Rejected Abstract Syntax Tree macros without syntax extensions in the language.
DIP79 Negation of attributes Draft Negation of attributes without the need for new keywords.
DIP80 Phobos additions Draft Additions that would make phobos even more useful.
DIP81 Writing files at compile time Draft
DIP82 static unittest blocks Draft Allow for unittest blocks to be declared inside of templates which are compiled and run exactly once rather than once per instantiation.
DIP83 Configurable Assert Diagnostics Draft Allow for assert's to do pretty printing of its failing expression. Printing is configurable via specific sets of (template) function overloads.
DIP84 Static Inheritance Draft Express intent to the compiler that a user-defined type conforms to a static interface.
DIP85 Lazy initialization of const members Draft Allow limited mutation of const objects, ensuring the mutation is not observable by external code.
DIP86 "deprecated" attribute/storage class consistency Draft Allow "deprecated ( stringLiteral )" to act as a storage class.
DIP87 Enhanced foreign-language binding Draft Improve extern() to be more generic and support binding symbols that share a name with a D keyword.
DIP88 Named Parameters Draft Allow specifying named function parameters with `arg:`
DIP89 @mutable members in immutable data structures Draft Proposes an officially sanctioned way to mutate members in immutable data structures.
DIP90 Scoped Pointers Draft Tag pointers with 'scope' and 'return scope' to prevent pointer escapes