夜空日和 [出張版]

星を見上げながら、今日を語ってみようか

 

スポンサーサイト


Category: スポンサー広告   Tags: ---
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DSLって難しい


Category: 雑記   Tags: ---
Rubyのメタプロ本を読んで、いつかはDSLを作ってみたいと思っていました。
んで、研究で必要になったプログラムに対して、入力の簡略化のために、DSLをこしらえました。

最初に「こう書きたい!」という思いがあって、それを具体化するために試行錯誤しましたが・・・
内部DSLには、向き不向きがあるのだなっと、当たり前のことを感じる結果でした。

1. 演算子が自由に使えない
Rubyでは、代入に関する演算子のオーバーライトが認められていません。
また、 ? などを演算子にすることも出来ません。
必然的に、「こう書きたい」という思いを、修正しなければなりません。
(※裏ワザ有り)

2. "変数"を扱いづらい
DSL内部の変数を定義して使おうとすると
 ・宣言部をどのようにするか
 ・使用箇所をどうやって見分けるか
この2点が課題になりました。
必然的に宣言部では Symbol or String を使用することになります。
しかし、使用箇所で Symbol や String を使用した場合、それがどこで宣言されたどの変数なのかを判定しなければなりません。
また、変数由来の演算 (メソッド) を定義した場合、Symbol や String ではそれが使いづらくなってしまいます。
それが嫌だったので、今回は method_missing で・・・と思っていたのですが、DSLで instance_eval を使用した場合、コンテキストが変わってしまうため、宣言された変数の情報をどうやって共有するかが課題となってしまいました。
手段としては、グローバル変数 or 定数 or lambdaによる共有スコープ の3つが考えられます。
どれも一長一短ですが、今回は実験的に、共有スコープを採用しました。 (理由なし)

3. 中間構造を決めにくい
今回は hash を噛ませていますが。
初期のプログラムでは、DSLから直接アルゴリズムが使用する中間構造を生成していました。
しかし、DSLを全て読み込んでからでないと決まらない情報があったため、直接導出が困難でした。
今は hash を通して中間構造の生成を別にしていますが・・・

4. アルゴリズムへの汚染を排除しなければならない
当たり前のことですが。
DSLに使用するメソッドを、アルゴリズムに持ってくるのは危険です。
今回は DSL をFile.read で一度読み込んで、それを解析用クラスのインスタンスに入れることで解決しています。
( クリーンルームと呼ばれる手法らしいです )
また、ファイルから一度文字列として起こすことで、DSLを書き換えることもできます。
例えば 「 := 」 という演算子はRubyでは無理ですが、このフェーズで書き換えてしまえば使用はできます。
(※これが裏ワザ。 単純なトークン置換)

結論として。
DSLから直接 (または言語支援を得て直感的に) 中間構造に起こせる内容なら、内部DSLでも問題ないと思いました。
私の場合は、パーサージェネレータで一度言語を作った方が速かったのでは・・・と思っています。

まぁ、今回は hash さえ受け取れれば実行できる構造にしたので。
Raccを使用して外部DSL化することも可能かもしれませんね。 (あれ、泥沼?)

スポンサーサイト

[ruby] RoRでサービス作ってみました


Category: 雑記   Tags: ---
rails + heroku 使って、初めてサービス作ってみました。

Joysound Request Ranking Tracker

↑ のリポジトリ [github]

Joysoundのリアルタイムリクエストのランキングを、時系列(1日ごと)に見るサービスです。

現在は、自分しか使うことを考えてないので、指定したアーティストしか見れません。
他のアーティストを監視したいなら、上記リポジトリを使って、自分でサービス立ててください m9( ゚д゚)
( 今後、任意に増やせるようにするか考え中 )

・・・うん、俺が欲しいから作っただけだよ!

Drobo奮闘記


Category: 雑記   Tags: ---
Drobo FS が \(^o^)/ から /(^o^)\ になって ナオッタ━(゚∀゚)━! するまでのお話。

[せっかちな人の為のまとめ]
0. Drobo が「内部エラーでマウントできません」状態
1. Windowsを英語環境に変える
2. Dashbord で Ctrl - Shift - M を入力
3. 特別サポートツールで PROCEED と入力
4. 数時間待ちましょう
5. キタ━(゚∀゚)━!

参考 : Drobo Technical Support

※ 個人の責任で実行しましょう。著者は責任を持てません。

 

収束点


Category: 雑記   Tags: ---
今日のニュースで、任天堂およびソフトメーカがマジコンの輸入販売差し止めと損害賠償を求める訴訟を起こしたことを聞いた。
長々と続いてきたこの無法地帯にも、ようやく収束が見えた感じだ。

自分は、この問題にとやかく言うことはしないが。
一つ言えることは、ソフトウェアを実行できるハードウェア(俗称マジコン)を作った会社の技術力の高さである。DSソフトの外部仕様なら公開されているかもしれないが、ソフトウェアをエミュレートするのはかなり難しいことである。この部分の実装・解析能力を、少しでも分けて欲しい気分になる。

しかしながら、今回はこれが裏目(もとい恨め)に出てしまったようで。
今回の騒動を気に、マジコン開発元は技術の展開を、ソフト開発元は面白いソフトを作って欲しいものだ。
(けっして、鶴の一声で駄作を作ってしまう会社にならないで欲しい・・・と切に願う)

一票の重み より 一票の軽み


Category: 雑記   Tags: ---
8時丁度に変わる番組と、そこに示された笑える結果と、あまりにも詰まらない展開。
出口調査の結果がこれじゃ、自分の期待してた結果にはならなそうだ。


 

10 2017
SUN MON TUE WED THU FRI SAT
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

09

11


 
プロフィール

ひでたそ

Author:ひでたそ
Comment:
現役大学生で天文好き。
今日もどこかで、上を見ながら歩いています。

 
 
 
最新トラックバック
 
 
検索フォーム
 
 
 
ブロとも申請フォーム
 
QRコード
QRコード
 

Archive   RSS   Login

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。