«前の日(10-02) 最新 次の日(10-04)» 追記

Matzにっき


2003-10-03

_ [Ruby]1.8.1 previewの遅れ

[ruby-core:01564]では9月30日に出すと宣言した1.8.1 preview1ですが、 10月3日現在まだ出ていません。 これはいくつか直したいバグがあったからです。

現時点で残っているものは

くらいでしょうか。[ruby-dev:21336][ruby-dev:21406]については、 なかださんからパッチが出ているので、当てるかどうか判断するだけなんですが。

あと、[ruby-list:38434](ブロック引数の評価順が左から順でない)については、 現在の実装では直すのは難しいですね。[ruby-list:38435]もそんな感じ。

_ [Ruby]高橋さん訪問

Rubyカテゴリでよいのかな。

明日からのRuby温泉ミーティングにむけて、高橋さんが、わがNaClを訪問なさる。

午後は、わたし、高橋さん、前田くんで、与太話に終始したのだが、 付き合わせてしまってもうしわけなかったか。

  • 日経バイト「技術の真髄」次回のゲラを見ながら
  • 言語設計の話とかは受けないんでしょうかねえ
  • 「弟子入りしたい」という言語設計者になりたい人とか、いてもいいのに
  • いないんですか?
  • 「私の言語見てください」ってのは2回ほど。でも、好みじゃなかった
  • Ruby m17nのアレはなんという名前で呼ぶべきだろう。CES(Code encoding scheme)?
  • MIMEのcharsetは文字集合じゃないよね
  • Sather on .NETの実装は進んでる
  • でも、ほんとはSather風言語でよいんじゃない、互換性要らないし
  • そうですよねえ。.NETの仕様と合わない部分もあるし
  • ソフトウェア特許って特別なの?
  • Stallmanはそう思ってるみたい
  • 日本では(歴史的には)特許の対象外だったから。
  • 「特許は本当に役に立つか」とか「あるべき特許の姿」とかの話がしたいのに
  • でも、特許の現状を知らずに抽象論を語るのは無理があるのでは
  • (ぐさっ、確かに)
  • などなど...

それぞれが誰の台詞かは自由に想像してください。

息子が久々に具合が悪いので、夕食はご一緒せずに帰る。明日に備えよう。 って、なにを備えるんだ?

本日のツッコミ(全1件) [ツッコミを入れる]

_ akr [method call が複数の NODE で表現されてて、外側から複数段階に分けて eval されていくのが原因な..]

[]

2004-10-03

_ [教会]松江、そして岡山

断食安息日。ひさしぶりの松江のような気がするが、実際はそんなでもない。

日曜学校は山上の垂訓について。短い部分を丁寧に扱う教師のやり方に非常に共感を覚える。

午後からは訓練集会のため岡山に移動。山陰から2時間の訓練集会のため、片道3時間書けるのは辛いわ。 私が運転したが、結構体力削られた気がする。

内容は充実していた。が、自分のやり方を変えることを求められる時に、 人は思わず反発を感じるものだな。自分の感情を制御することが必要とされたのも事実だ。

[]

2005-10-03

_ アナログ放送、本当に終了して大丈夫? 2010年のデジタルTV普及状況を予測

これは海外のデータだから日本の状況はだいぶマシだと思うけど、 それでも2011年のアナログ放送終了時にはかなりもめるだろうなあ。 しかも(一部見直しの動きはあるとはいえ)原則コピーワンスなんだよね。

再生機器もないし、HDは要らない、SDでいいから以前の自由度をくれって人は多そうなんだけど。 日本にはフェアユースという概念はないらしいし。

_ [Ruby] RubyインタプリタをJavaで実装 - JRuby 0.8.2公開』

1.8.2相当の仕様を持つRubyインタプリタ。私のコードは一切入っていない(文法はparse.yをベースに変換したらしい)。私は使ったことないんだけど*1、使い勝手はどんなもんなんだろうか。

