Counter-Proposal: restrict & tagged functions

foobar foo at bar.com
Sat Sep 1 14:13:29 PDT 2012


On Saturday, 1 September 2012 at 16:20:14 UTC, Dmitry Olshansky
wrote:
> On 01-Sep-12 17:01, Adam D. Ruppe wrote:
>> On Saturday, 1 September 2012 at 12:39:41 UTC, Dmitry 
>> Olshansky wrote:
>>> I'd say
>>> @nogc:
>>> at the top and deal is sealed.
>>
>> BTW don't forget a @yesgc would be good to counter it. We need
>> a way to turn off each attribute to use this pattern best.
>
> What I see with this @nogc proposal is that that problem it 
> tries to solve (and tool used to do so) is far more interesting 
> and general.
>
> Namely the problem is to specify that some functions can call 
> only specific subset of functions and able to use only specific 
> subset of language features. It's more far reaching then just 
> gc, one may want to get @noblocking  or @async attribute to 
> statically check e.g. that GUI thread can't ever block.
> (it would however require to identify API calls that don't 
> block, not possible on every OS, might entail some wrappers 
> etc. but is very desirable)
>
> To peek at what's more there that you can get this way see C++ 
> AMP on why restricting a block of code or function is useful
> e.g. here by Herb Sutter (including nice demo!):
> http://www.youtube.com/watch?v=HK9rJFpX32Y
>
> BTW @safe is in the same bucket, it does allow only to call 
> @safe & @trusted (read as "subset of ") functions and use a 
> subset of language features.
>
> Actually exactly the same goes for pure (noglobal whatever) you 
> just state this piece of code can't use this language feature 
> (global variables, static variables, you name it), same for 
> nothrow.
>
> And not long ago David Nadlinger showed that function level 
> trusted doesn't help much with templates that are @trusted for 
> their own code, but need normal safety guarantee from foreign 
> code brought by parameters. Thus restriction has to be able to 
> work on a block scope too.
>
> So what I want with this? I want to bring together C++ AMP 
> restrict and @safe/@trusted/@system/pure/nothrow machinery in 
> one clean and user-extensible future-proof feature.
>
> The idea in a nutshell:
>
<snip details>

I skipped the details but I do agree with the general sentiment.
This long post begs the question - Why a general annotation
mechanism isn't enough to justify adding so much complexity to
the language?

Me thinks that simply tagging malloc/alloca/GC.allocate/etc..
with a _user defined_ annotation should be sufficient without the
need to introduce all of the above syntax to the language. In
fact, I have a vague memory of reading about green/red marking of
code via templates in plain old c++. No extra syntax required.

Here's the link:
http://www.artima.com/cppsource/codefeaturesP.html


More information about the Digitalmars-d mailing list