Edited at

やせいのPython2.8があらわれた!

More than 1 year has passed since last update.

昨日何気なくPython-DevのMLを眺めていたら、Python2.8なるもの観測した(&興味深い)のでご紹介致します。この Python2.8はPSFがサポートする正式バージョンではありません!! のでご注意ください1

[追記]

- 2016/12/13 8:00(JST)頃に、一時的に"Placeholder"という名前に更新されたようです。そのため既にPython2.8という名前ではなくなっています。


Python2.8?

Pythonを少しでも知っている方は、Python2.8と聞いた時に「??」となっていることでしょう。それはそう、「Python2.8は存在し得ない」からです。

PSFは、Python2orPython3において、


The final 2.x version 2.7 release came out in mid-2010, (中略) The 2.x branch will see no new major releases after that.


と述べていますし、PEP404では、"Un-release Schedule"という逆説的なタイトルとともに


2.8 final Never


と述べられています。そう、(公式には)あり得ないバージョンなのです。

今回の出来事は、スターウォーズでいうと、エピソード9までだと思ってたら(まだ公開すらされてませんが…)、有志でエピソード10作っちゃった!みたいな感じです。(というと途端に薄い本的な装いを感じさせますが、)割に興味深い出来事です。

そのため、Python-Dev界隈でも議論が盛り上がっているのではないかと推測されます。


それでなんなの?

naftaliharris/python2.8

簡潔に言うと、Python3の便利な機能をPython2.7.12にBackportしたもの、といえます。機能としては、下記のような機能がサポートされています。


関数アノテーション


関数アノテーション

>>> def f(a:int, b:str) -> list:

... pass
...
>>> f.__annotations__
{'a': <type 'int'>, 'b': <type 'str'>, 'return': <type 'list'>}

PEP3107


引数なしsuper関数


引数なしsuper関数

>>> class MyList(list):

... def __repr__(self):
... return "MyList" + super().__repr__()
...
>>> MyList(range(3))
MyList[0, 1, 2]

PEP3135


typingモジュール


typingモジュール

>>> from typing import List, Dict

>>> List[Dict[str, int]]
typing.List[typing.Dict[str, int]]
>>> def wordcount(words:List[str]) -> Dict[str, int]:
... return collections.Counter(words)

PEP483, PEP484


数値におけるアンダースコアの使用


数値におけるアンダースコアの使用

>>> 1_234_567

1234567
>>> 0xBEEF_CAFE
3203386110
>>> 0b1111_0000
240
>>>

PEP515 (Python3.6よりサポート)

といったラインナップです!(上記は一部抜粋なので詳細気になる方はレポジトリをご覧ください)Python2の使い勝手が向上していることがお分かりになると思います。また、Final Releasaeが未だでていないPython3.6の機能も取り込まれており、非常に意欲的です。

ちなみに、Python2.8の開発は2016年9月末ころから始まり、Naftali氏1人で開発しているようです。


ちゃんと動くの?

このリポジトリのOwnerであるNaftali氏のブログに依ると、


I use Python 2.8 as my system python now, and haven't had any problems running my old 2.7 code or using packages like IPython, pip, numpy, pandas, requests, and flask. I've been enjoying the new language features--I especially like underscores in numeric literals!


と書かれており(意訳: 問題ありません。ライブラリも使えます。数値のアンダースコアが特にお気に入りです。)問題なく動くようです。さすがに商用で使用されているとは考えにくいので、個人プロジェクや自宅で使われているのでしょうかね。


事の顛末

Python-DevのMLでは、非公式なプロジェクトがPythonという名を冠すのはどうなんだ、PSFのポリシー/ライセンスに違反しているのではないか、公式のForkだとわかるように改名を進めるべきだ、という流れで概ね議論されています。

かのGuido氏も降臨しており、


to Python-Dev

While I think the name is misleading and in violation of PSF policy and/or license, I am not too worried about this. I expect it will be tough to port libraries from Python 3 reliably because it is not true Python 3 (e.g. str/bytes). So then it's just a toy. Who cares about having 'async def' if there's no backport of asyncio?

--Guido van Rossum (python.org/~guido)


「所詮はただのおもちゃ。asyncioがないasyncを誰が使うんだ。」と一蹴しています。

すでにgithubのリポジトリには、"Rename this Project"というIssueができており、Naftali氏も改名に同意する方向で話が進んでいます。

こちらにもGuido氏は降臨しており、


Since I was asked: The project's name (and its binary name) need to change. They are misleading. The rest looks acceptable according to Python's license. This is not an endorsement (far from it).


「混乱を防ぐために、プロジェクトとバイナリの名前を変えてくれ」と述べています。

ちなみに、ちょうど今は改名大喜利状態のようですので、Pythonおよび大喜利が得意な皆様に置かれましては、是非この改名大喜利に参加されてみてはいかがでしょうか?


背景を勘ぐってみる

今回の一件の裏側には、Python3に移行せず、Python2をベースにしたいという強い思いが感じられます。

その背景には、PythonコードベースのPython3への移行がPython界全体で進んでいない(のかもしれない)ということが考えられます。

個人的には最近はそうでもないのかなと思ってたんですが、先月に書かれたこの辺の記事なんかは、Python3はコケおろし状態です。ちなみに、2014年になりますが、Flaskで有名なArmin氏もPython3のUnicodeについては強く批判しています。

著者のNaftali氏は、Python3を支持するとしながらも、


At least personally, almost all of the python I've ever written personally or professionally uses Python 2.7 or earlier.


と述べており、実際にはPython3を使っていないようです。なのでPython2.8を作ったのでしょう。

僕個人的には、GAE/Pythonをよく使うので、Python2.7の割合が大きく、なかなかPython3に深く触れていなかったりします。実際に、商用環境でPython3ってどれくらい利用されているのかは、個人的に大変気になるところではあります。


まとめ


  1. やせいのPython2.8があらわれた!

  2. 改名しよう!

  3. 大喜利ハジマタ

  4. 仮の名前がPlaceholderに决定!(←イマココ)

こちらからは以上です。





  1. ※本稿では、UnofficialなPython2.8という意味で「やせいの」という表現を使用しております。Pythonistaの皆様を混乱させる意図はございません。