*1  そういえばLarry WallもPugsを使ったこともソースを読んだこともないと言ってたなあ

本日のツッコミ(全1件) [ツッコミを入れる]

_ jm [某局の中の人から、デジタル化に際してアナログのビデオライブラリを廃棄するという話をききました。(もちろんキー局)国家..]

[]

2006-10-03

_ インタビュー

大新聞社のインタビューを受ける。なんか取材なんて滅多に受けないのに ある時には重なるものだ。

OSSについて正直なところを話す。 が、あまりにも普通なので記者の人はちょっと不満げに見えた。 もしかしてなにか期待していらっしゃったことに応えられなかったかしら。

_ [OSS] OSS コンサル会社が設立

元ミラクルの小田切さんが会社をはじめたという話。

昨日の日経コンピュータとの取材で、自分でOSSをハックするわけにはいかない 情報システム部は「OSSを使ってなんとかできる」人たちをつかまえる必要がある(ソフトウェアはどんどんコモディティ化するから)とかいう話をして、 それの受け皿となるOSSサポート企業というのはこれからニーズの高まる分野で ビジネスチャンスがあるのではないか、という話をしたのだが、 この「オープンソース・ソリューション・テクノロジ」はそれに対応するものになる、のかもしれない。

_ [Ruby] Rubyの生産性の高さはどこまで本当か?

最近、Webで公開されたYuguiさんの記事「Rubyを仕事に使うべし!」に対して、それじゃ「使うべし」をちゃんと説明したことにならんだろう、という反応。

いや、まあ、その批判は当たっていないこともない。私自身は「Rubyを仕事に使うべし」とは必ずしも思ってなかったりするんだけど。

が、(たぶんワザとだと思うんだけど)この批判そのものが「なにができるか」ということを ベースに論が構成されている。が、正直な話、言語の比較で「なにができるか」を 比べるのは不毛なんだよね。だって、大抵のことは大抵の言語で「可能」なんだもの。

最初にはっきりさせておかなければならないのは、 仕事で使う言語(というかツール)を選択する時に、 「その言語になにができるか」という基準で選ばれることはマレである。

重要なのは、教科書があるかとか、プログラマが確保できるかとか、 必要なライブラリが入手できるかとか、IDEがあるかとか、 その言語を気に入ってる上司がいるかとか、 話題になっているかとか、そんなことであって、 ある言語がどのような機能をもっているかではない。

そういう意味では「Rubyを仕事に使うべし!」というタイトルの記事は、

  • Rails話題になってますよ
  • ライブラリも最近充実してきてます
  • RubyGemsも結構便利だし
  • IDEも揃ってきてます
  • 某最高学府の教育課程ではRubyが採用されました

とかいう話題を中心にした方が効果的だったと思う。

それはそれとして、「どこまで本当か」というエントリの方は 些細な文法の違いから来る記述力を無視しすぎだと思う。

Rubyなんかよりも、もっとずっと本格的なメタプログラミングのできるCLOSとかで書くべきでしょう。

とか

この程度のわずかなシンタックスシュガーで、それほど生産性に大きな違いがでるのでしょうか?

とはいえ、おそらく「計測できる生産性」での差は出ないだろうと思う。 しかし、「計測できない生産性」では大きな違いが出るのではないだろうか。 気分とか。

そして、(たぶん不幸なことに)ほとんどの場合生産性は計測不能なのだ。

ま、それもこれも仕事に使える言語を自分で選べて初めて言えることなのだが。

追記

このエントリについて、fromdusktildawnさんから批判されちゃいました。 「ありもしない錯誤をでっちあげて批判している」のだそうです。

そう指摘されてあらためて引用部を見返すと、確かに

RubyとCLOSでは、シンタックスの違いに起因する生産性の差なんて、少ししかないよ。

