@api: One attribute to rule them All

Dicebot via Digitalmars-d digitalmars-d at puremagic.com
Fri Jan 9 03:40:27 PST 2015


I think that push for more inference / WPO is an important goal 
for D. However I had somewhat more radical and generic changes in 
mind, ones that don't add new keywords or semantics but rather 
strictly define what existing ones mean. This was supposed to be 
turned into a DIP at some point (possibly after consulting with 
Walter) but here is the draft outline:

- separate compilation in basic C sense becomes illegal
- minimal legal unit of separate compilation is defined as static 
library
- any time library gets built, it _must_ be distributed with 
matching .di interfaces. If there are original .d files imported, 
one must not try to link prebuilt library.
- .di generation is split in two modes:
     1) 'minimal' (API) which only writes exported symbols and 
ignores even public ones. All inferred attributes gets written 
explicitly there. This is what gets recommended for public 
distribution (even if it is source-only distribution) and what 
defines stable API.
     2) 'full' mode which is similar to existing .di generation 
but with all attributes explicitly written to all functions. It 
is approach recommended for creating intermediate built artifacts 
(such as dub building of dependencies).

Stability of (1) headers can be validated mechanically by 
compiler / external tool in such scenario. As you may notice no 
new keywords / language concepts are proposed, it is only about 
more strict definition of standard development flow. It also 
opens well-defined borderline for any WPO.

Needs a lot of work before any serious destruction of course but 
should give some overall feeling of what I am going at.


More information about the Digitalmars-d mailing list