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

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Mar 4 06:34:05 PST 2009


Georg Wrede wrote:
>> 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... :-)

It's on dsource under phobos/tools. On 
http://www.digitalmars.com/d/2.0/rdmd.html, there's a "download" link. 
(I have just checked it in.)

>> 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?

Because of the primitive way the shell parses the shebang line. Consider:

#!/usr/bin/rdmd -unittest
... code ...

All's dandy. Now say I want also -O:

#!/usr/bin/rdmd -unittest -O
... code ...

No go. The shell passes "-unittest -O" as one argument to rdmd, which is 
not recognized as a flag. Always parsing the spaces away is not an 
option because there are filenames and string arguments with spaces. So 
I added --shebang to mean, parse the spaces in this argument:

#!/usr/bin/rdmd --shebang=-unittest -O
... code ...

>> 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.

Yah. I didn't know it was going away. To me it seems pretty powerful, 
e.g. more so than bash. Bummer...


Andrei


More information about the Digitalmars-d-announce mailing list