MacとLinuxのパスの違いも吸収できるようにした

Sat Jan 17 14:10:02 JST 2015 (modified: Fri Sep 29 21:38:45 JST 2017)
views: 1408, keywords:プログラミング,GlueLang,where,グルー言語を作る この記事は最終更新日が6年以上前のものです。

GlueLangでとうとうwhereが使えるように

週末プログラマー上田Zです。(きもちわるい)

どうしても実装したかったwhereを本日ついに実装しました。まだスコープが分かれてませんが。

whereの使い方

例えばシェルスクリプトでこう書いたとします。ファイルaとbを作って、diffで比べています。

seq 8 > a
   seq 10 > b
   
   diff a b

しかし、aとbをdiffでしか使わないとしたら、aとbをdiffのためだけに作っているようにコードを見せたほうがよいということで、Glueでは次のように書けます。

import PATH
   
   ? diff a b
    where file a = seq 8
    file b = seq 10

これならコードの他の部分を読んでいるときに目障りなaとbが視界に入りません(いや、右目にちょっと入るが・・・)。まだ実装してませんが、名前もローカルで定義でき、diffの処理が終わったらaとbの実体(中間ファイル)を消すこともでき、事故も減ります。ローカルスコープにするのも中間ファイルを消すのもまだ実装してませんが・・・。

ちなみにdiffの頭につけた?(if)は、diffが0でない終了ステータスを返してもスクリプトが終了しないためのズルです。

環境変数PATHも使えるようにした

そして、上の例でも使いましたが、「import PATH」と書くと環境変数のパスを全部読み込んでくれるようにしました。

import PATH
   
   echo 'もうフルパス指定もprefixも不要。'
   echo 'ただ、指定して書いたほうが厳密なので指定した方がいいかも。'

もう一つimportの規制緩和ですが、異なるパスに同じprefixをつけることができるようになりました。例えばawkはMacだと/usr/local/bin/、Linuxだと/usr/bin/にありますが、次のように書いておけばどっちでも動きます。

import /usr/local/bin/ as sys
   import /usr/bin/ as sys
   
   sys.awk 'BEGIN{print "hoge"}'

ようやく言語っぽくなってきました。

ノート   このエントリーをはてなブックマークに追加 
 

prev:今日もruminを試し、作っていただいたGlueLangのシンタックスハイライトを試した next:受理された論文のプレプリント

やり散らかし一覧

記事いろいろ