読者です 読者をやめる 読者になる 読者になる

モラトリアムこじらせた

大人に成り切れない自分を自覚してウジウジと自分探しを延々と繰り返しつつ、気付いてみれば社会人になってからもう何年も経っちゃってて、そういえばローンとかも組んじゃってて、考えてみれば色々と取り返しのつかない年齢になっちゃってて、給料は上がらずリストラに怯えつつ、焦ってみても慌ててみても、やっぱり心に引っ掛るものが何なのか分からず、やっぱりウジウジ自分探しなんかしちゃったりしてる…、そんなモラトリアムをこじらせたあ・な・た(私)にお贈りする技術ブログ

Python 2.x 対 3.x のアンケートで Hacker News 炎上?!

前回の記事で紹介したアンケートは 2013/12/30 に Hacker News でアナウンスされましたが、コメントが 117 もついてます。

最近の Hacker News のスレでコメントが 100 を越えているのは二割程度ですから、1つのプログラミング言語の話題で、それも9つの質問しかないアンケートに対するレスなので、かなり盛り上がったと言えるかと。

内容もアツい。

Python への愛着があるからこそ、皆それぞれの強い思いがあるんだろうな。

気になるコメをピックアップ

MercurialPython 3 に移植するのがすげー面倒なんだが?

git と同じようなバージョン管理システムである Mercurial の中の人と思しき人によるコメントがありました。

例の bytes 型と Unicode 型が分けられてしまったことに由来して 2→3 への移植が困難なパターンにハマってるようです。

ネットワークプログラミングフレームワークTwisted も同様な理由で未だ Python 3 をサポートできてないので、こういう状況がいくつもあるのを知るたびに、もっと良い進化の方向はなかったんだろうか、と不信が募ってしまいます。

Python 3.x は間違いだったと思う?」でアンケ回答するのやめた

…というコメントがあり、このレスが一番述びてます。やはり気になる(気に障る?)質問ということでしょう。レスは例えば、

  • このアンケートは、3 を選ばせる方向に偏ってる。
  • 質問がもっと具体的でポジティブだったらよかったのに。
  • これは重要な質問。半数以上の人が Python 3 を使ってないのでは?
  • Python 3 は間違いじゃないと思うが、移行には時間がかかるだろう。

などの意見の他、実際に Python の講師をしている人のコメントがありました:

中国、ヨーロッパ、イスラエル、アメリカ等で Apple, Cisco, Intel, SANDisk 等の大企業で何年も Python を教えてきたが、 Python 3 を教えたのは 1 ケースしかなかった。それ以外は全て Python 2 を教えるよう依頼される。

Python 3 で何が変化したかを説明するよう頼まれたこともあったが、それも稀なケース。

彼等はみんな 2 のレガシーコードを抱え込んでいる。3 に移行するメリットが明らかではない。

これが商品開発の現場における Python のバージョン問題の実情なんだと思います。

標準のパッケージマネージャーが無いのも問題

Python には Ruby の gem のような標準のパッケージマネージャーがありません。 「え? pip や easy_install は?」と思いますが、どちらも Python オフィシャルではないんですね…。

このアンケートがパッケージマネージャーのことに触れないのもヒドい。 pip ですべてうまくいくわけじゃないのに。 しかも pip も Python のバージョンごとにあるわけだし。

Ruby の場合は Ruby をインストールしたら gem もインストールされて、はい、おしまい、なんですが、それに比べたら到底シンプルとは言えないってことですな。

この状況に対して、

もし Python 3 で標準のパッケージマネージャーが実現したら、3 を採用する大きな理由になるだろうな。

というコメントもありました。一理あると思います。

さて、まとめというか雑感を…

ここ数回、Python 2 と Python 3 の「問題」を見てきました。

もともと私は Python 2 系でずっとコードを書いていて、そういえば Python 3 を使ったことがないなぁ、Python 3 ってどんなかなぁ、どういう風に移行に臨めばいいんだろうか? ということで調査を始めたわけでした。

で、最初に見付けたよさげな文書が 2.x-vs-3.x-survey で、それをここ に日本語訳をしてみたわけです。

そして、今回の hacker news のプチ炎上。

確かに「言語として綺麗に整理する」のは、言語設計者なら誰でも願うことでしょうし、ユーザーにとっても変な部分が無くなってスッキリするかもしれません。

けれど、2.x がすごく成功してしまったから、それが足枷になってしまってるんだと思います。そういう状況で、敢えて互換性を壊す選択をした 3.x が、大きな代償を支払ってる現実をありありと見せ付けられた感じでした。

考えてみれば C++ は C への拡張として始まり、長いこと互換性を非常に気にしつつ、進化してきてるんだよなあ。言語の形としては声高々に「汚い!」と言わざるをえない状況ですが、それでも、そのお陰で過去の資産を過去のものではなく現代にそのまま利用できている訳です。

Togetter: Ruby 1.8→1.9への移行とPython 2.x→3.xへの移行に関するやりとり に、Ruby 作者のまつもとゆきひろ氏が

Pythonは2系の出来が良すぎて、3系への移行がなかなか進んでないようですね。3系への新規機能追加を停めるモラトリアムも効果なかったみたいだし、難しいものです。

とコメントしています。

では、自分はどっちを使う?

これまでと変わらず、慣れ親しんで来た 2.x 系をメインで使っていくだろうな、と思っています。ちょっとずつ 3.x を学んで行こうとは思いますが。

「やりたいことを実現する道具」としての言語ならば 3.x でも 2.x でもどちらでも良いわけで、それ以前にそもそも Python で無くてもいいわけで。プログラミング言語の設計自体に興味はありますが、言語の設計に対する興味と、言語を実際に道具として使うこととは、やっぱり違う訳です。

ということで、Python 好きの一人として 3.x に移行しよう! と思って始めた調査でしたが、逆に「僕は 2.x に居つづけてもいいんだ!(パチパチパチ)」いう結果に落ち着いてしまいました。 orz