Rubyロゴコンテストについて。
笑っちゃうのはこのロゴ。
まあ、実際。世間的にはRailsあってのRubyとみなされていることが多いと思うので、 そうでないことを明示的に示すメッセージを発信することにはなると思う。
我々としてもRailsの知名度を利用していないとは言えないので、 あんまり突き放すのも誠実な態度ではないか。悩ましいところである。
ま、とはいえ、だからといってこのロゴを採用したりはしないけど(エントリされてないし)。
Cを誉め称える記事、のように見えるが、 実際には言ってることと実際が全然違う、という記事。
ほめごろし?
まあ、こういう抽象化が必要なケースでは Lispにかなう言語はなかなかないよなあ。
Cのアンチ・イディオム4つ。
mallocの戻り値をチェックする
failmallocの件とは正反対だが、たしかに多くのプログラムでは どうしようもないというのも事実だ。でも、例外が使えるなら raiseした方が良いと思う。
void*をキャストする
キャストを強制されるC++と違ってCのvoid*はそのまま代入できる。 こっちの方が良い(と著者は思っている)。
小さな構造体を参照渡しする
もうオーバーヘッドは問題ない。どんどん使おう。
mallocのsize指定
sizeofの引数に型を指定すると変更箇所が増える。 式そのものを書くと型が変わっても対応できる。
賛成できるようなできないような。
マイクロベンチマークの使い方。
マイクロベンチマークっていうのは 実際のアプリでないベンチマーク向けのプログラムによって 性能を測定すること。
言語処理系(インタプリタとかバーチャルマシンとか)の性能を測定すること になるが、実際のアプリケーションではむしろライブラリの性能の影響の方が大きい。 ので、大抵の場合、マイクロベンチマークは不適切に用いられている。
まあ、世間の誤解ってのはなかなか解けないよね。
なら、それを逆に利用してしまおう。
今回、YARVでマイクロベンチマーク性能を改善することで 実は世間の「マイクロベンチマーク信仰」を逆手にとって マーケティング効果があがることを 期待している。
PythonのORMである、SQLAlchemyとElixirではSQLAlchemyを使うべきだ、という話
SQLAlchemyの例:
from sqlalchemy import Column, ForeignKey, MetaData, Table, types from sqlalchemy.orm import mapper, relation metadata = MetaData() person_table = Table('person', metadata, Column('id', types.Integer, primary_key=True), Column('name', types.String, nullable=False), Column('age', types.String) ) group_table = Table('group', metadata, Column('id', types.Integer, primary_key=True), Column('name', types.String, nullable=False) ) persongroups_table = Table('person_groups', metadata, Column('person_id', types.Integer, ForeignKey('person.id', ondelete='CASCADE'), primary_key=True), Column('group_id', types.Integer, ForeignKey('group.id', ondelete='RESTRICT'), primary_key=True), ) class Person(object): pass class Group(object): pass mapper(Person, person_table, properties=dict( groups=relation(Group, backref='people', lazy=False) )) mapper(Group, group_table)
Elixirの例:
from elixir import * class Person(Entity): has_field('name', String) has_and_belongs_to_many('groups', of_kind='Group') class Group(Entity): has_field('name', String) has_and_belongs_to_many('people', of_kind='Person')
Elixirの方がだいぶActiveRecordっぽい。ひとめ見ると誰の目にも Elixirの方が魅力的に見えるが
というようなことを考えると(うへー、またExplicit Better Than Implicitだよ)、 やはりSQLAlchemyの方が良い(と著者は考える)。
Leaky Abstractionの弊害については理解できないでもないけど、 ここまで表現の優劣が出るのに採用しないってのは、 それがPython的ってもんなのかねぇ。
RubyConf 2007の暫定プログラムが決まった。
今年からはマルチトラックということだ。 RubyConfの成長曲線を考えるとある意味必然なんだが、 今までのRubyConfらしさを失ってしまいそうで、 少し残念な気がする。いや、変化も当然なので、文句を言っているわけではないけど、さ。
2日目の午前中のセッションがIronRuby, JRuby, Rubiniusと来てるんで、 YARVもなにか言うべきではないのだろうか。
同じ日に予定されている私のキーノートの時間をあげようか? > ささだくん