Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Matzにっき(2005-01-04)
[go: Go Back, main page]

«前の日記(2005-01-03) 最新 次の日記(2005-01-05)» 編集

Matzにっき

<< 2005/01/ 1 1. 新年会
2 1. 松江
3 1. 年始
4 1. Adding Optional Static Typing to Python
5 1. Python Is Not Java
2. 米子
6 1. Playing with Ruby
2. The Evolution of an Extension Language: A History of Lua
3. MS、ソフトのコンパイル・編集に関する特許を取得
7 1. Optional Static Typing -- Stop the Flames!
2. Typing Ruby - Ruby言語型チェックプログラム
3. 会議
4. “特許テロ”と戦う手段
5. PHPが「2004年のプログラミング言語」に〜TIOBE Index
8 1. The Guido van Robot Programming Language
2. A New Linux Business Model
3. Alan Ver0.08
9 1. 岡山
10 1. The design of the Inferno virtual machine
2. DSL Design Considerations
3. Free Money for Rubyists!
4. YARV: Yet Another RubyVM 0.1.0
11 1. IBM、500件の特許をオープンソースに「寄贈」
12 1. Sun CEOが語る「Javaをオープンソース化しない理由」
2. PostgreSQLをメインストリームに推すPervasive
3. 新年会
13 1. 私はなぜXMLを愛していないか 〜 言語屋の視点から
2. Looking for Japanese allies
14 1. 知識共有を基盤とした高度造船CIMの開発研究
2. Famous and not so famous programming quotes
3. Python in What's Ruby
4. 10代男の子の『なりたい職業』第1位は、プログラマー
15 1. マイクロソフト平野氏「特許は新製品を生み出すドライビングフォースとして無視できない」
16 1. 出雲
2. 誕生日
17 1. ミクロマンマニアックス
2. Linux Magazine 3月号
18 1. Matz's diary:マイクロソフトは、オープンソースソフト陣営にどこまで接近できるのか
19 1. ビジター(訪問者)
2. 『C++の設計と進化』
20 1. Python Optional Typechecking Redux
2. 人材不足と慢性的残業の悪循環を断ち切る : Hotwired
3. Ta-da list
21 1. OOPSLA 2004 Proceedings
22 1. 今日のハック
2. 水鳥ウォッチング
23 1. 松江
24 1. 文法の意味
2. Transmeta、経営再建へ - 知財と技術ライセンス重視へ
3. 知っておきたかったこと --- What You'll Wish You'd Known
4. [ANN] Ruby 2.0!
5. Ruby-on-Rails Effect
25 1. 見直しがすすむGPL
26 1. 米サン、基本ソフト特許1600件を無償公開
2. accident attempt
27 1. Developers Summit 2005
28 1. 三ヶ月目
2. Ten Things Every Java Programmer Should Know About Ruby
3. OOP Is Much Better in Theory Than in Practice
4. ふたば祭
29 1. 『ハッカーと画家』
30 1. 松江
31 1. 「本当にオープン?」、米Sunの特許無償提供に民間団体が異議
2. FSFは将来のGPLに対してフリーハンドか
>>
Dr.Web 予測するアンチウイルス  Hiki も使った新サイト、10/18 リニューアルオープン!

2005-01-04 [長年日記]

_ [言語]Adding Optional Static Typing to Python

Python作者、Guido van Rossum自らPythonにオプショナルな静的型を導入することについて語る。 パート1パート2

さすがはGuido、Python Type SIGでのさまざまな議論を反映しているとみえて、素晴らしいまとめである。 CLOS(とその派生系であるDylan)を別にするとまだ誰も成功していない 「動的言語における静的型」に必要な機能を不足なくカバーしているように見える。

  • DuckTyping。提案ではデフォルトではsignature conformanceしか要求しないDuckTypingである。ただし明示的にクラス適合も指定できる。
  • Generic Type。オブジェクト指向言語に静的型を導入するならば、かならず必要になる。型変数に型指定ができる(この型はある型のサブタイプである、とか)のが現代風。
  • Overloading。型を指定するならば型の違う複数のメソッドを定義したい。
  • Interface。「型」をまとめる単位としてのインタフェース。メソッドボディは提供できないが、アサーションは定義できるというのがちょっと珍しい。
  • 型のUnion, Intersectionが指定できる

これだけあれば、静的型言語として足りないものはなさそうだ。 Generic Typeなどは多くの静的型言語(例: C++, Java)の設計者も当初は見落としていた(しかし後にその重要性に気付いた)ものなので、きちんと押さえていることはポイントが高い。

私が一昨年のRuby Conferenceのスライドで「Optional Static Typing」とさらっと書いたものに対して、 より深く、より完全な考察を行ったものだと考えてよいだろう。さすがだ。

しかし、このようにGuidoがまとめてくれたものを眺めて、改めて考えると、 やっぱ将来Rubyに静的型は導入するのやめようと思った。 たとえオプショナルでも。

理由は以下の通り。

  • これだけ完備した型システムを用意しても、オプショナルでは効果は半減以下である。 しかし、RubyがRubyであり続けるためには必須にすることはできない。 完全な型指定を要求するのでは動的言語とは呼べないような気がする。 たとえ、ここで述べられている型システムが DuckTypingを採用した、いわば「動的言語フレンドリー」なものであるにもかかわらず。
  • 「効果が半減」することが予想されるのにもかかわらず、 型の導入は言語を複雑化される。その複雑さは割りに合わないように思える。
  • 効率の良い実装が思いつかない。私の知識や能力の限界かもしれない。

Guidoは

this is something that many people, especially folks writing frameworks or large applications, need

と書いているが、LispあるいはSmalltalkの実績は、必ずしも静的な型がなくても 大規模アプリケーションやフレームワークが構築できることを証明しているようにも思える。

というわけで、オプショナルな型システムは将来にわたってRubyに実装されることはないだろう。 もうちょっと簡易な(かつDuckTypingを意識した)型チェック機能の導入はありえるかもしれないが。

本日のツッコミ(全2件) [ツッコミを入れる]
_ maeda (2005-01-07 00:16)

すべて静的な型にして、変数の型宣言を省略するとObject型とか。

_ まつもと (2005-01-07 15:19)

それって嬉しいんでしょうか。> 省略するとObject型

お名前:
E-mail:
コメント:
本日のリンク元
検索

RSS feed meter for http://www.rubyist.net/~matz/ Creative Commons License This work is licensed under a Creative Commons License.