追記

Matzにっき

迷惑メール対策なら Dr.WEB
『Dr.WEB メールデーモン』、MTA 用迷惑メール対策製品です!


2009-11-13 [長年日記]

NEW!_ [言語] The Go Programming Language

もう知っている人は知っているGoogleからのシステムプログラミング新言語Go。

すっかり祭りには乗り遅れた感があるけど、少しだけコメントをつけておこう。

目次

  • 言語仕様
  • 言語実装
  • 技術的でない話
  • まとめ

言語仕様

総合的に見て、非常にバランスを考えているように思える。 JavaやC++のような複雑さを排して、シンプルに徹する一方、 言語好きを刺激するような新しいアイディアをそこかしこに配置している。

特徴である「コンパイルが高速」というのも、 このシンプルな言語仕様が寄与していると思われる。

個人的に、注目したのはオブジェクト指向機能と、並列機能。

interfaceによる、継承のないオブジェクト指向(duck typing)は、かなり私好みである。 昔からこういう言語が欲しかった。interfaceのみ動的結合を許すというのも Satherを思い起こさせて好印象。

ただし、私が見た範囲内では、実装の継承(共有)は提供されないみたいなので、 Javaのinterface同様、コンポジションを強制されることになるので、 そこは残念。

それから、goroutineなる並列実行機能。 Erlangを意識してるのかな。でも、それ以上に使いやすそうな印象。

go 式

だけで並列実行が開始できるのは大胆である。 ほとんどのオブジェクトが値渡し(コピーされる)とあいまって、 効率よく並列実行できそう。

あと、多値を活用しているもの面白い。 成功したかどうかを2番目の値で返すところとかもErlangを思い起こさせる。

「逆転した型宣言」は、はじめはギョッとしたけど、 慣れたら結構良いかもしれない。

言語実装

コマンド名! 8cとかなんだよって感じ。

ソースコードを眺めたが、正直、一番興味があるランタイムの部分は よくわからなかった。だいぶ慣れないとなにがどこにあるのかよくわからない。

GCはシンプルなマーク・スイープだった。

goroutineのsegmented stackの実装に興味があったのだが、 まだみつからず。たぶん、そこはランタイムじゃなくて、 コンパイラそのものを見ないとわかんないんだろうな。

技術的でない話

「Goが登場したからには(Java/C++/Python)はお払い箱」みたいな エントリをいくつか見かけたけど、まだまだそういうレベルではないと思う。

Goは非常に興味深い言語だし、当面いろいろと話題を提供してくれるとは思うけど、 これが定着するか、成功した言語になるかどうかは、長い目で見ないとわからないと思う。

GoogleやRob PikeやKen Thompsonのネームバリューのおかげで、 普通なら10年かかるプログラミング言語のブランド確立を一瞬で達成してしまった Goだけど、成熟度としてはまだまだなので、当分はそのギャップに苦しむ(?)ことに なるんじゃないかな。

そこを乗り越えて、「一人前の言語」になっていくことを期待したい。

まとめ

  • 言語の成功は長い目で見よう
  • Goガンバレ(えらそう)
本日のツッコミ(全30件) [ツッコミを入れる]

Before...

_ とおりすがり [ええ、捏造は言いすぎたと反省してます。 撤回します。]

_ roverhand [とおりすがりさんは、言いすぎかどうかという前に、勘違いしてるのではないかと思うのです。 お払い箱論調に対して「..]

_  [なうってなんだよ。 にょと変わらんな。キモ。]

_ とおりすがり [勘違いではありません。 否定的な情報を並べて達観するのはH○Kが良くやるプロパガンダの手法です。N○K自体は否定し..]

