ラベル ComputerLanguage の投稿を表示しています。 すべての投稿を表示
ラベル ComputerLanguage の投稿を表示しています。 すべての投稿を表示

2010年4月30日金曜日

LLVMのロゴ

LLVMにロゴがあったなんて知らなかった。

LLVM 2.7 がリリースされたけれど、X86-64の対応が甘いのは相変わらずっぽい。
自分で解決しろってことか…。

2010年1月21日木曜日

Groovyは僕を幸せにするか?

Groovyを使ったらプロトタイプ開発=製品開発にできるだろうか?


プロトタイプ作成にRuby使って書いたコードを、製品用にJavaに書き直したとき
Rubyのコードは600行(約15KB)位だったのに
Javaのコードは1200行(約34.5KB)超えてちょっとうんざりした


Ruby→Javaにしなければならなかった理由は

  1. バグ修正、機能拡張 ← 担当者がRuby知ってることはオプション。Javaは必須要件。
  2. パフォーマンス ← 軽くて早いのがいい

という事だったかな。

「Java必須ならRubyも必須でしょ?」はちょっと難しそうだけど
「Java必須ならGroovyも常識でしょ?」ってちょっと頑張ればごり押しできるかも
...とか妄想してみたりしなかったり。

Groovyのパフォーマンスはどうなんだろう。調べてみたい。

2009年12月17日木曜日

左再帰を取り除くメモ

左再帰
A : A B0
| A B1
...
| A Bn
| C0
| C1
...
| Cn
※1 B0 ... Bn はε(空)ではない
※2 C0 ... Cn は A を先頭に持たない

左再帰を消す
A : C0 A_tail?
| C1 A_tail?
...
| Cn A_tail?

A_tail : B0 A_tail?
| B1 A_tail?
...
| Bn A_tail?

2009年11月20日金曜日

The Go Programming Language

Googleで開発中の新しい言語だ〜
The Go Programming Language
ちょっと面白そうかも。

2009年10月14日水曜日

不等号演算を論理積でつなげてみた

if A < B < C
# 本体
end
こんな条件式を書けたら素敵じゃない?

処理の流れは、
  1. Aを評価して(a)に保存する
  2. Bを評価して(b)に保存する
  3. (a) < (b) を評価してfalseなら終了
  4. Cを評価して(c)に保存する
  5. (b) < (c) を評価してtrueなら本体を実行
とする。

Rubyで書くとこんな感じ↓
a = A
b = B
if a < b
c = C
if b < c
# 本体
end
end

Bの評価を1回だけ行うところがミソ。
こんな風に書けたら便利だと思う。

ところで、

A < B < C
A < B <= C
A <= B < C
A <= B <= C
A > B > C
A > B >= C
A >= B > C
A >= B >= C

これらの組み合わせは、並び順が大小関係になっているので認識しやすいと思う。

一方、

A > B && B < C → A > B < C
A > B && B < C → A > B < C
A < B && B < C && C > D && D < E → A < B < C > D < E

こんなのもあったら便利かな?

2項演算子は左辺のオブジェクトのメソッド呼び出しだから、記述できても何ら不都合はないはず。
むしろHaskellのモナドみたいで面白いかもしれないね。

a = A
b = B
if a < b
c = C
if b < c
d = D
if c > d
e = E
d < e # 最後の条件判定の結果は使われていないのでif文を省略
end
end
end