Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20150201 シェル芸勉強会LT GlueLangについて (シェル書いてますが何か?)

5,605 views

Published on

GlueLangの説明。パブリックなスライドは初めて。

Published in: Technology
  • Be the first to comment

20150201 シェル芸勉強会LT GlueLangについて (シェル書いてますが何か?)

  1. 1. GlueLangについて (シェル書いてますが何か?) USP友の会/AIIT 上田隆一
  2. 2. Twitterでよく見かける風景 • シェルスクリプトをシェルと言うやつは技術力が低いと 何の根拠もなく断定する人 • 課題で「シェルを書け」と言われて困惑する学生 • シェルスクリプトをシェルと言う人にイライラする人 – シェルスクリプトをシェルと言う人にイライラする人にイライラする人 • シェルスクリプトをシェルと言う人にイライラする人にイライラする人にイラ イラ(以下略) • 単にイライラしている人(ホルモンバランス) • イライラ棒(関係ない) • イラン・イラク戦争(1980年。全く関係ない) Feb. 1, 2015 第15回シェル芸勉強会 2
  3. 3. 提案 • イライラしても他人の発言は変えられない (そしてわりとどうでもいい) • しかしイライラは少ないほうがよい • みんながシェルを書けば、シェルとシェルスクリプト は自ずと区別されるのではないか? – まずは自分が Feb. 1, 2015 第15回シェル芸勉強会 3
  4. 4. というモチベーションで作られている(嘘) GlueLang • の使い方の話を今日はさせていただきたく。 • Glue: Good enough Language for Unix Environment (後付け) – 「Unix環境用のまあまあ使える言語」 – 言語というよりはシェルだけど Feb. 1, 2015 第15回シェル芸勉強会 4
  5. 5. なんでこんなものを作っているのか • 身近な人はご存知だと思うが・・・ 実はシェルスクリプトが好きではない(つまり私怨) • なぜ好きではないか – 変数を使い出すと混乱 • 私の主張: 「データ処理のときはパイプラインを使いましょう」 – しかし現場では変数を使わざるを得ない • 「システム管理なのでコマンドの利用を控えたい」 • これも理解できる Feb. 1, 2015 第15回シェル芸勉強会 5
  6. 6. – コードが古い • bash: 未だにK&R • dash: C言語雑技団 • 読むのが大変 • 去年のような事件が再度起こる原因かもしれない – UIとしての機能とスクリプト言語としての機能の衝突 • UI: 早く打ち込めるように • スクリプト言語: きれいに書けるように Feb. 1, 2015 第15回シェル芸勉強会 6
  7. 7. しかしながら • シェルの役割は「普通」の言語には無理 • シェル = コマンドの糊 – 「グルー言語」を標榜する高級言語はいろいろあるが、 ライブラリレベルでくっつけている(それはそれでよい) – シェルはプロセスレベルのグルーで、さらに高級であるが、 なぜかガテン系ツールのような扱い • おそらくモダンでないので Feb. 1, 2015 第15回シェル芸勉強会 7
  8. 8. ということで • コードをかっこ良く書ける新たなシェル言語を模索中 – https://github.com/ryuichiueda/GlueLang Feb. 1, 2015 第15回シェル芸勉強会 8
  9. 9. 能書きは後。まずはコンパイル • 環境 – C++11のコンパイラ(clang、gcc)があるUnix環境 – テスト環境 • Macの新しいやつ • Ubuntu 14.04 • ダウンロード – $ git clone https://github.com/ryuichiueda/GlueLang – $ cd GlueLang – $ make – (/usr/local/binにぶち込んでよい人はmake install) Feb. 1, 2015 第15回シェル芸勉強会 9
  10. 10. 動作確認 • 次のように「/bin/ls」とだけ書いたファイルを準備 • glueコマンドに食わせてlsが起動すればOK Feb. 1, 2015 第15回シェル芸勉強会 10 $ cat ls.glue /bin/ls $ ./glue ls.glue Arg.cc Condition.h IfBlock.o Pipeline.o VarString.o ...
  11. 11. コードの例1 • とにかく何かあったら 止める • エラー通知も丁寧に – どこで止まったか – どのプロセスで止まったか Feb. 1, 2015 第15回シェル芸勉強会 11 import PATH seq 1 10 >>= gre 5 >>= sed 's/5/hoge/g' uedambp:GlueLang ueda$ ./glue hoge.glue Parse error at line 3, char 14 line3: seq 1 10 >>= gre 5 >>= sed 's/5/hoge/g' ^ Command gre not exist process_level 0 exit_status 1 pid 23738
  12. 12. コードの例2 • 処理の単位はファイル入出力 – 一番大切なファイル(中間ファイル)が左側に来るように – 一つのスクリプトは適切にインデントすると 中間ファイルの羅列になる – (中間ファイルは勝手に消えます。まだバグあるけど。) Feb. 1, 2015 第15回シェル芸勉強会 12 import PATH file o_file = ls >>= grep '.o' file h_file = ls >>= grep '.h' cat o_file h_file
  13. 13. コードの例3 • 1回だけ使う中間ファイルはwhereの中に閉じ込める • これよりは見やすい(主観だけど) (ちなみにdiffの前の「?」は終了ステータスが0じゃなくても続行するために書いてある) Feb. 1, 2015 第15回シェル芸勉強会 13 import PATH ? diff a b where file a = seq 1 10 file b = seq 1 11 seq 1 10 > a seq 1 11 > b diff a b
  14. 14. 実装の方針 • C++ – オブジェクト指向でSTLを使って書いている • オブジェクト指向は絶対に死にません(笑) • コードをきれいに(今ちょっときたないが・・・) – ただしgetやsetメソッドは極力控える – 標準ライブラリだけで。マクロを使わないように。 • パフォーマンスはプロセス制御のレベルに合わせる – forkの数を抑えるのはシェルの役目ではない。Cで書け – 当然、特定の局面ではパフォーマンスは劣る Feb. 1, 2015 第15回シェル芸勉強会 14
  15. 15. まだ実装していないもの(一部) • ヒアドキュメント・ヒアストリング – ちょっとしたデータファイルやawkのコードを書けるようにしたい。 次の作業 • ワイルドカード – 便利だが汚いので慎重になっている • ネイティブな計算処理 – awkとsedに丸投げでいいんでないかという噂も – 文字列の足し算と部分文字列くらいは実装したい • forやwhile – 必要かなあ? Feb. 1, 2015 第15回シェル芸勉強会 15
  16. 16. 実装が怪しいもの(助けて!) • シグナル処理 – よく分かってない • 文字列をバインドするときの処理 – 名前付きパイプを使ってしまった • その他いろいろ – エラー処理の見落とし等 Feb. 1, 2015 第15回シェル芸勉強会 16 import PATH str a = seq 1 10 >>= grep 5 echo a コマンドの出力が 名前付きパイプを通って str aにバインドされる (どう考えても冗長だし 外から突かれる)
  17. 17. 普及までの遠い道のり • ドキュメント – マニュアル、チュートリアル、きれいなウェブサイト • 信頼性 – 非同期な部分のテスト • パッケージシステム+その周辺 – 単なるコマンドのコレクションなので他の言語より簡単だが・・・ • 作者の改良 – ほどほどに社交的になってきたがまだ内向的 Feb. 1, 2015 第15回シェル芸勉強会 17
  18. 18. 現時点でのコントリビュータ • @ryo1kato氏 – 最初のプルリク • Yoshihiro Tanaka氏 – vim用シンタックスハイライター作成 – https://github.com/CORDEA/vim-glue • @bsdhack氏 – シグナル処理等の相談役 Feb. 1, 2015 第15回シェル芸勉強会 18
  19. 19. ということで • ご協力を。 – どんな作業があるのか私から聞き出してくれるだけでも ありがたく – GitHubで(英語) – USP友の会GlueLang部会 • https://www.facebook.com/groups/780590598679602/ Feb. 1, 2015 第15回シェル芸勉強会 19

×