LoginSignup
8
7

More than 5 years have passed since last update.

zshでD言語(とC言語とC++)をスクリプトのように扱う。

Last updated at Posted at 2015-08-03

D言語はコンパイルが速くて、正直bashより慣れています。少し難しい処理とかはついついD言語で書いてしまうことが多いです。(本当はpythonとか使うべきなのでしょうが...)。
しかしD言語は静的言語。コンパイル -> 実行としなくてはいけないわけです。
そこで、D言語のソースファイルをまるでスクリプトのように扱おうというのが今回の記事です。

Zshのalias -sを使う。

自分は一応Zsh使いなので、Zshの機能を使います。と言うか、この機能に関する他の方の記事をみて改良?いしました。
alias -sを使うと、特定の拡張子の時に、コマンドを省略して実行できます。

.zshrc
alias -s py=python
test.py
print("Test")

zshの設定に反映した上で、

result
namachan-PC% ./test.py
Test

こんな感じに出来ます。便利ですね。
これを応用して、

.zshrc
function rundmd(){
    dmd $1
    base=$1
    file=${base%.*}
    file
    rm -f ${file}
    rm -f ${file}".o"
}

alias -s d=rundmd

こうすれば、D言語のソースファイルをDMD(公式コンパイラ)を使って、Pythonの例のように実行できます!やったー!
と、思ったんですが、
rdmdというのがあったのを思い出しました...。これを使うと、rundmd関数が要らないみたいです...
先に気づけ自分。

追記
恐るべきことに、alias -sすら要らなかったようです。
tm_tnさんにコメントで教えて頂いたのですが、D言語の場合、
#!/use/bin/rdmd(/usr/bin/rdmdのところはインストールした場所)
で同じように出来てしまいます。
ま、まあ、Zshなら#!/usr/bin/rdmdの手間が省けるよーってことで...

GCC

一応置いときます。

.zshrc
function rungcc(){
    gcc $1
    base=$1
    file=${base%.*}
    ./a.out
    rm -f a.out
}

alias -s {c,cpp}=rungcc

上記のDMDの例を改造したら大体の静的言語でも同じように出来ると思います。
シェルスクリプトを使っているので、多少複雑なコンパイルでもいけるのが強みです。
bashスクリプトは完全に初心者なので、効率化出来る部分とかあったら教えていただけると嬉しいです。

8
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7