_ 加藤和良 [まつもとさんが読まれたのは、ここからリンクされているスレッドではないでしょうか。 http://news.ycom..]

_ hnakamur [加藤和良さんが紹介されたスレッドに http://code.google.com/p/unladen-swallo..]

_ まつもと ゆきひろ [加藤和良さん、 ありがとうございます。私の記憶と一致します。 そうか、Hacker Newsか。 複数提示する..]

_ kyon [以前、Pascalっぽくないとコメントしてしまったのですが、今はGoは、けっこうPascalっぽいと思ってます。すみ..]

_ ま。 [こんなページもありました。 Ciao Python, Hola Go! http://tav.espians.c..]

_ KL1 [Goで思い出したのですが、KL1ってどうなったんでしょうか? http://www37.atwiki.jp/pro..]

[]

2009-10-16 [長年日記]

NEW!_ 日本経済新聞夕刊「拓くひと」

16日の日経夕刊に(恥ずかしい写真と共に)私を扱った記事が掲載されている。

検閲と戦ってきた歴史を持つからか、新聞記者はけっして事前に記事を見せてくれることはない。 間違いが訂正できないんだけどなあ、と不満を持つこともあるが、 まあ、「言論の自由」のために払うべきコストなのかもしれない。

というわけで、補足と訂正。

「松江発」

ご存じのように、私は現在松江に住んでいますが、Rubyを作り始めた時には浜松、 最初に公開した時には名古屋に住んでました。「松江発」はあまり真面目に受け取らないで。

「世界のウェブ言語」

ってなんだかよくわかりませんが、まあ、「Webアプリ開発によく使われる言語」程度の意味でしょう。

「(松江市は)情報産業の新たな名所になりつつある」

といいですね。かなり希望的観測を含んでますね。

「ルビー」

縦書きの新聞ではしょうがないのでしょう。地元紙でもいつも「ルビー」と表現されるので、そろそろあきらめてきました。

「天才プログラマ」

勘弁してください。

「効率良くウェブが書ける言語が必要と思った」

当然ですが、Rubyの開発を始めた1993年にはまだウェブは一般的ではないので、 最初からウェブを対象にしていたわけではありません。 効率良く書きたかったのは、ウェブ(アプリ)ではなく、プログラム全般、特にテキスト処理プログラムですね。

「教祖」

勘弁してください。

「無償ソフト」

まだこんな表現が残ってたんですね。「フリーソフトウェア」または「オープンソースソフトウェア」と読み替えてください。

「モルモン教徒」

間違いじゃないんですが、歴史的には「モルモン」は差別的に用いられてきたので、 自ら名乗る時には「末日聖徒」という単語を使います。一般人には伝わらないかもしれませんが。

「収入は仲間と設立したソフト会社の開発業務」

私は雇われで「仲間と設立した」わけではないです。 NaClの設立を計画する会合に出席はしていましたが。

補足の補足

このエントリを読んで、どこかで「日経の記事はひどい」と書いてた人がいるけど、 上の文章をちゃんと読んでもらえばわかるように、記事そのものは、やや不正確なところはあるものの、 そんなにひどくはない。明らかな間違いはないし。

記者の人の名誉にかかわるんで、 私が「日経はひどい」とか「この記事はひどい」とか まったく思ってないことは明確にしておく。

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

_ 名古屋人 [メディア露出が増えるにつれ、こういったフォローもいつか追いつかなくなり、色々と誤解されてしまうんでしょうかね・・。]

_ hosaka [しかし、一般人(含む記者)には全部細かいことなんですよね。残念ながら。 一般人からみれば、フリーソフトウェアと無償..]

_ NJWindow [久しぶりにマッツ日記発見。うれしく拝見。一般人に含まれる読者ですが。]

_ KT [凡人(含むプログラマー)からみれば、プログラムを作る為に、どうして圏論まで勉強する必要があるかなんて事は理解出来ない..]

_ iwajun [2002年に大阪産業創造館でまつもとさんのセミナーを聴いた時にはこんなに偉い人になるとは思ってませんでした。 おみ..]

[]

2009-10-04 [長年日記]

NEW!_ ロンドン地下鉄

旅行者用豆知識

ロンドンの地下鉄はOysterというプリペイドカードがないと、 どの区間も4ポンドなので、1日に2度以上乗るのなら、 乗り放題のワンデイトラベルカード(5.60ポンド)がおすすめ。

駅でチケット同様普通に買えます。

ちなみにカードでOK。今回も現金は一度も使わなかった。

[]

2009-10-03 [長年日記]

NEW!_ [言語] 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の命令を埋め込み可能として、..]

[]

2009-09-30 [長年日記]

NEW!_ 名誉市民

ひさしぶりの更新。

松江市名誉市民なるものに選ばれたそうで、ありがたい限りである。 で、FAQを掲載しておく。

松江市名誉市民FAQ

今回選ばれたのは誰ですか?
私(まつもと)と、人間国宝の和紙職人、安部栄四郎さん、前市長の宮岡寿雄さんです。 残り二人は故人という。阿部さんの場合は、お住まい(八雲村)が平成の合併前は松江市ではなかったからでしょう。 そういえば、安部さんの記念館はつい先日訪問しました。 技術の開発や後進の育成に熱心な方だったんですねえ。 直接は目立たない素材(和紙)に一生をかけるところなど、 素材である言語開発者として共感しました。
名誉市民の特典はなんですか?
えー、なんなんでしょう(笑)。少なくとも金銭的な価値はないですね。 あえて言えば、その名の通り「名誉」でしょうか。ありがたいことです。 なにか「証明するもの」はあるかもしれません。 あ、記事に「顕彰状」って書いてありますね。
松江市に住んでるのに名誉市民っておかしくないですか?
私もそう思ったのですが、松江市の名誉市民制度では、 松江市在住(故人およびかつて住んでいた人も含む?)が 対象だそうです。なんとなく「住んでない人に市民の称号をあげるもの」と思ってました。
顕彰はいつですか?
記事によると「11月18日の市政120周年記念式典で顕彰状などを贈る」のだそうです。 ただし、私はこの日はRubyConf直前でアメリカに居ます。なんて不義理な。 「ビデオメッセージを用意」などあるかもしれませんねえ。
これで引っ越せなくなりましたか?
もうすでに、しばらく前から引っ越せない感じなんですけど(笑)。 とはいえ、マジレスすると、住居の自由は日本国憲法で保証された国民の権利ですから、 そこが奪われることはないんではないかと。
感想を。
名誉市民になったプログラマーは日本初ではないでしょうか。 政治や芸術など目立つ分野はともかく、プログラマーのような分野に 日が当たるのはすばらしいことだと思います。 今後もプログラマー(ソフトウェア開発者)の地位向上のロールモデルになるように 精進します。ってか、今後、不祥事を起こすと「名誉市民のくせに」とか 言われちゃったりするんでしょうか(不安)。
本日のツッコミ(全5件) [ツッコミを入れる]

_ きM [おめでとうございます。]

_ 【uz】 [今朝の地元新聞で見て知りました。 おめでとうございます。 そんな時にアレですが、 ○安部 ×阿部 ですので..]

_ VAL [おめでとうございます! 出身地でも名誉市民を贈ればいいのに。]

_ akezora [おめでとうございます。 私の周りでもRubyが浸透してきているようです。]

_ koto [名誉市民おめでとう!同級生の出世頭だね。つぶやきもみてるよ。]

[]

追記

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