|
|
|
|
| 言語 | 名前 | API | 実装 | 衝突 | 部分 | 状態 | 継承 | 個別 | 動的 | 利用方法 |
|---|---|---|---|---|---|---|---|---|---|---|
| Smalltalk | Traits | ◯ | ◯ | ◯ | ◯ | × | × | × | × | use |
| Scala | Trait | ◯ | ◯ | ◯ | × | ◯ | ◯ | ◯ | × | extend(〜with) |
| Ruby | Module | ◯ | ◯ | × | × | ◯ | ◯ | ◯ | ◯ | include/extend |
| pure-traits | ◯ | ◯ | ◯ | ◯ | ◯ | × | ? | ? | use | |
| ruby-traits | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ? | ? | use | |
| Perl6 | Role | ◯ | ◯ | ? | ? | ? | ? | ? | ? | ? |
| Java | Interface | ◯ | × | × | × | × | × | × | × | - |
Rubyのruby-traitsが最強じゃね?これをRubyのデフォルトにすればよくね?
Traitの定義
|
Traitを利用するクラス
|
トレイトを実装する(or 取り込む)言語が年々増えているので、やはり方向性は正しそう。ただ、SqueakのTraitsに関しては、以下の問題点がある。
この現在の仕様(stateless、unchainable)のせいで、Smalltalkerには積極的な利用者はいなそう。個人的には、statefulかつ利用時にstate初期値を明示できるタイプのミックスインが最終形だと思ってる。Ruby+Scalaゴチャ混ぜで書くと、こんなイメージ。
trait KVS {
def get(key:String)
def put(key:String, value:String)
private
val storage:Storage
}
trait SQLite3 extend KVS {
... // SQLite3 operations
}
object Registry extend SQLite3(:mem)
class User extend SQLite3("file:db/users.db")
user = User.find_by_name("maiha")
user["foo"] = ...
user.extend SQLite3("file:db/debug.db")
user.save! |
てことで、初めて参加したけど、アットホームで新参にも優しい雰囲気でした。(Smalltalkインスコしてないのもバレなかったし)。Smalltalkを全く触ってなくても、今回のTraitsのようにピンポイントで興味のあるテーマに参加するのもよさそうです>Smalltalk勉強会。他言語の視点に立つと、色んなものが見えてきますね。異文化交流重要!
「今、日本一の美人は誰?」そんなアンケートを仮に全国民に行ったとすれば、色んな意見が出る中、結果は恐らく「黒木メイサ」になるだろう(仮説1)。では、問いを「日本一可愛いのは誰?」に変えてみる。すると、結果は確実に「岡井千聖」になるから不思議だ(俺調べ)。そんな今をときめく岡井ちゃんが、Ustでグダグダ生放送しちゃう、という夢のような企画。その名も「岡井ちゃん、寝る」。いつも無邪気で驚くほど自然体。アイドルでありながら自らを過度に飾らないのが彼女の一番の魅力である。そんな自由気ままな彼女にさらに自由を与えると、一体何が起きるのか!?想像しただけでも興奮で震えが止まらない小一時間。それが「岡井ちゃん、寝る」。結果から言えば、アイドル史に残る神番組でした。そもそも番組なのか?ネットの普及に伴い日々多様化するエンターテイメントの中においても、この瞬間、何かが変わった気がした。
| |
企画者、運営者、お疲れ様でした。是非2回目の開催もお願いします。
Thor タスクを書いていて
desc "load KVS_FILE", "load data from given KVS file"
def load(kvs_file)
case kvs_file
when "shift"
ksv_file = Dir.glob("kvs/requests/*").sort.first
when "pop"
ksv_file = Dir.glob("kvs/requests/*").sort.last
end
p kvs_file |
load("shift") しても "shift" が表示されちゃう謎の現象に遭遇。
とか色々調べること10分。原因に気付いて愕然としました。てことで、やはり Ruby にも変数宣言が欲しい、というか、無いとダメだ!しかもオプションで使えるレベルでなくデフォ強制が必須。ワンライナー(golf)用途に、disableにするオプションがあるぐらいの勢いで。
という正論が成立しそうだが、それは違う。そういうつまらないミスを言語(環境)が指摘してくれることで、ユーザはもっと本質的なロジック部分だけに集中できるのだ。というのも、コンパイラ言語を使った後でRubyに戻ってくると、そういう非本質的な部分(変数名を必死にケアするとか)にも神経を使う必要があって、同じ時間のコーディングでも遥かに疲れるのだ。この知見をRubyにうまく還元して、Rubyをもっといいものにしたい。
仕事でレスポンスを大量に捌きたいという要求があったので、現時点で自分が使いそうな各MVCフレームワークを調査しました。調査対象は render text で、コントローラのアクションレベルまで到達してすぐに文字列を返す能力のMAX値です。サービス稼動中のサーバでの実測値ですので、厳密な値ではありませんが、おおよその目安としてどうぞ。
| 名前 | バージョン | サーバ | 戦闘力 (req/sec) |
|---|---|---|---|
| rack | rack-1.1.0 | thin-1.2.7 | |
| sinatra | sinatra-1.0 | thin-1.2.7 | |
| play-scala | scala-0.6 | play-1.1-r912 | |
| merb | merb-1.1.0 | thin-1.2.7 | |
| rails | rails-2.3.6 | thin-1.2.7 |
生rackは反則かもしれないが、その速さは異常。値に度肝を抜かれたので、早速rackで実装してみた。その結果、
ことがわかった。もし3000フルにでれば生rackで頑張るけど、実用のためには他のフレームワークがやってることを追加する必要があって、Rackミドルウェアがあるにしても、そのへんを組み合わせる労力とスコアの落ち込みを考慮すると、ちょっと割に合わない感じがした。
ということでsinatraを採用。実際は、sinatraベースのMVCである monk-glue を利用。上記のベンチ用ではない実際のアクションでの戦闘力が900程度出たので満足。Merbでもいいんだけど、今回は少しでも速いものが欲しかったので回避。Railsは3.xに期待。あとは、play-scalaが意外と健闘してるのが嬉しい。ただ、現時点ではplay,scala-module共に不安定なのでproductionでは使いづらい。play-1.1 が正式リリースになったら速攻で移住する予定。今後3〜5年を見据えると、Scala+Actor+WebSocketは重要になるだろうし、そのインフラとしてのplay-scala with akkaは凄く楽しいはず。
| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |
| 前 | 2010年 7月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 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 |