«前の日記(2005年01月19日) 最新 次の日記(2005年01月21日)» 編集

Matzにっき


2005年01月20日 [長年日記]

_ [言語]Python Optional Typechecking Redux

GuidoのBlog、第4段。

「Redux」は(後置して)「帰ってきた」という意味だから、訳すと 『帰ってきたPythonのオプショナルタイプチェック』というところだろうか。

要旨は、以下の通り。

Pythonの型指定の新文法

def foo(a: t1, b: t2) -> t3:
  "your code here"

の意味を

def foo__(a, b): # The original function
  "your code here"

def foo(a, b): # Typechecking wrapper
  a = __typecheck__(a, t1)
  b = __typecheck__(b, t2)
  r = foo__(a, b)
  r = __typecheck__(r, t3)
  return r

にしてはどうか。この場合、__typecheck__()はモジュール作者が自分で定義できる。

うーん、第一弾第二弾に比べて、 ずいぶんおとなしくなってしまった感はぬぐえない。

  • コンパイル時の型チェックが完全になくなってしまった。
  • Python標準の型チェックがなくなり、モジュール作者が型チェックを導入できる余地が用意されただけ。
  • adapt()は面白いと思うのだが、それも(すくなくともデフォルトでは)使われない

なんか、がっかり。

特に良くないと思うのは、「新文法」の持つ「意味」が、 __typecheck__()関数の定義によってさまざまに変化することだ。 あるモジュールではisinstanceof()チェックが行われ、 別のモジュールではまったく同じ外見でadapt()が行われ、 また別のモジュールではsignatureによるDuckTypingチェックが行われるかもしれない。

このような「多様性/柔軟性」は私の視点からは悪である。 「文法の意味は変化しちゃいけない」というのが私の信念である。

他人を批判するばかりでは生産的でない。 もし仮に将来のRubyに型チェックを導入するとしたら、 どのようなものにするか、と問われると、今すぐに具体的な答えは出ないのだが、 現在Cエクテンションが使っているようなものに近いものになるのではないだろうか。

RubyのCエクテンションでは、構造体の型が一致している必要があるため、 DuckTypingではすまないケースが多々ある。そのような場合、

  • 要求するT_XXX型か
  • そうでなければ特定のメソッドを呼び出す(例: 文字列ならto_str)
  • そのメソッドの戻り値が要求するT_XXX型か(違えば例外)
  • そうであれば戻り値で置き換え

という手順で型チェックを行っている。RubyでTypeErrorを見かけるのはだいたいこのような状況である。 ところがRubyレベルでは(DuckTypingが容易なので)このような仕組みがないので、 型の違いはメソッドがない(NoMethodError)によって検出される。 この辺を統一する「なにか」がほしいなあ、とはずっと思っているのだ。

具体的なアイディアはないんだけど。

_ [会社]人材不足と慢性的残業の悪循環を断ち切る : Hotwired

ソフトウェア開発の生産性の話。

しかし、不思議なことにソフトウェア産業では、この「怠け者」に一人前の報酬を支払っていることが多い。場合によっては「怠け者」の言い分を真に受けて、「怠け者」の方が報酬が多くなることもある。なぜなら、他の人より長時間働くことになり残業手当が多くなるからである。この業界を知らない人にとっては信じられないことかもしれないが、これは事実である。

そうそう。時間で働くのは間違っているよね。 だから、8年前、うちの会社ができる時、 「残業手当はなしにしましょう」と提案した。 おかげでうちの会社は今でも残業手当がない(正確には「みなし残業手当て」が全員に支給されている)。 おまけに完全裁量労働制だから、仕事をこなしている限り、 何時間働こうが自由である。厳密には労働基準法がどうこうとかあるけど、 少なくとも運用上は完全に自由である。

じゃあ、従業員は怠けるか、というとそうでもなくて、 むしろ一生懸命働いている。時には私生活まで犠牲にして。 かえって上司が止めないといけないくらい。

つまり、本当のプログラマは面白い仕事には寝食を(忘れて)没頭するということなのだろう。 良い環境と良い仕事を提供することこそが鍵であると思う。

_ [Ruby]Ta-da list

共有可能なTodoを実現するWebアプリケーション。 まだ使ってないんだが、便利だという声も聞く。

しかし、もっと驚くべきことはRubyOnRailsを使って実装された、 このWebアプリケーションは、わずか579行しかないという点だ。

ちょっとRails勉強してみようかなあ。


«前の日記(2005年01月19日) 最新 次の日記(2005年01月21日)» 編集