と読めるように引用してますね、私。これは私の落ち度です。 原文へのリンクが あるので前後はそちらで読んでいただけるだろうという甘えがありました。

引用の仕方がまずかったことについては謝罪します。

実際には、二つの引用部は独立して引用したつもりで、前者は

(書き込み系)メタプログラミングしたいならRubyよりもCLOSだよ

後者は

RubyとC#では、シンタックスの違いに起因する生産性の差なんて、少ししかないよ。

という主張が読み取れると言いたかったのでした。

で、その主張に対して

  • Rubyのように手軽に書き込み系メタプログラミングができることで(普通のソフトウェア開発でも)広がる世界があるよ。
  • RubyとC#でのシンタックスの違いに起因する(おそらくは計測できない)違いは大きいと思うよ

ということが言いたかったわけですね。要するに「Rubyは間口になれる」と。

間口をくぐった後は、Rubyにとどまるもよし、SchemeやCLOSに進むもよし、 あるいはHaskellのような関数型に進むもよし。 それはユーザの自由でしょう。

間口になるためにはCLOSやSmalltalkは本格的すぎ(多くのプログラマにとって日常とのギャップが大きすぎる)、PHPでは「上」とのつながりが薄すぎて「面白くない」。これがRubyが「ウケる」理由なんじゃないかと(Perlも確かに「上」とつながっているんだけど、そこはそれ。ねぇ)。「今そこにあること」という弾さんと同じような結論になっちゃいましたね。たぶん、PythonもRubyと似たようなポジションにあるのだと思います。

_ [Ruby] block parameter to be local variables

思い立って、とうとうブロックパラメータについて

  • ローカル変数のみ許す
  • スコープはブロックローカル

という修正を実現した。ずいぶん悩んでいたわりには 実際に手を動かしたら30分で実現できるというのはどうよ。

他の悩んでいることについてもそうなのかなあ。

_ ジョブズ氏のいないアップルが来る日--IT企業が直面する「後継者選び」

いずれ世代は交代する。企業でも家族でも。 それについてどれだけ備えることができるか。

時として、非常に長い(数十年とか数百年とか)スパンの視点に立つ必要があるのかもしれない。 ま、聖書とか見てると数百年が一行で過ぎたりして、新鮮な気持ちを味わうことがある。

[]

2007-10-03

_ [言語] The Transterpreter

昔、並列性を重視したコンピュータtransputerというものが存在していて、 Occumという標準プログラミング言語を採用したりして いろいろと注目されていたのだが、いつの間にかあまり話題にならなくなってしまった。 技術的にはいろいろ面白かった(らしい)のだが。

で、今回紹介するTransterpreterは、並列を意識したインタプリタ、 ということらしい。「The Transterpreter is a small, portable, open-source runtime for exploring concurrency」というキャッチフレーズ。 要するにフットプリントの小さいOccumOccamインタプリタということなんだろうか。

Windows, Mac OSX, Linuxで動作し、 LEGO mindstormのプログラミングもできるということだ。

ソースコードも公開されている。ライセンスはGPLv2。

_ 5時間以下の睡眠続け死亡率1.7倍に 7時間寝よう|Ameba News

うーむ、このところ睡眠時間はだいたい4,5時間だものなあ。 早死にするかも。

休日はけっこう寝てばかりで取り返してはいるのだが、 一説によると寝溜めはできないらしいし、 家族には不評ではある。

もう少し暇になりたい。

_ This is making me angry

ISO-8859-1とUTF-8の混同により、ニュースリーダー(slrn)で文字化けが発生して怒っている、という話。

我々がここ30年苦しんできたことが、西洋では今、再現されている。

_ [Ruby] Ruby on Rails Development: Justify Your Choice of Ruby on Rails: Articles and Links

Ruby on Railsの採用を正当化する(ボスに説明する)ための 参考になるリンク集。ぜんぶ英語だけど。

「だって気分がいいんだもの」とか、 「話題の技術だから」という以上の理由付けが必要な時のために。

