wilzbach / tools-test

1 stars 0 forks source link

rdmd: let args[0] be the .d file #113

Open wilzbach opened 10 years ago

wilzbach commented 10 years ago

Note: the issue was created automatically migrated from https://issues.dlang.org

Original bug ID: BZ#13347 From: Nils <nilsbossung@googlemail.com> Reported version: D2

wilzbach commented 10 years ago

Comment author: Nils <nilsbossung@googlemail.com>

When rdmd is used to sort-of interpret a .d file, it's actually compiled to a temporary executable and then run. As usual, args[0] is then the temporary executable. That path is next to useless, though.

Other interpreters (bash, python, perl, php) pass the script file as args[0]. This allows to write scripts that act relative to the script file, no matter from where they were run.

Would be nice if rdmd did that, too. This would be a breaking change, of course. But I can't imagine someone making use of the path to the temporary.


cat > test.d << code import std.stdio; void main(string[] args) {writeln(args[0]);} code rdmd test.d

/tmp/.rdmd-1000/rdmd-test.d-C7F94BC2B631D6BDE0380D58270F3E01/test

Compare with bash, python, perl, php:


echo 'echo $0' > test.sh bash test.sh echo 'print "$0\n"' > test.pl perl test.pl echo 'import sys; print sys.argv[0]' > test.py python test.py echo '<?php echo "{$argv[0]}\n";' > test.php php test.php

test.sh test.pl test.py test.php