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もなにか言うべきではないのだろうか。
同じ日に予定されている私のキーノートの時間をあげようか? > ささだくん