本日のツッコミ(全2件) [ツッコミを入れる]

_ shiro [Occamじゃなかったでしたっけ。 私が院にいた頃に他の人が研究で使ってました。あの頃は並列計算機(ハード)もいろい..]

_ とおりすがり [「寝溜めはできない」が「寝不足を取り戻す」ことは出来ます。 つまり、平日睡眠時間が少なかったので土日にゆっくり寝る..]

[]

2009-10-03

_ [言語] the 0.8 true language

あらゆることに使える完璧な言語(the one true language)が存在しないことは明らかである。

たとえば、Rubyがどんなにすばらしい言語でも、Ruby自身はRubyでは記述されていない。 また、OSなどRubyで記述するには向かない分野はいくらでもある。 そもそもRubyが向かないプログラマーもいるようだが、その点には今回は触れない。

しかし、100%を考えるから、完璧な言語は存在しないわけだが、 仮に80:20則にしたがって「80%の領域をカバーする言語」について 考えると、そのような言語はどのような性質を持つのが望ましいだろうか。

100%(=one)でなくて、80%(=0.8)だから、名づけて「the 0.8 true language」。

今回は言語そのものの性質を考えるために、 「コンピュータは十分な性能を持つ」ことを仮定する。 つまり、「この機能がないと性能が...」とかは考えないということだ。 世の中がどんなに進んでもコンピュータが十分な性質を持つことはないわけで(性能が向上するほど仕事が増えるので)、ある意味、現実的仮定ではないわけだが、あくまでも思考実験であると考える。

一方、人間の性質はそんなに変化しないので、現代の人間がもつ特性は考慮に入れる。 たとえば、100年後の人間はもしかしたら誰でも「物事を宣言的にとらえてプログラミングする」ことが なんでもないことになってるかもしれないけど、現代ではそのような人は少数派だ。

まず、80%の領域をカバーするためには、 その言語は汎用言語でなければならないだろう。 特定目的言語(DSL)や特殊なモデルを持つ言語(論理型言語とか、一部の関数型言語とか)では、 80%の領域をカバーできないからだ。 いや、PrologでOSまで書いた人たちがいるのはもちろん知ってるけど、 やっぱ普通のプログラマには難しいよねえ。

一方、広い領域で十分な生産性を提供するためには、 高度な抽象化能力を持つ必要がある。 現代のプログラマにはBASICや(古い)FORTRAN程度の抽象化能力では不十分だろう。 現在までに知られている抽象化機能で有効なものは、 オブジェクト指向プログラミングと、関数型プログラミングがある。 the 0.8 true languageはその両方を何らかの形で持つ必要があるだろう。 具体的には「オブジェクトとメッセージ(or 動的結合)」と 「高階関数(とクロージャ)」が必要だ。

また、言語の簡潔さも重要になる。 詳しくは『簡潔さは力なり---Succinctness is Power---』を参照のこと。

それから言語の動的性質も。 これは、Java業界でDIが注目されていることからもわかる。 DIやXMLを使った設定ファイルってのは、結局硬直したJavaアプリケーションを なんとかして柔軟に、動的にしようという試みにしか見えない。 最初から動的な言語を使っていれば、両者ともほとんど必要になることはない。

私は一時DIについて関心を持って、いろいろ調べてみたし、 自分でDIコンテナを実装してみたりもした。 でも、RubyでならDIコンテナがわずか20行で記述できる上、 よく考えてみたら、その20行も、なくてもほぼ同じことが簡単に実現できることに気がついた時、 DIってのは硬直した言語のための技術なんだと気がついた。

ここまでは当たり前の話。ここから未来予想が入ってくる。

個人的に将来性のある技術トレンドのひとつとして考えているのが、 「内部DSLの台頭」である。特定目的の言語であるDSLを 既存言語の拡張として実現することにより、

  • 実装が容易
  • 機能(と組み込み語彙)が豊富
  • 文法が理解しやすい
  • プログラミングの非専門家から知識を引きだしやすい

