Boost.ScopeExit based on D's scope(exit)

Georg Wrede georg.wrede at iki.fi
Wed Mar 4 01:20:40 PST 2009


Andrei Alexandrescu wrote:
> Georg Wrede wrote:
>> Andrei Alexandrescu wrote:
>>> Leandro Lucarella wrote:
>>>> Andrei Alexandrescu, el  2 de marzo a las 10:42 me escribiste:
>>>>> Leandro Lucarella wrote:
>>>>>> Boost 1.38.0 includes a new library ScopeExit:
>>>>>> http://www.boost.org/users/news/version_1_38_0
>>>>>> This library is based on D's scope(exit) according to the 
>>>>>> documentation,
>>>>>> see at the end of the link:
>>>>>> http://www.boost.org/doc/libs/1_38_0/libs/scope_exit/doc/html/scope_exit/alternatives.html 
>>>>>>
>>>>> Cool. I confess I'm mildly miffed. In the "Acknowledge" section 
>>>>> (sic) yours truly is being acknowledged "for pointing me to 
>>>>> scope(exit) construct of the D  programming language." In the 
>>>>> Alternatives section there's an unatrributed link to the ScopeGuard 
>>>>> article. My understanding of ScopeExit looks much more inspired and 
>>>>> derivative from ScopeGuard than a distinct artifact, something that 
>>>>> goes entirely unacknowledged.
>>>>>
>>>>> For some reason ScopeGuard and scope(exit) consistently escapes 
>>>>> proper acknowledgments. Petru Marginean and I introduced the 
>>>>> concept in C++ and argued for its usefulness. I invented the gorram 
>>>>> scope(exit) statement for D, and Walter almost forgot to 
>>>>> acknowledge me. And now this. What are you going to do...
>>>>
>>>> Is there any particular reason why you are so concerned about 
>>>> credits? I'm not saying they don't matter, but you seem to take it 
>>>> too hard.
>>>
>>> I'm, if anything, at the very low end of credit-beggars foodchain. 
>>> You wouldn't believe if I told you about some (rather notorious 
>>> within the community) people I know that ought to be a tad more 
>>> modest :o). I just have a dim view of not giving credit. Proper 
>>> credit is extremely easy to give, costs nothing, and is the right 
>>> thing to do. The author of ScopeExit clearly knew everything of 
>>> ScopeGuard since he linked to it, but did not quite acknowledge the 
>>> relationship of his work to ScopeGuard, which should be done even 
>>> assuming he developed ScopeExit entirely in isolation. That's just... 
>>> you don't do that.
>>
>> I'm at the low end too. For example, rdmd is based on my original 
>> idea. But by not begging around for acknowledgements, I bet nobody at 
>> all knows it anymore.
>>
>> Many years ago I sent a private mail to Walter with the idea, six 
>> months later I started advocating it vigorously on this NG, later I 
>> mailed a shell script to him that does what rdmd does now.
>>
>> The whole concept is mine, right down to shebangs in D source files 
>> and caching binaries.
>>
>> Heh, so incidentally, there might be some point in activating myself 
>> in that area. Also outside of the D community.... :-(
>>
>> The biggest lie I've ever heard is "the meek shall inherit the earth".
> 
> I had no idea. Good you told me, I've put an ack in the source file.

Thanks. I tried to locate the source in the dmd tree, but in vain.
So probably it should appear when rdmd is run with no arguments for 
there to be any effect... :-)

> By the way, I added a couple more flags:
> 
> Usage: rdmd [RDMD AND DMD OPTIONS]... program [PROGRAM OPTIONS]...
> Builds (with dependents) and runs a D program.
> Example: rdmd -release myprog --myprogparm 5
> 
> Any option to be passed to dmd must occur before the program name. In 
> addition
> to dmd options, rdmd recognizes the following options:
>   --build-only      just build the executable, don't run it
>   --chatty          write dmd commands to stdout before executing them
>   --compiler=comp   use the specified compiler (e.g. gdmd) instead of dmd

Heh, had to actually use this one when I checked rdmd before posting. 
Now i have dmd1 and dmd2 and obviously needed this.

>   --dry-run         do not compile, just show what commands would be run
>                       (implies --chatty)
>   --force           force a rebuild even if apparently not necessary
>   --eval=code       evaluate code a la perl -e
>   --loop            assume "foreach (line; stdin.byLine()) { ... }" for 
> eval
>   --help            this message
>   --man             open web browser on manual page
>   --shebang         rdmd is in a shebang line (put as first argument)

If foo.d is to be run like

$ ./foo.d

then rdmd has to be on the shebang line anyway. And if you run

$ rdmd foo.d

then you're already running rdmd. So, where do you use --shebang?

> Of particular interest are --eval and --loop. Very helpful :o).

Oh, these both are cool!

PS: are you using zsh? The examples on 
http://www.digitalmars.com/d/2.0/rdmd.html have a percent prompt instead 
of the dollar prompt. Zsh seems to be fading out, the faq 
http://zsh.sourceforge.net/FAQ/zshfaq01.html is from 2005, and the last 
Fedora doesn't even have zsh as an option.


More information about the Digitalmars-d-announce mailing list