などを一度に実現できる、一粒で何度もおいしい技術だ。 で、その内部DSLを実現するために、言語が備えるべき性質は、 「柔軟で拡張性がある」ことと「乱用しやすい文法」とであると考える。

ここで意見が分かれると思うのだが、 私はLispは「内部DSLには向いていない」と思う。 より正確に表現するならば、「LispのS式とマクロはDSLを実装するのに最適だが、 拡張性がありすぎて、すぐに外部DSLの領域に到達してしまう」という意味だ。

ま、「そんなことたいしたことじゃない」と思う人も多いかもしれないけど。

いずれにしても、the 0.8 true languageはなんらかの形で内部DSLを支援するべきだと思う。 その解決策は一つではなくて、ちょっと考えただけでも

  • Lispのようなマクロを使った言語拡張性による支援
  • Rubyのようなブロックと括弧などを省略できる文法(の乱用)による支援
  • JavaのようなXMLによるDSL実現を支援するライブラリ(など)の提供

などが考えられる。最後のはちょっと違う気がするけど。

最後の要素はスケーラビリティ。

「スケーラビリティ」と言ってもいろいろなことを意味するけど、 ここで考えている重要なことは、以下のもの。

  • マルチコア化が進むので、そのコアを活用できる並列実行技術
  • データ量が1台のコンピュータで処理しきれなくなっているので、複数マシンを活用する分散技術

いずれも、現在から近い将来にかけてのコンピュータ事情を反映しているので、 最初の「マシンのことは考慮しない」という前提には反しているな。でも、大事なことなので。

ここはRubyがちょっと(いや、だいぶ)弱いところなので、今後力を入れないといけないだろう。

というわけで、the 0.8 true languageを備えるべき特質について考えてみた。 私の見解だとLispやRubyはけっこういい線行ってると思う。 Pythonはいい言語だけど、ちょっと文法が融通きかないので、内部DSLには向かないかな。 ここは違うアプローチを使うのだろう。

この考察から考えると、今後Java方面では、ますますのXMLの活用とJVM上のJavaでない言語の台頭が予想される。 というか、もうかなり出てきてるよね。JRubyとかGroovyとかScalaとかClojureとか。

あまり有効な結論もないまま終わる。

本日のツッコミ(全9件) [ツッコミを入れる]

_ 結城浩 [ずれている質問かもしれませんが、「正規表現」というのは内部DSLの一種とみなせるものでしょうか?(みなせない、みなせ..]

_ ud [言語に要求される機能を整理して機能階層ごとに分離してゆくということでよろしいのでしょうか。その観点から見れば、クラウ..]

_ まつもと ゆきひろ [結城さんへ、 正規表現は「外部DSL」だと思います。ホスト言語の文法をそのまま流用して、DSL化するのが内部DSL..]

_ メルっちょ [DSLをたくさん作っている者です。内部DSLについては昔からいろいろ考えて実験してきました。 C++なんかで、..]

_ 結城浩 [まつもとさん、お返事ありがとうございます。 正規表現は「外部DSL」は理解しました。 では、正規表現の文法(no..]

_ ayumin [横からスミマセン。例えばRubyのSequelやS2JDBCのようにホスト言語の文法を利用して、外部DSLを生成する..]

_ KT [Haskellは、「100%の領域をカバーする」のではないでしょうか?]

_ まつもと ゆきひろ [KTさん、 そう思われる人もいらっしゃるでしょうね。 ただ、少なくとも私は「すべての開発をHaskellで」と言..]

_ KT [いいおくれましたが、私もRubyでDSL実装し、万能性を確保する為に、DSL内にRubyの命令を埋め込み可能として、..]

[]

«前の日(10-02) 最新 次の日(10-04)» 追記

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.