Python

2018ǯ06��29��

�Ƕ��Python-dev(2018-06)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

Python 3.7

���ܻ��֤�6/28�� Python 3.7 ����꡼������ޤ����� ���פ˶���ߤ�2���礭�ܤ��ѹ�������ޤ�����

  • Unicode 11 �б�
  • AST���ѹ��� revert

Unicode 11 �ϥǡ����ι��������ʤΤǴ��������ʤ�����1.5ǯ���3.8�ޤ��ˤϤ������ʤ��Ȥ������Ȥ�Go�����󤬽Фޤ�����

AST �ϡ��ͤ��濴�ǹԤä�AST�ʳ��Ǥ�������߹��ߤν����Ȥ��ơ� docstring �Ȥ����Ǥʤ�ʸ����ζ��̤�AST�ʳ��ǤĤ��䤹��������ѹ����Ƥ��ޤ�����

�����ѹ��ˤ�ꤤ���Ĥ��Υ饤�֥������꤬��𤵤�Ƥ����ΤǤ�����AST �Ϥ�Ȥ�ȸ����ߴ������ݾڤ��Ƥ��ʤ�����ȥ饤�֥��¦�Ǥ��н褬����Ƥ��ޤ�������������RC�ե����������äƤ��� IPython ��¾�Ȱۤʤ�������򤷤Ƥ��ơ�����AST�˴ؤ���API�� IPython �Υˡ������������Ƥ��餺���곰���н褬ɬ�פˤʤäƤ������Ȥ��顢��ö�����ᤷ�Ƥޤ�API����ͤ�ľ�����Ȥ������Ȥˤʤ�ޤ�����

������󤳤�AST���ѹ��򸵤�������߹��ߤ�����Ƥ����Τǡ�������߹��߸�� docstring ��ʸ��������ζ��̤��Ĥ��ʤ��ʤ�ʤ��褦�� Python ¦�˥ϥå���ɬ�פˤʤ�ΤǤ������ͤ�������ȤǤ��ʤ��������� Serhiy ����äƤ���ޤ����� https://github.com/python/cpython/pull/7121/files/8ee9227599583c460ff8faf9c1ab1670559a1224#r191080934

Compact GC Header

Python 3.8 �˸������礭��β�����1�Ĥ�ˡ�2000ǯ�����ѹ�����Ƥʤ��۴Ļ���GC�ѤΥ��ꥪ���С��إåɤκ︺��ĩ�路�Ƥ��ޤ���

���礦�� 6/25 �ˡ����٥�ץ�����ߥ󥰤�����ˤʤ뤳�Ȥ�¿�� Turing Complete FM �Υꥹ�ʡ������ޤ� �ߡ��ȥ��åץ��٥��� �����ä��Τǡ�������ȯɽ���Ƥ��ޤ�����

����Ū�ˤϤĤ��Τ褦����ά�ǡ�GC�ѥإå��Υ�������̤�ݥ���3��ʬ����2��ʬ�˺︺���Ƥ��ޤ���

  • ��������󥯥ꥹ�Ȥε�������󥯤ò¡¢°ï¿½ï¿½Åªï¿½ï¿½ï¿½Ù¤ï¿½ï¿½ï¿½GC�Ѥλ��ȥ�����Ȥ˻Ȥ���ɬ�פˤʤ������᤹��
  • �ݥ��󥿤β���3bit��¾�����Ӥ˻Ȥ� (tagged pointer)�����ȥ�����Ȥ˻Ȥ��Ȥ��Ϻ���3�ӥåȥ��եȤ��롣

��öư���褦�ˤʤä���ΤΡ����꤬����ޤ�����

  • ���ȥ�����Ȥ�3�ӥåȥ��եȤ����顢�ݥ��󥿥�������4�Х��Ȥ�32bit�������ƥ�����ǥ����С��ե���������������롣
  • �ޥ��ʡ��ʥ������ƥ������Υޥ��ʡ��� malloc ������8�Х��ȥ��饤�󤷤ʤ��ä���硢�ݥ��󥿤β���3bit��Ȥ��Τ������

���θ塢2����μ����Υ��ƥʥ󥹤Ϥʤ�٤��򤱤����Τǡ�ɬ�פʴ��֤�����û���ä��ӥåȤ��������󥯤Υݥ��󥿤ǤϤʤ���������󥯤Υݥ��󥿤β��̥ӥåȤ˲��������Ȥ������ɤ�Ԥ��ޤ��������ߥ�ӥ塼�Ԥ��Ǥ���

�ץ�ꥯ������

FASTCALL �� PyFunction, PyCFunction �ʳ��Ǥ����ѤǤ���褦��

Python 3.6 �����ʳ�Ū�ˡ����󥿥ץ꥿�����Ǵؿ��ΰ����μ����Ϥ������ѹ����� FASTCALL ������Ƴ������Ƥ��ޤ���

��������Ѥ��뤿��ˡ����ߤ� Python �Ǽ������줿�ʥХ��ȥ����ɤ򥤥󥿥ץ꥿����������˴ؿ���ɽ�����饹�ȡ�C����Ǽ������줿�ؿ����᥽�åɤ�ɽ�����饹�����̰�������Ƥ��ޤ���

���ơ� Cython �Ϥ������C/C++����Ǵؿ����������ΤǤ������ȥ졼���Хå��ʤɤǥ����������ɤ�ɽ���Ǥ���褦�ˤ������ʤɡ�Python�Ȥ߹��ߤ�C����Ǽ������줿���饹�Ǥ�­��ʤ���ǽ���ɲä��뤿��ˤ��ȼ��η���Ȥ�ɬ�פ����ꡢ��������� FASTCALL �����ѤǤ��ޤ���

�����������뤿��ˤ����Ĥ�����Ƥ�����Ƥ��ơ��ǿ��Τ�Τ� PEP 580 �ˤʤ�ޤ���

��ƼԤε����λ��������硼�äȶ����������໤�򴶤��ƤϤ���ΤǤ���������Ū�ˤϤޤ��������������Ȼפ�����������ư�����ȼ��������᤯��äƤ���Ƥ���Τǡ��Ŀ�Ū�ˤ���������ª���Ƥ��ޤ���

�ȤϤ��������⤽�� FASTCALL �äƤޤ��˲�Ū�ѹ������뤫�⤷��ʤ���������API�� Cython �������äƺ��Ѥ��Ƥ�������ǡ��ɤ��ͤ��Ƥ� PEP 580 �������ꤹ���ʤ�Ǥ���͡�

�ޤ� 3.8 �γ�ȯ�ϻϤޤä��Ф���ʤΤǡ� FASTCALL �� stable & public �����ˤǤ��ʤ����ε�����Ϥ᤿�ꤷ�ƥե������˲�äƤ��ޤ���

PEP 572 (�����黻��)

PEP 572 �ε��������夷�ޤ�����5���Language Summit �����äƤ����ǵ����Υ����С��ҡ��Ȥ�ɤ��������ʤɤ��ä����줿�ΤǤ����� LWN.net ������ �ޤȤ� ���äƤ��줿�Ȥ������顢�ޤ�ML��Ǥε������Ƴ���Ĺ��ʥ���åɤˤʤäƤ��ޤ�������


@methane

songofacandy at 14:39���������URL��Comments(0)
2018ǯ04��27��

�Ƕ��Python-dev(2018-04)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

Python 3.7 ���١����ˤʤꡢ�礭���ѹ��Ϥʤ������������ޤ����� ���δ֡�Python �θ��켫�Τ䥨�������ƥ�˴ؤ��ƽ��פ����꤬���Ĥ�����ޤ�����


pypi.python.org ���� pypi.org ��

Ĺǯ Python �Υ��������ƥ��٤��Ƥ���Ƥ��� PyPI ����˥塼���뤷�ޤ�����

Python 3 �ؤΰܹԤ�Ϥ�Ȥ��ƥ���󲽤��졢 Markdown �ǽ񤤤� README �������󥰤Ǥ���褦�ˤʤ�ʤɤβ��������äƤ��ޤ���

IRC ���� Zulip chat ��

freenode �� python-dev �Ȥ��� IRC �����ͥ뤬����ΤǤ������������׸��Ԥ����ߥ�˥�����������Τ˺���IRC��Ȥ��Τϥϡ��ɥ뤬�⤤�󤸤�ʤ�����Slack �� Discord �ߤ����ʥ����ʴĶ����Ƥߤʤ����Ȥ����᡼����ꤲ���ꡢ Zulip ����Ѥ��뤳�Ȥˤʤ�ޤ�����

���ΤȤ����� python-dev �Ȥ��μ��դ����Ӥ����ꤵ��Ƥ��ޤ�������̤���ɾ�ʤ龭��Ū�ˤ⤦�����������ӤˤⳫ������뤫�⤷��ޤ���

�Ŀ�Ū�ˤϡ�UI���Х��륢�ץ�δ����٤� Slack �� Discord �ˤ��ʤ�ʤ���ΤΡ����֥����ͥ�Ū�� topic �Ȥ�����ǽ�������ǡ�ʣ�������꤬���󤷤��Ȥ��ˣ��Ĥ�����˽���Ǥ����ʤ����� Slack �Υ���åɤΤ褦�˵����������ˤ����ʤ뤳�Ȥ�ʤ��Ȥ������˥��åȤ򴶤��Ƥ��ޤ���

RHEL 7.5 �� Python 2 �� deprecate

RHEL 7.5 ����꡼�����졢��꡼���Ρ��Ȥ� Python 2 �� deprecate ����ޤ������Ĥ��Υ᥸�㡼�С������ (RHEL 8?) �� Python 2 ��������� Python 3 ���������ݡ��Ȥ����褦�Ǥ���

Ubuntu 18.04 LTS ������ Python 2 �� main ��ݥ��ȥ꤫�鳰���ޤ���Ǥ������� 20.04 LTS �ޤǤˤϳ����Ǥ��礦���顢�ʥ��ݡ��Ƚ�λ��Υޥ��󤬰����Ĥ��ΤΡ� Python 2 ��Ȥä��Ķ��Ϥ������� 2025 ǯ�����˥꥿�������뤳�Ȥˤʤ�Ȼפ��ޤ���

PEP 394 ���åץǡ���

PEP 394 -- The "python" Command on Unix-Like Systems

���� PEP �ϡ� Python 2 ��3 ����ߴ��ˤ����ˤ���¤��뤿��Υ��ޥ��̾��shebang�ˤĤ��ƤΥ����ɥ饤����󶡤��Ƥ��ޤ����绨�Ĥ˸����ȼ��Τ褦�ˤʤäƤ��ޤ���

  • Python 2 �����Ѳ�ǽ�ʤ� python2 ���ޥ�ɤ� Python 3 �����Ѳ�ǽ�ʤ� python3 ���ޥ�ɤ��Ѱդ��롣
  • python ���ޥ�ɤ� python2 ���ޥ�ɤ�Ʊ�� Python ��ư����褦�ˤ��롣
  • Python 2 �ˤ����б����ʤ�������ץȤ� shebang �� python2 ��Ȥ��� Python 3 �ˤ����б����ʤ�������ץȤ� shebang �� python3 ��Ȥ���ξ�б��Υ�����ץȤ� shebang �� python ��Ȥ���

����Ϥ����ޤǤ⥬���ɥ饤��Ǥ��ꡢ Gentoo �� Arch �Τ褦�� python ���ޥ�ɤ��ǥե���Ȥ� Python 3 �ˤʤäƤ���ǥ����ȥ�ӥ塼�����⤢�뤷�� macOS �� python2 ���ޥ�ɤ��Ѱդ��Ƥ���ޤ��󤬡�����Ǥ� Debian, Ubuntu, Fedora, Red Hat �γ�ȯ�Ԥ����Υ����ɥ饤��ˤ��­�¤ߤ�·���Ƥ��������Ǥ�̵�����ϥޥ��Ǥ���

���ơ����Υ����ɥ饤��ϻ�����������뤳�ȤˤʤäƤ��ơ� Fedora / RHEL �� Python 2 ��ΤƤ�Τ˹�碌�Ƥɤ����뤫������ˤʤ�ޤ��������ߤ� Guido �ιͤ��Ϥ�����������ʴ����Ǥ���

  • Python 2.7.10 ���Ф�ȶ��ˡ��֣���С����������פ���������Τǡ�Python 3.9 �μ���¿ʬ 3.10 �ˤʤ롣 "python3" �Ȥ������ޥ��̾��Ȥ�³����Τ�����Ϥʤ��� Python 4 �� GIL ��´�ȤȤ��ä��礭���ѹ�������Ȥ��ˤʤ��������
  • (Dropbox �Ǥ�) �ޤ� Python 2 �� 3 ��ξ����ȤäƤ���Τǡ� "python" ����� Python 2 �Ǥ��ä��ߤ�����
  • "python" ���ޥ�ɤ�¸�ߤ��ʤ��Τ�����ʤ���
  • Python 3 �� venv ���ä��Ȥ��� python �Ȥ������ޥ�ɤò¥ª¡ï¿½ï¿½Ð¡ï¿½ï¿½é¥¤ï¿½É¤ï¿½ï¿½Æ¤ï¿½ï¿½Þ¤ï¿½ï¿½Î¤Ï´Ö°ã¤¤ï¿½ï¿½ï¿½Ã¤ï¿½ï¿½ï¿½

Python 2 ��ΤƤ�Τ򵡤� "python" ���ޥ�ɤ� Python 3 �ˤ������ä� Fedora / Red Hat �Υ��ƥʤˤȤäƤϿ�򺹤��줿���Ǥ���

�����Ǥ��Ǥ� "python" ���ޥ�ɤ� Python 3 �ˤʤäƤ���ǥ����ȥ�� venv �ϸ�¸����Τǡ������� "python" ���ޥ�ɤ� Python 3 ��ؤ����Ȥ�ػߤ��뤳�Ȥ⤷�ޤ��󡣷����Ȥ��ơ�����Υ��åץǡ��Ȥ��礭���ѹ����ϼ��Τ褦���ѹ��ˤʤ�ޤ���

  • "python" ���ޥ�ɤ�¸�ߤ��ʤ����ɤ� (¸�ߤ�����ϡ����ޤ��̤� "python2" ���ޥ�ɤ�Ʊ��Ǥ���٤�)
  • (���� PEP ��ͭ���ʴ������) "python" ���ޥ�ɤ� "python3" �ˤʤ뤳�Ȥ���Ԥ������������

�Ȥ������Ȥǡ����᤯�ɤ��Ǥ� python �Ȥ������ޥ�ɤ� Python 3 �ˤʤ�ʤ����ʡ��פȤ�����˾�ϼΤƤơ� "python3" �������ʿ侩����륳�ޥ��̾�ʤ���Ȥ������Ȥ˴��줿�ۤ����ɤ������Ǥ���

PEP 572 -- Assignment Expressions

Python �Ϥ��ä��������ʸ (statement)�פȤ��Ƥ��ޤ������������� := �Ȥ����黻�Ҥ����������ɲä��褦�Ȥ�����ƤǤ���

�㤨�м��Τ褦�ʥ����ɤ��񤱤�褦�ˤʤ�ޤ���

# 572 ������Ȥ�
if m := re.match(pat, s):
    # do something with m

# �ʤ��Ȥ�
m = re.match(pat, s)
if m:
    # do something with m

�᡼����̤����礹����Τ�̼�������������ä��ΤǴ����ˤϵ������ɤ��Ƥʤ���Ǥ������ǽ�Υ���١������ϥꥹ������ɽ�����ͤκ����Ѥ򤷤����Ȥ������Ȥ��ä��Ȼפ��ޤ���

# foo() �򣲲�׻����Ƥ��ޤäƤ���
ys = [foo(x) for x in xs if foo(x) is not None]

# ���Ǥ�ꤿ��
ys = [z for x in xs if (z := foo(x)) is not None]

����ɽ���˸¤ä���ʸ��ĥ�䡢�����˥֥��å��������פ��ɲä���ʤɡ�������ʥ����ǥ����Фޤ�����������ץ뤵���������ΥХ�󥹤Ǻ�����Ƥ�����夭�ޤ�����

�ȤϤ����� Python �Ϥ��äȡ�������ʸ�פȤ�������ȶ��ˤ��ä�����ʤΤǡ�������Ƥ����󤬤⤿�餹�������򼺤碌���ΤǤ⤢��ޤ���

���ޤǤ�ʣ���ʼ����ɤ����Ф��Ƥ�������ƨ��������̵���ä��Τ���PEP 572 ����ǧ���줿���ϡ���ʬ��������ƨ���Ƥ��ʤ��������ʤ��饳���ɤ��ɤ�ɬ�פ��ФƤ��ޤ���

�ʤΤǡ��ɲä����������˻Ȥ�����������ɤ⺣���ʳ��Ǥ� +1 �Ϥ��ʤ��פȤ��������ɤ�¿���Ǥ�����ȿ�Фοͤ⤤�ޤ�����⿵���ɤΰ�ͤǡ����åȤ����������ʤ����̡����١ˤǤ��������Ƥۤ����ʤȻפäƤ��ޤ���

���ȼ����⤢��ΤǶ�̣�Τ���ͤϻ�ƤߤƤ����������ʤǤ�ML�Ǥε����˻��ä���Ȥ������Ťˤ��ꤤ���ޤ�����


@methane

songofacandy at 12:40���������URL��Comments(0)
2018ǯ01��30��

�Ƕ��Python-dev(2018-01)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

Python 3.7b1 ��29����ͽ��Ǥ�������ʤ�������ܻ��֤κ�����˽Ф�Ϥ��Ǥ�����buildbot��Travis���԰���ʤΤǾ����٤�뤫�⤷��ޤ��󡣤���� feature freeze �ʤΤǿ���ǽ�ɲä�ѥե����ޥ󥹸���ʤɤϴ���Ū�˽����Ǥ���

beta ���ζ���ߤǡ�����ǾҲ𤷤�Accept���줿PEP����������緿���ߥåȤ���������ޡ�������ޤ������ʴ֤˹��ʤ��ä���Τ�̵���Ϥ������֤󡣡�

����ϻ䤬�ط����Ƥ����Ȥ������濴�˾Ҳ𤷤Ƥ����ޤ���


dict �ν���θ�����Ͳ�

Python 3.6 ���� dict �������������¸����褦�ˤʤ�ޤ����������ε�ư�ϼ����ܺ٤Ǥ��ꡢ�ޤ�������ͤǤϤ���ޤ���Ǥ��������Τ��ᡢ¾�� Python ������Ʊ����ư�ˤʤ뤳�Ȥ��ݾڤ���ޤ��󡣶���Ū�ˤ� PyPy ��Ʊ����ư�ʤȤ�����CPython��PyPy�����򿿻������ˤǤ����� MicroPython �ϰ㤤�ޤ���

���ν���˰�¸���ʤ��褦�ˡ������Ǥϰݻ����Ƥ������򥤥ƥ졼�Ȼ��˥����ಽ����褦�ʲ�¤�򤹤뤫�������������ä��λ�������ͤˤ��Ƥ��ޤ����Ȥ������꤬���äơ���̤Ȥ��� 3.7 ����ϸ�����ͤˤʤ뤳�Ȥˤʤ�ޤ�����

����˴�Ϣ���ơ��ͤ� collections.OrderedDict �����󥯥ꥹ�Ȥ��äƥ�������̤�Ⱦ������������Ƥ����ΤǤ������������ݻ����뤿������ʤ� dict ��Ȥ���ΤǤ��μ����ϥǥ�������ˤʤ�ޤ�����

hasattr(), getattr() ����

https://github.com/python/cpython/pull/5173

hasattr(), getattr() ��õ������°�������Ĥ���ʤ���硢�����ǰ��� AttributeError ��ȯ�����Ƥ��餽��򰮤�Ĥ֤��ơ� hasattr �ʤ� False, getattr �ʤ��軰�������Ϥ��줿�ǥե�����ͤ��֤��Ȥ�����ư�򤷤Ƥ��ޤ�����

�����㳰��ȯ����������٤����Ȥ߹�碌���㴳�Υ����С��إåɤˤʤäƤ���ΤǤʤ�Ȥ��������ΤǤ��������٤ƤΥ������Dz��򤹤뤳�ȤϤǤ��ޤ��� Python �� __getattr__ ��������Ƥ���Ȥ��ˤ� AttributeError ���ꤲ��Τ���ޤ�ʥץ��ȥ���ˤǤ�����C��٥�Ǥ������������ tp_getattro �Ȥ��������åȤ�Ʊ���ץ��ȥ���ˤ�ȤŤ��Ƥ��ޤ���

��������°�����������ˤĤ��Ʋ��餫�Υ������ޥ��������פʾ�硢 tp_getattro �ˤϥǥե���Ȥ� PyObject_GenericGetAttr() �Ȥ����ؿ��ݥ��󥿤����ꤵ��Ƥ��ޤ��� tp_getattro ��ƤӽФ����ˡ����줬 PyObject_GenericGetAttr �Ǥ���С�°�������Ĥ���ʤ��ä����Ȥ��㳰��Ȥ鷺���֤��ü첽���줿�ؿ���Ƥ֤褦�ˤ��ޤ�����

����ǡ� getattr �򥫥����ޥ������Ƥ��ʤ�¿���η��� getattr() �� hasattr() ����®�ˤʤ�ޤ����� �㤨�� Django �Υƥ�ץ졼�Ȥ� hasattr(s, '__html__') �Ȥ��Ƥ���Ȥ��������ꡢ���ʤ�β���� False ���֤��Τǡ�������®���Ǥ������Ȥ��ǧ���Ƥ��ޤ���

��� hasattr(), getattr() �������®�����Ƥ����ΤǤ���������� Serhiy ���� _PyObject_Lookup �Ȥ���̾���ο��ץ饤�١���API�Ȥ����������ơ� Python ������ PyObject_GetAttr() ��Ƥ�Ǥ��� AttributeError ��ä��Ƥ������٤ƤθƤӽФ�����API��Ȥ��褦�˽񤭴����Ƥ���ޤ�����

������߹���

�㤨�� 1 + 2 �Ȥ��������ɤ����ä��Ȥ���1 �� 2 �Ȥ�������򥹥��å����Ѥ�Ǥ��� BINARY_ADD ����Ȥ����Х��ȥ����ɤ���ö����ޤ���

���θ塢 peephole �ȸƤФ�Ƥ���Х��ȥ����ɥ�٥�κ�Ŭ���ǡ�Ϣ³���� LOAD_CONST �Τ��Ȥ� BINARY_ADD ���褿�Ȥ��ϡ�1 + 2 ��׻����Ƥ��ޤäƷ�̤� 3 ������ơ��֥����Ͽ����1�Ĥ� LOAD_CONST ���֤�������Ȥ�����Ŭ���򤷤Ƥ��ޤ����������������߹��ߤȤ����ޤ���

�������������ˡ�ˤϷ���������ޤ��������߹������˥ơ��֥�����äƤ�����������פˤʤ뤫�⤷��ʤ��Τˡ����Τޤ޻ĤäƤ��ޤäƤ����ΤǤ������Υ���ץ륳���ɤǤϡ����3�������Ѥ��Ƥ��ʤ��Τˡ�1��2���ơ��֥�˻ĤäƤ�����Ǥ��� (�ʤ���co_consts �κǽ�ˤ��� None �� docstring �ʤΤǾä��ޤ���)

>>> import dis
>>> def x():
...     return 1+2
...
>>> x.__code__.co_consts
(None, 1, 2, 3)
>>> dis.dis(x)
  2           0 LOAD_CONST               3 (3)
              2 RETURN_VALUE

������߹��ߤΤ��Ȥ�����ơ��֥��ƹ��ۤ���Ȥ�����Ŭ������Ƥ��줿���Ȥ⤢��ޤ���������ơ��֥��2����ľ������������߹��ߤ�Х��ȥ�������������AST���ʳ��Ǥ�äƤ��ޤ������ڤ��ɤ��������Ȥ������ȤǵѲ�����Ƥ��ޤ�����

������AST��٥��������߹��ߤϡ�Eugene Toder���󤬼�������Ƥ����ΤǤ���������ⲿǯ�����֤���Ƥ��ޤ����� ����򸫤Ĥ��ƺ��ΥС�������ư���褦�˼�ľ���ơ� Python 3.7 ������ޤ����� Python 3.7 �ǤϾ����Ϥ����ʤ�ޤ���

>>> x.__code__.co_consts
(None, 3)
>>> dis.dis(x)
  2           0 LOAD_CONST               1 (3)
              2 RETURN_VALUE

TextIOWrapper �� encoding ���ѹ���ǽ��

��Python 3.7 �ǥƥ����ȥե�����Υ��󥳡��ǥ��󥰤���������ѹ���ǽ�ˤʤ�ޤ��� �Ȥ��������ǾҲ𤷤��ΤǤ�����򻲾Ȥ��Ƥ���������

lru_cache �ξʥ��경

functools.lru_cache �� dict ����������󥯥ꥹ�Ȥ�Ȥä� LRU ��������Ƥ��ޤ���

dict ����������󥯥ꥹ�ȤȤ����Ȥ߹�碌�� OrderedDict ��Ʊ���Ǥ���Ʊ��������2���ढ��Τ�̵�̤��ʤ��Ȼפäư��� OrderedDict ��Ȥ����ǽ�ľ���Ƥߤ��ΤǤ������ѥե����ޥ󥹤�����Ƥ��ޤ��ޤ����� OrderedDict �� dict ��Ѿ����Ƥ��뤷����ߤ������ơ����Ǥ���������ʤɤ�������õ����ʤ�ɤ����ľ���Ƥ��뤳�Ȥ����ꡢ dict + ��������󥯥ꥹ�ȤȤ��Ƥμ����� lru_cache ��������������������Ū����ľ���ä��ΤǤ���

�Ȥ������ȤǤ��λ�ߤϼ��Ԥ����ΤǤ��������κݤ� lru_cache ���������ꥹ�Ȥγƥ���ȥ꤬GC��ǽ���֥������ȤˤʤäƤ��뤳�Ȥ�ȯ�����ޤ���������ˤ�ꡢ�����Ǥ��Ȥ�3��� (64bit �ޥ���Ǥ� 24byte) �Υ����С��إåɤ������ꡢGC�ν������֤�Ĺ���ʤ�ޤ���

Python �ν�󻲾�GC��ư�����ˤϡ��ƥ���ȥ����̤��������Ƥ���ʤ��Ƥ� lru_cache ���Τ����������Ȥ��˥�󥯥ꥹ�Ȥ��Ӥ�ƹԤ��Ф���Ȥ������Ȥ�פ��Ĥ����ƥ���ȥ��GC�إå��������뤳�Ȥ��Ǥ��ޤ���������ǥ���å��夵��Ƥ������ǿ� * 24�Х��Ȥκ︺�ȡ�lru_cache��إӡ��˻ȤäƤ��륢�ץ�Ǥ�GC®�٤θ��夬������ޤ���

ABC��C����

https://github.com/python/cpython/pull/5273

Python �ε�ư���֤��٤�����3���װ��� ABC �� Enum ������ɽ���Ǥ��������Ǥ��и���

��ư���ˤۤܳμ¤� import �����⥸�塼��� _collections_abc ������ΤǤ���������򸫤�ȡ���������� ABC ��������졢��������η��������� register ����Ƥ���Τ��狼��ޤ���

�����˾Ҳ𤷤� importtime ���ץ����dz�ǧ���Ƥߤޤ���

$ local/py37/bin/python3 -Ximporttime -c 42
import time: self [us] | cumulative | imported package
...
import time:        74 |         74 |       _stat
import time:       202 |        275 |     stat
import time:       166 |        166 |       genericpath
import time:       244 |        409 |     posixpath
import time:      1696 |       1696 |     _collections_abc
import time:       725 |       3105 |   os
import time:       218 |        218 |   _sitebuiltins
import time:       160 |        160 |     _locale
import time:       155 |        315 |   _bootlocale
import time:       500 |        500 |   sitecustomize
import time:       220 |        220 |   usercustomize
import time:       692 |       5047 | site

ABC�������register��ξ������Ū�˹�®�����뤿��ˡ�Ivan Levkivskyi ���� (�ĤŤ꤬�񤷤�) ��C�������äƤ��줿�ΤǤ������������꤬���äƶ��Ϥ��Ʋ�����Ǥ���

�̤Ȥ��Ƥ�¿���ʤ�������ɥ᥿���饹�� weakref �򰷤��Τ���������������Τ����ݤʤ�Ǥ���͡�����

�ʤ�Ȥ� 3.7b1 �ޤǤ˥ޡ������Ƥ�����ʤ�ư�������ʤȤ����ޤǤϻ��äƤ��ä��ΤǤ����� 3.7 �Υ�꡼���ޥ͡����㡼�� b1 ��ˤ��Ƥ��ɤ�����㳰��ǧ��Ƥ��줿�Τǡ���ö����夤�Ƽ������᤭ľ��ͽ��Ǥ���

���줬�ޡ��������ȡ� Python �ε�ư���� (python -c 42) �Ϥ���ʴ����ˤʤ�ޤ���

�С��������ư����(ms)
3.616.4
3.7b114.4
3.7b1 + C-ABC13.9

�ޤ��� python -c 'import asyncio' �λ��֤⡢ Python 3.6, 3.7b1, C-ABC �� 88.2ms -> 58.7ms -> 57.6ms ���᤯�ʤä���Ƥ��ޤ���

(�ɵ�) str, bytes, bytearray �� isascii() �᥽�åɤ��ɲ�

Python �� str �� isdigit() �ʤɤΥ᥽�åɤ� Unicode �б����Ƥ��뤿�����ASCIIʸ�����Ф��Ƥ� True ���֤��Ƥ��ޤ��ޤ����ޤ� int() �� Unicode �б����Ƥ��ޤ���

>>> s = "������"
>>> print(ascii(s))
'\uff11\uff12\uff13'
>>> s.isdigit()
True
>>> int(s)
123

��������ASCIIʸ������������դ������Ȥ����������⤢��Ǥ��礦�����λ��� .encode('ascii') ���㳰���ꤲ�ʤ��������å�����Τϼ�֤Ǥ���

������ str.isascii() �᥽�åɤ��ɲä���Ƥ��ޤ����������Ȥ��� s.isascii() and s.isdigit() �� ASCII �������������Ȥ��Ƥ��뤫������å��Ǥ��ޤ���

���������ʰո��Ϥ��ä���Τδ���Ū��ȿ�аո��Ϥʤ��ơ�Guido��bytes��bytearray�ˤ�Ʊ���᥽�åɤ��ɲä��Ƥ����ƤȤ�����å������Ƿ�ޤ�ޤ�����

�������äȤ��ơ� str �������� ASCII �ե饰����äƤ��� (���Υե饰�� UTF-8 �ؤΥ��󥳡��ɤ������åפǤ���) �Τ� O(1) �Ǥ����� bytes �� bytearray �ϥХ�������Ӥ�ƺǾ�̥ӥåȤ�Ω�äƤ��ʤ��������å����Ƥ���Τ�ʸ����Ĺn���Ф��� O(n) �ˤʤ�ޤ���

(�ɵ�) PEP 567 -- Context Variables

������Ȥ鷺�˴ؿ��ƤӽФ���Ķ���ƾ��֤������ꤿ����������ޤ���

�㤨��Web���ץꥱ���������Ȥ����顢������񤯻��˸��ߤΥꥯ�����Ȥ�ID�Ȥ��桼����ID��Ĥ���������ɤ⡢����������Ƥδؿ��ΰ����ˤ������ɲä������ʤ��ʤɤǤ���

Python ��ɸ��饤�֥��Ǹ����С� decimal �⥸�塼�뤬�黻���٤ʤɤ򥳥�ƥ����ȤȤ��ƴ������Ƥ��ޤ���

�������ä����֤ϡ��ޥ������åɤǤϥ���åɤ��Ȥ˥���ƥ����Ȥ��ۤʤ�Τǡ�����ϥ���åɥ��������ѿ��˳�Ǽ���Ƥ��ޤ�����

�������� asyncio �ʤɤ���Ʊ���ե졼�����Ǥϡ�ʣ���Υ���ƥ����Ȥ����ĤΥ���åɤ�ư���Τǡ�����åɥ�������ǤΥ���ƥ����ȴ��������ޤ��Ԥ��ޤ��󡣤����ǥ���åɤ���Ω��������ƥ����ȴ����Τ���Υ饤�֥�꤬ PEP 567 ���ɲä���ޤ�����

�����Ȥ��С��ƥ���åɤ��ָ��ߤΥ���ƥ����ȡפ���äƤ����ΤΡ�����å���ǥ���ƥ����Ȥ��ڤ��ؤ�������Ū�ˤǤ���Τǡ� asyncio ���ȥ��٥�ȥ롼�פ��ؿ��ƽФ�������ˤ��Υ���ƥ����Ȥ��������Ƥ�뤳�Ȥ��Ǥ��ޤ���

ML�Ǥε�����Ĺ�����ƻ�ϸ��Ƥʤ��ä��ΤǤ������������� Accept ���줽�����Ȥ����Ȥ����ǰ��ꤵ��Ƽ��������Υ�ӥ塼�򤷤Ƥ��ޤ�����

���������Ȥ��Ƥ� HAMT �ȸƤФ�륢�르�ꥺ������Ѥ��Ƥ��ơ�̾����ʹ�������Ȥ����ä���ξܺ٤��Τ�ʤ��ä��Τǡ���������򤷤ʤ���C�������ӥ塼����Τϳڤ����ä��Ǥ���

songofacandy at 16:01���������URL��Comments(0)
2018ǯ01��23��

Python���ץ�ε�ư���®������

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

pipenv 9.0.2 �Υ�꡼����CLI�������ʹ�®���򤷤��Ȥ������ʥ��󥹤򸫤����ޤ�����

��̣����äƤ����˻�Ƥߤ��ΤǤ��������ޤ�®���������ޤ���Ǥ����������� Python 3.7 �ο���ǽ��Ȥä�®�٤�Ĵ�����뤳�Ȥˤ��ޤ�����

���ε����ǤϤ��ο���ǽ�ȼºݤλȤ�����Ҳ𤷤ޤ���

��ư���� �� import����

pipenv -h �Τ褦�ʥ��ޥ�ɤμ¹Ի��֤ϡ��ºݤ˥إ�ץ�å�������ɽ�����뤿��λ��֤��⤺�ä�Ĺ���ʤ�ޤ���

���ץꥱ������󤬵�ư����Ȥ��ˤϡ�����ե�������ɤ߹��ߤʤɰ���ν�����ɬ�פˤʤ��ΤǤ���

��������Python���ץꥱ�������ξ�硢�⥸�塼��Υ���ݡ��Ȥ���ư���֤��ؤɤ򤷤�����¿���Ǥ���

���Ȥ��л�δĶ��Ǥ� pipenv --version �� 800ms �����ä��ΤǤ��������Τ��� 700ms �� import pipenv �˻Ȥ��Ƥ��ޤ�����

$ time local/py37/bin/python3 -c 'import pipenv'

real    0m0.696s
user    0m0.648s
sys     0m0.048s

$ time local/py37/bin/pipenv --version
pipenv, version 9.0.3

real    0m0.812s
user    0m0.761s
sys     0m0.052s

�⥸�塼���import�ˤ����ä����֤�ɽ������

Python 3.7 �Ǥϥ⥸�塼���import�ˤ����ä����֤�ɽ�����뵡ǽ���ɲä���ޤ�����

���ε�ǽ�� -X importtime ���ץ���󤫡� PYTHONPROFILEIMPORTTIME=1 �ȴĶ��ѿ������ꤹ�뤳�Ȥ�ͭ���ˤʤ�ޤ���

���Ȥ��� pipenv ��Ĵ�����������ϼ��Σ��Ĥ���ˡ������ޤ���

$ python3.7 -X importtime -c 'import pipenv' 2> pipenv-imports
�ޤ���
$ PYTHONPROFILEIMPORTTIME=1 pipenv --version 2>pipenv-imports

���Ԥ� import pipenv ������Ĵ��������Ԥ� pipenv ���ޥ�ɼ¹�������Ƥ� import ��Ĵ������Ȥ����㤤������ޤ���

��Ԥν��Ϸ�̤��㤬 ������ �Ǥ���

import���֤���Ϥ���

���ν��Ϸ�̤κǸ����ʬ�򸫤Ƥߤޤ���

import time: self [us] | cumulative | imported package
...
import time:      3246 |     578972 |   pipenv.cli
import time:       507 |     579479 | pipenv

�Ǹ�ιԤα�¦�� 579479 �ϡ� import pipenv �˥ȡ������ 579479us �����ä����Ȥ��̣���Ƥ��ޤ���

pipenv �� import ����֤ˡ����������¾�Υ⥸�塼�뤬 import ����ޤ��������Ǹ����С� pipenv �� pipenv.cli �� import ���Ƥ��ޤ���(���� import �ϣ����ڡ����ǥ���ǥ�Ȥ���ޤ�)

�Ǹ�ιԤκ�¦�� 507 �ϡ� pipenv �⥸�塼��ñ�Τ� import (�⥸�塼��Υ������Х�μ¹Ԥ�ޤ�) �ˤ��ä� 507us �����ݤ��äƤ��ʤ����Ȥ��̣���Ƥ��ޤ���579 479 - 507 = 578 972us ������import�˳ݤ��äƤ��ޤ���

�٤���ʬ�򸫤Ĥ���

�����ν��Ϥ��顢���֤�ȤäƤ�����ʬ�ڤ�õ���ޤ��礦�����Ĥ��ιԤ�ȴ�褷�ޤ���

import time: self [us] | cumulative | imported package
...
import time:     86500 |     179327 | pkg_resources
...
import time:       385 |     236655 |             IPython
import time:        22 |     236677 |           IPython.core
import time:        26 |     236703 |         IPython.core.magic
import time:       978 |     237680 |       dotenv.ipython
import time:       199 |     239032 |     dotenv
...
...
import time:      3246 |     578972 |   pipenv.cli
import time:       507 |     579479 | pipenv

pkg_resources

�ǽ�˸��Ĥ����Τ� pkg_resources �Ǥ������ܤ��Ƥۤ����Τϡ����Υ⥸�塼�뤬����ǥ�Ȥ���Ƥ��ʤ����ȤǤ����Ĥޤꡢ pipenv �⥸�塼�뤫�����Ū�� import ����Ƥ���櫓�ǤϤʤ��ΤǤ���

�ºݡ� pkg_resources �� pipenv ������ץ� ���� import ����Ƥ��ޤ�����

$ cat local/py37/bin/pipenv
#!/home/inada-n/local/py37/bin/python3.7
# EASY-INSTALL-ENTRY-SCRIPT: 'pipenv==9.0.3','console_scripts','pipenv'
__requires__ = 'pipenv==9.0.3'
import re
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(
        load_entry_point('pipenv==9.0.3', 'console_scripts', 'pipenv')()
    )

pkg_resources �� import ���٤��Τϴ��Τ�����ǡ������ߴ�����������˽�������Τ��񤷤�����Ǥ���

�������� pkg_resources �� import �ϲ��򤹤뤳�Ȥ��Ǥ��ޤ���

$ local/py37/bin/pip install wheel
$ local/py37/bin/pip install -U --force-reinstall pipenv
$ time local/py37/bin/pipenv --version
pipenv, version 9.0.3

real    0m0.704s
user    0m0.653s
sys     0m0.052s

����ǡ� pipenv --version ���ޥ�ɤμ¹Ի��֤ϤۤȤ�� import pipenv �λ��֤��������ʤ�ޤ�����

wheel �����󥹥ȡ��뤵��Ƥ������ pip �ϥ������ѥå����� (.tar.gz �ʤ�) �����������ɤ��Ƥ��Ƥ⡢��ö wheel (.whl) ��ӥ�ɤ��ơ� wheel ���饤�󥹥ȡ��뤷�ޤ��� ������ wheel ���饤�󥹥ȡ��뤹����ȥ������ѥå��������饤�󥹥ȡ��뤹����ǥ�����ץȤ���������������ۤʤꡢ wheel ���饤�󥹥ȡ��뤷�����ˤ� pkg_resources ���Ȥ��ʤ��ΤǤ���

$ cat local/py37/bin/pipenv
#!/home/inada-n/local/py37/bin/python3.7

# -*- coding: utf-8 -*-
import re
import sys

from pipenv import cli

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(cli())

�Ĥޤꡢ wheel �򥤥󥹥ȡ��뤷�Ƥ����С��������ѥå������������ۤ��Ƥ��ʤ��ġ���򥤥󥹥ȡ��뤹����ˤ�����;�פʻ��֡ʻ�δĶ��ǤϤ����褽100ms���١ˤ���򤹤뤳�Ȥ��Ǥ��ޤ���

IPython

���˸��Ĥ����٤���ʬ�Ϥ����Ǥ���

import time:       385 |     236655 |             IPython
import time:        22 |     236677 |           IPython.core
import time:        26 |     236703 |         IPython.core.magic
import time:       978 |     237680 |       dotenv.ipython
import time:       199 |     239032 |     dotenv

pipenv �� dotenv �� import ���ơ� dotenv �� dotenv.ipython �� dotenv.ipython �� IPython �� import ���Ƥ��ޤ���

���줬����δĶ� (IPython �����󥹥ȡ��뤵��Ƥ���) �� pipenv �ε�ư���٤��������������ͳ�Τ褦�Ǥ���

�������ʤ� IPython �� import �����ΤǤ��礦�� dotenv �Υ��������ɤ�Ǥߤ��ꡢ�ɤ���� IPython extension �Τ���褦�Ǥ���

������� pipenv �䤽��¾��¿���� dotenv �Υ桼���������Ǥ� IPython extension �ϻȤ��ޤ��󡣤ʤΤ� dotenv ������ǥޥ�ɤ� IPython �� import ����褦�� �ץ�ꥯ������ �����äƤ����ޤ�����

�ޤ��� pipenv �� dotenv �˥ѥå������Ƥ��ȼ����ԡ�������������Ѥ��Ƥ���Τǡ��������� dotenv.ipython ������� �ץ�ꥯ������ �����äƤ����ޤ�����

�ޤȤ�

pipenv --version �μ¹Ի��֤� 800ms ���� 500ms �˺︺���뤳�Ȥ��Ǥ��ޤ�����

$ time local/py37/bin/pipenv --version
pipenv, version 9.0.3

real    0m0.503s
user    0m0.463s
sys     0m0.040s

���Τ褦�ˡ�Python 3.7 �� import ���֥ץ��ե�����ϡ�CLI���ץꥱ�������ε�ư���֤��®�����뤿��ˤȤƤ������Ǥ���


@methane

songofacandy at 16:29���������URL��Comments(0)
2017ǯ12��21��

Python 3.7 �ǥƥ����ȥե�����Υ��󥳡��ǥ��󥰤���������ѹ���ǽ�ˤʤ�ޤ�

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

Python �Υƥ����ȥե����� (��̩�ˤ� io.TextIOWrapper) �Ϥ��ޤޤǥ��󥹥ȥ饯���Ǥ������󥳡��ǥ��󥰤���ꤹ�뤳�Ȥ��Ǥ��ޤ���Ǥ�����

�ä�ɸ�������� (sys.stdin, sys.stdout, sys.stderr) �Υ��󥳡��ǥ��󥰤����ꤹ��ˤϴĶ��ѿ� PYTHONIOENCODING �����Ѥ��뤷���ʤ������ץꥱ�����������ե�����ʤɤ˴�Ť��Ƥ����Υ��󥳡��ǥ��󥰤��ѹ�����ˤ� sys.stdin �� sys.stdin.fileno() �� sys.stdin.buffer ������ľ���ʤɤΥϥå�Ū����ˡ�����Ȥ��ޤ���Ǥ�����

Python 3.7 ����� TextIOWrapper �� reconfigure() �᥽�å� �᥽�åɤ��ɲä��졢�����Υ��󥹥ȥ饯�������ꤹ�륪�ץ������ѹ���ǽ�ˤʤ�ޤ��� �����ƺ������Υ᥽�åɤ� encoding, errors, newline �Υ��ݡ��Ȥ��ɲä��ޤ����� (���ߥå�)

����ˤ�� sys.stdin.reconfigure(encoding='EUC-JP') �Τ褦�ˤ��ƥ��󥳡��ǥ��󥰤��ѹ����뤳�Ȥ��Ǥ��ޤ���

Python 3.7 �� PEP 538 �� 540 �ˤ�ä� UTF-8 ��Ȥ��¤�ˤ����ƤϤۤ������ʤ����֤ˤʤä��Ȼפ��ޤ���������� UTF-8 �ʳ���ɬ�פʾ��ˤĤ��Ƥ��one obvious way�פ��󶡤Ǥ���褦�ˤʤä��Ȼפ��ޤ���

�������Ȥ��ơ�read¦�ˤĤ��Ƥϡ������Ǥ� read ���Ƥ�����ѹ��Ǥ��������顼�ˤʤ�ޤ�������� TextIOWrapper �����ǡ���¦��bufferd IO�ˤ��餢�����٤Τ����ޤ�ǥХ�����������ꡢ�����Хåե����֤��ƥǥ����ɤ��Ʋ��ԤǶ��ڤä��֤��Ƥ���Τǡ��Ȥ��˾��֤��ĥ��󥳡��ǥ��󥰤Υǥ�������ȤäƤ�����ˡ��֤����Ȥ����ޤǡפȡ֤���ʹߡפΥХ���ñ�̤Ǥζ��ڤ��Ĥ���Τ��񤷤�����Ǥ���

�񤭹���¦�ˤĤ��Ƥϡ�ñ�� flush() ���Ƥ��鿷�������󥳡��ǥ��󥰤Υ��󥳡�������ľ���Ф����Τǡ����椫��Υ��󥳡��ǥ��󥰤��ѹ��ˤ��б����Ƥ��ޤ���


@methane

songofacandy at 17:40���������URL��Comments(0)
2017ǯ12��13��

�Ƕ��Python-dev(2017-12)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�: 9��� | 8��� | 6��� | 5��� | 4��� | 3��� | 2��� | 1���

@methane �Ǥ��� ISUCON �����äƤ��Ф餯�֤������Ƥ��ޤ��ޤ��������ߥåȤ�ML��ε������ɤ��Ƥʤ��ΤǤ�����1������Python 3.7��beta1 (=feature freeze)��ͽ�ꤵ��Ƥ��뤿��ˡ�Python 3.7 ����ɸ�ˤ��Ƥ��� PEP ��������������accept���줿�Τǡ�������Ҳ𤷤Ƥ����ޤ���

PEP 540 UTF-8 mode

https://www.python.org/dev/peps/pep-0540/

PEP 538 (locale coercion) �ȥ��åȤǡ��䤬 BDFL-delegate (PEP �� accept ������Ǥ��) �ˤʤä� PEP �Ǥ���

���� PEP ������Ϥ��ʤ�Υܥ�塼�बͭ�ä��ΤǤ��������Ǥ� PEP 538 �� accept �����Τǡ�������䴰���뵡ǽ�Ȥ��������˥���ץ벽���ޤ�����

PEP 538 �Ǥϡ���ư���� locale �� C �Ǥ��ä��Ȥ��ˡ� LC_CTYPE �� C.UTF-8 �ʤɤؤ��ѹ����ߤޤ��� �ޤ���C locale �Ǥ�ɸ�������ϤΥ��顼�ϥ�ɥ餬 surrogateescape �ˤʤꡢ�㤨�� stdin �����ɤ��ʸ����򤽤Τޤ� stdout �˽񤯾��ʤɤ���ASCIIʸ�����Ф��Ƥ�Х���Ʃ��ʿ����񤤤򤹤�ΤǤ���������� C.UTF-8 �ʤɤ� coercion �������åȤȤʤ� locale �ˤ�Ŭ�Ѥ��ޤ���

PEP 540 �⡢ locale ���ѹ����ʤ��ʳ�������Ʊ�������񤤤򤹤�褦�ˤʤ�ޤ���������Ū�ˤϼ��ΤȤ���Ǥ���

  • stdin, stdout �� encoding/error handler �� UTF-8/surrogateescape �ˤʤ�
  • sys.getfilesystemencoding() �� locale.getpreferredencoding() �� UTF-8 ���֤�

PEP 538 �Ȱ�äƼºݤ� locale ���ѹ�����ʤ��Τǡ��㤨�� readline �����ܸ����ϤϤǤ��ʤ��ޤޤǤ�����C locale �ʳ�¸�ߤ��ʤ�����ƥ����� Python ��ư�����Ȥ��˥ǥե���Ȥ�UTF-8��ȤäƤۤ����Ȥ����褦�����ӤˤϤ���ǽ�ʬ�Ǥ���

PEP 563 Postponed Evaluation of Annotations

https://www.python.org/dev/peps/pep-0563/

from __future__ import annotations ��񤯤��Ȥǡ��ؿ����Υơ������ɾ�����줺��������ʸ����ˤʤ�ޤ����ȤϤ��������������ɤ�Ȥ��˹�ʸ�Ȥ��Ƥϥ����å������Τǡ�Ǥ�դ�ʸ���󤬤�����櫓�ǤϤ���ޤ���

����ˤ�ꡢ���Υơ�������񤯤��Ȥˤ����ǽ�Υ����С��إåɤ򸺤餹���̤�����Τȡ����Υơ��������ʬ��̾�����Τ���� forward references �����פˤʤäƽ񤯤Τ��ڤˤʤ�Ȥ������̤�����ޤ���

����ư��� Python 4 ����ǥե���Ȥˤʤ�ͽ��ʤΤǡ� Python 3.7 �˰ܹԤ����ͤ����ˤ���ư���ͭ���ˤ��뤳�Ȥ򤪤����ᤷ�ޤ���

�Ŀ�Ū�ˤϡ��¹Ի���ɾ������ʤ��ʤ뤳�Ȥǡ�Python �ι�ʸ��¹Ի��ˤϵ�����ʤ��������Ѥ����ꡢ���뤤�ϥ��Υơ��������ʬ�Ǥ������ѤǤ��ʤ���ʸ���ɲä���Ȥ����ʲ��ؤ�ƻ���������Ȥ������Ǥ���Ԥ��Ƥ��ޤ����㤨�и��� Union[int, str] �Ƚ񤤤Ƥ�����ʬ�� int or str ���뤤�� int | str �Ƚ񤱤�褦�ˤ�����Ƥ��Ǥ��뤫�⤷��ޤ��󡣡����Ԥ�ɾ������Ȥ����� int �ˤʤꡢ��Ԥ�ɾ������� | �������Ǥ����� TypeError �ˤʤ��

PEP 560 Core support for typing module and generic types

https://www.python.org/dev/peps/pep-0560/

���ޤޤ� type hint �� Python 3 ���ɲä��줿�ؿ����Υơ������ʳ��ˤ����̤� Python ���Ф��뵡ǽ�ɲä�ɬ�פȤ��ʤ��褦���߷פ���Ƥ��ޤ������� typing ���������٤�������������Ƥ���Τǡ��������� typing ��������褹�뤿��� Python ���Τ˼������Ƥ⤤��褦�Ȥ����Τ����� PEP �Ǥ���

�㤨�С� typing.List �� class List(list, MutableSequence[T], extra=list): ... �Ȥ����������Ƥ��ޤ��� ���� MutableSequence[T] ����ʬ�Ǥ������ƥ��饹�ˤʤ뤿��˥��饹�Ǥʤ��Ȥ����ʤ��Ȥ������¤�����ޤ������Τ���˼ºݤ˿ƥ��饹�ˤʤäƤ��ޤ��ΤǼºݤ˥᥽�åɤ��󶡤��Ƥ��ʤ����饹�����̤�MRO������᥽�åɸƤӽФ���ǽ�Υ����С��إåɤ��礭���ʤ�Ȥ������꤬����ޤ����ޤ��� MutableSequence ���Τ⥯�饹�ʤΤǡ�������Ф��� [T] �Ƚ񤱤�褦�ˤ��뤿��˥᥿���饹���Ȥ��Ƥ��ޤ���

���Τ���˸��ߤ� typing �����̤Υ᥿���饹�ϥå���ɬ�פȤ����¹Ի������С��إåɤ⤫���ꡢ import typing ���٤��ʤꡢ�ޤ�¾�Υ᥿���饹�Ȥξ��Ͳ��μ�֤�ȯ������Ȥ�������������äƤ��ޤ���

������褹�뤿��ˡ� Python �˼��ε�ǽ���ɲä��ޤ���

  • class ʸ�οƥ��饹�ꥹ����ʬ�ˡ� type ���֥������ȤǤϤʤ� __mro_entries__ �᥽�åɤ���ĥ��֥������Ȥ�ñ¤¯¤ï¿½ï¿½È¤ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½
  • __class_getitem__ �᥽�åɤ��������ȡ��᥿���饹��Ȥ�ʤ��Ƥ� MyClass[int] �Τ褦�˥��饹��ź������ñ¤¯¤ï¿½ï¿½È¤ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½

�����ε�ǽ�� typing �⥸�塼��ʳ�����Ȥ��ʤ��Ȥ����櫓�ǤϤ���ޤ��󤬡� typing �ʳ������ӤǤ����Ѥ���侩�ˤʤäƤ��ޤ���

�ȤϤ����� __class_getitem__ �ˤĤ��Ƥϡ��Ƕ�Υ᥿���饹��Ȥ�ʤ��Ƥ⥯�饹�ο����񤤤򥫥����ޥ����Ǥ���ή���ź�äƤ��ƹ���Ѵ������Ū���ʤ�ʤΤǡ������˥��饹���֥������Ȥ�ź��������������ɬ�פʾ��̤Ǥ���С�typing �ʳ��ǻȤäƤ��ɤ��󤸤�ʤ����ʡ�

PEP 561 -- Distributing and Packaging Type Information

https://www.python.org/dev/peps/pep-0561/

Typing ���ܳ�Ū�˻Ȥ��Ƥ�������ˤϡ������ɥѡ��ƥ����饤�֥��η������ɤ���ä����ۡ����Ѥ��뤫����ʤ���Фʤ�ޤ��󡣤Ȥ������ȤǤ�����᤿�Τ����� PEP �Ǥ���

PEP 562 -- Module getattr and dir

https://www.python.org/dev/peps/pep-0562/

�⥸�塼��� __getattr__ �ؿ�����������ٱ�����ɤ����ѻ�warning�ʤɤ�¸�������ȤߤǤ���

�ޤ����ٱ�����ɤ����̾�����󶡤��뤿��� __dir__ �����Ѥ��뤳�Ȥ�Ǥ��ޤ���

�Ŀ�Ū�ˤϡ� import asyncio �ǰ�Ť뼰�� multiprocessing �ޤ� import ����Ƥ���Τ� concurrent.futures.ProcessPoolExecutor ���ٱ�����ɤ��뤳�ȤDz�ä������ȻפäƤ��ޤ���

PEP 565 -- Show DeprecationWarning in main

https://www.python.org/dev/peps/pep-0565/

Python �ˤ��ѻ�ͽ���API�ˤĤ��Ʒٹ𤹤뤿��� DeprecatedWarning ������ޤ����������Python�����ץꥱ�������Υ桼�����ˤȤäƤϤۤ�̵��̣�Ǻ��𤵤����ΤʤΤǡ����ߤϥǥե���Ȥ�ɽ������ʤ��褦�ˤʤäƤ��ޤ���

�������� Python ��ȯ�ԤǤ⤳�ηٹ��ͭ���ˤ��Ƥ��ʤ��ͤ�¿������ˡ�DeprecationWarning �˵��Ť���ʤ��Ȥ���Ǻ�ޤ���������ȯ�����Ƥ��ޤ���

PEP 565 �Ϥ��ΥХ�󥹤򾯤�����Ĵ��������ƤǤ��� __main__ �⥸�塼��ˤ����Ƥ����� DeprecationWarning ��ǥե���Ȥ�ɽ������褦�ˤ��ޤ���

__main__ �⥸�塼��Ȥϡ����󥿥饯�ƥ��֥������ Python ���󥿥ץ꥿���Ϥ��줿�¹ԥե�����Τ��ȤǤ���������ľ���ѻ�ͽ���API���ƤФ줿�Ȥ����� DeprecationWarning ��ɽ�������褦�ˤʤ�ޤ���

����ˤ�ꡢ��ȯ�Ԥ�API�λȤ�����Ĵ�٤�ʤɤ���Ū�ǥ��󥿥饯�ƥ��֥�������ѻ�ͽ���API��¹Ԥ����Ȥ��� Warning �˵��Ť���褦�ˤʤ�ȴ��ԤǤ��ޤ���

�ȤϤ���������θ��̤ϸ���Ū�ʤΤǡ�Python��ȯ�Ԥ� -Wdefault ���ץ�����Ȥ����� PYTHONWARNINGS=default �ȴĶ��ѿ������ꤷ�Ƥ����ޤ��礦��

-X dev option

https://docs.python.org/dev/using/cmdline.html#id5

��ǾҲ𤷤� -Wdefault���ץ����˲ä��ơ� Python ��ĥ�⥸�塼�볫ȯ�Ը����Τ�Τ�ޤ�ơ����Ĥ��γ�ȯ�Ը������ץ�����ޤȤ��ͭ���ˤ��륪�ץ����Ȥ��� -X dev ���ץ�����ɲä���ޤ�����

�ޤ��� PYTHONDEVMODE=1 �Ȥ����Ķ��ѿ��Ǥ� dev mode ��ͭ���ˤǤ���褦�ˤʤ�ޤ���

PEP 557 -- Data Classes

https://www.python.org/dev/peps/pep-0557/

���礦�� Qiita �˾Ҳ𵭻������ä��ΤǤ�����򻲾Ȥ��Ƥ���������

Python3.7�ο���ǽ Data Classes

songofacandy at 12:04���������URL��Comments(0)
2017ǯ09��28��

�Ƕ��Python-dev(2017-09)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�: 8��� | 6��� | 5��� | 4��� | 3��� | 2��� | 1���

����� Sprint ������ޤ�������ǯ�� Sprint �ϥ١�����ľ�����ä��ΤǤ�������μ���������ޤ����������� Python 3.7 �Υ١�������ǯ�ΤϤ���ʤΤǡ�����ϼ����������(PEP)��¿��Ǥ����ȤƤ������ϾҲ𤷤���ʤ��ʤ��⤽�����������Ƶ������ɤ��Ƥ��ʤ��ˤΤǡ���������ƤˤĤ��Ƥϼ������줿��Τ�����ֶ�Τ�Τ����Ҳ𤷤Ƥ����ޤ���

namedtuple ��������

bpo-28638: Optimize namedtuple() creation time by minimizing use of exec()

namedtuple �Ȥ��������ץ�����Ǥ�������ź���ǤϤʤ�°��̾�ǥ��������Ǥ���褦�ˤ���ǡ�����¤������ޤ��� �㤨�м��Τ褦�ˤ��ƻȤ��ޤ���

_CacheInfo = namedtuple("CacheInfo", ["hits", "misses", "maxsize", "currsize"])

�����ưŪ�˥��饹����ΤǤ��������Τ���˥��饹����� Python �����ɤ�ʸ�����ִ����������� eval() ���뤳�Ȥǥ��饹���֥������Ȥ��������Ƥ��ޤ��������Υ᥿�ץ�����ߥ󥰤������ϡ���ե쥯�����Ū�ʵ�ǽ��Ȥäƥ��饹������������⡢�����äƤ���Τ���Ƚ��䤹���Ȥ������åȤ�����ޤ���

���������̾��Python�Υ����ɤϥХ��ȥ����ɤ˥���ѥ��뤵��� pyc �ե�����˥���å��夵���Τ��Ф������������Ǥϥ��饹���������륳���ɤ����٥���ѥ��뤵��Ƥ��ޤ��ޤ������Τ��ᡢ namedtuple �򤿤�����ȤäƤ���⥸�塼����ɤ߹��ߤ��٤��ʤ�ޤ���

�����ǡ�������Ū�� type() �ؿ���Ȥ������� namedtuple ����ľ����ޤ������ȤϤ������������줿���饹�Υ��󥹥�������®�٤˱ƶ����� __new__ �᥽�åɤ����ϡ���ǽ����Ȥ����˴����ʸ����ߴ�����ݻ��Ǥ��ʤ��ä��Τǡ�1�ؿ������Τ���û�������ɤ��Ф���eval�Ϥޤ��ĤäƤ��ޤ�������Ǥ⡢CPython�Ǥ�PyPy�Ǥ����®���ʤäƤ���Τǡ�namedtuple�򤿤��������Ѥ���饤�֥��򥤥�ݡ��Ȥ�����֤�û�̤���ޤ���

����¾��ʣ���� namedtuple �Ǻ�ä����饹�֤Ƕ�ͭ�Ǥ�����ʬ��ͭ����ʤɤκ�Ŭ����������ޤ졢�ʥ��󥹥��󥹤ǤϤʤ��ơ��������줿���饹���֥������ȤΥ�������̤�︺�Ǥ��Ƥ��ޤ���

�ʤ���������������줿���饹�� ._source �Ȥ���°�������ꡢ eval �оݤˤʤä����饹����Υ����������ɤ����äƤ����ΤǤ���������β��ɤǤʤ��ʤ�ޤ�����

OrderedDict �Υ���ѥ��Ȳ�

��ǯ�䤬 dict �򥳥�ѥ��ȡ������������ݻ���������򤷤��ΤǤ������ޤ� collections �⥸�塼��� OrderedDict �� dict ���̤˥�������������󥯥ꥹ�Ȥ���äƤ��ơ� dict ���ܤΥ�������Ѥ��ޤ���

OrderedDict ��ŵ��Ū�����Ӥ�ñ�� json �ʤɤǽ����ݻ��������Ȥ�����ΤǤ������������Ӥʤ� dict ��Ȥä��ۤ�������������̤�Ⱦʬ�ˤʤꡢ���ۤ������®�Ǥ����������� dict �ν���ϼ�����¸�Ǥ��ꡢCPython��PyPy�Ͻ����ݻ������ΤΡ�����˰�¸����ΤϤ��Ե��������Ǥ���

�����ǡ�OrderedDict��dict�ι�¤�򤽤Τޤ����Ѥ���褦�˽񤭴����Ƹ��ޤ��������åȤȤ��Ƥ�ŵ��Ū��������ǽ�����줳��夬�äƤ���Τȡ���������̤�1/2�ˡ������ƥ����������ɤ�1000�԰ʾ��뤳�Ȥ��Ǥ��ޤ�����

���������ǥ��åȤȤ��� OrderedDict �� dict ��̩��礹��ʺ���ʬΥ����Ƥ��륽���������ɤ�1�Ĥ˥ޡ������Ƥ��ޤ��ˤ��Ȥȡ� OrderedDict ������¸�ߤ��� move_to_end() �Ȥ����᥽�åɤ�®�٤���������Ƥ��ޤ���¾�ˤ⡢���Ǥΰ�ư���ɲú����ʿ�ѷ׻��̤� O(1) �Τޤޤ�����ɤ⡢�ǰ��׻��̤� O(n) �ˤʤäƤ��ޤ��褦�ʥѥ����������Ƥ����ǽ���⤢��ޤ���

������ʬ�Υ������ѡ��ȤǤ��� Raymond Hettinger ������ä��礭�ʽ񤭴����˸������ͤʤΤǡ���������ˤϼ������᤭�夲�Ȥ��ܤ������ڤ�ɬ�פǤ���¿ʬ ISUCON ��ˤʤ뤱��ɡ� Python 3.7 �˴֤˹�碌������

PEP 539 v3: A new C API for Thread-Local Storage in CPython

Yamamoto Masayuki ���󤬳�ư����Ƥ���������åɥ������륹�ȥ졼�������Ѥ���C��٥�ο�API����Ƥ���������ޤ�����

��API�Ϥ��ʤ�Ť����餢��ΤǤ�����TLS key �Ȥ��� int ����ȤäƤ��ơ�Linux��᥸�㡼��Unix��Windows�Ǥ�����ʤ���Τ�POSIX�ˤϽ�򤷤Ƥ��ޤ���Ǥ��������Τ���Cygwin�ʤɤ����꤬ͭ�ä��餷���Ǥ���

PEP 557: Data Classes

��˥ǡ���������ʪ�Ȥʤ뤳�Ȥ���Ū�Ȥ������饹�����ڤ˺���褦�ˤ��뤿���API����Ƥ���Ƥ��ޤ���

@dataclass
class InventoryItem:
     name: str
     unit_price: float
     quantity_on_hand: int = 0

     def total_cost(self) -> float:
         return self.unit_price * self.quantity_on_hand

�Τ褦���������ȡ�

   def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0) -> None:
       self.name = name
       self.unit_price = unit_price
       self.quantity_on_hand = quantity_on_hand
   def __repr__(self):
       return f'InventoryItem(name={self.name!r},unit_price={self.unit_price!r},quantity_on_hand={self.quantity_on_hand!r})'

�Τ褦�ʥ᥽�åɤ���ư����������ޤ���

namedtuple ����Ū����äƤ����ΤΡ� namedtuple �ϥ��ץ�Ǥ��뤿��˰��������Ӥˤϸ����ʤ���������ޤ����㤨�� immutable ���Ȥ������̤Υ��ץ����Ӳ�ǽ�Ǥ���ʤɤǤ���

Data Class �ϥ��ץ�ǤϤʤ������Τ��������Ǥ���Ʊ�����Ǥʤ�Ʊ�����ˤ����Ӳ�ǽ�ˤ��뤫�ɤ����ʤɤ����٤ޤ�����ʸ�� Python 3.6 ����ο����������������Ѥ�����Τǡ��㤨�� namedtuple �����ȼ��Υ᥽�åɤ��ɲä���ˤϤ⤦1�ʷѾ��������饹����ʤɤ����ݤ����ä��ΤǤ�����������Ͼ����� total_cost() �᥽�åɤΤ褦�����̤˽񤯤��Ȥ��Ǥ��ޤ���

����PEP�ϼ�����������ǡ����ȤϤ⤦̾�����������Ǥ����Ŀ�Ū�ˤ� Record �������ʡ�

PEP 552 -- Deterministic pycs

pyc �ե�����ˤ� py �ե�����Υ����ॹ����פ���Ǽ����Ƥ��ơ� py �ե����뤬���������ȼ�ưŪ�� pyc �ե��������ľ�����褦�ˤʤäƤ��ޤ���

���Τ����py�ե����뤬Ʊ���Ǥ�pyc�ϥХ��ʥ��٥�Ǥϰ��פ��ޤ��󡣤��줬�Ƕ�� �ӥ�ɺƸ���(Reproducible Builds) �Ȥ����ץ饯�ƥ����ˤ��Թ礬�褯����ޤ��� (Debian/Ubuntu �Ǥ� pyc �ϥ��󥹥ȡ����˥ӥ�ɤ���ޤ����� pyc ����˥ѥå������˴ޤ�Ƥ���ǥ����ȥ�ӥ塼�����⤢��ޤ�)

�ޤ���Bazel�Ȥ����ӥ�ɥ����ƥ�Ǥ⤳����Թ礬�����餷���Ǥ���

���� PEP �Ǥϥإå����η������ɲä��������̤�Υ����ॹ����סܼ�ư�ӥ��������¾�ˡ�py�ե�����Υϥå����ͤ���Ļ����Ǥ���褦�ˤʤ�ޤ������ξ�硢 pyc ���ɤ߹���Ȥ��� py �ե�����Υϥå����ͤ�׻����륳���Ȥ����ˤʤ�Ȥ����Ǥ������������إå���py �ե�����Υϥå��������å����Ƽ�ư��ӥ�ɤ��뤫̵���� pyc ��Ȥ��������򤹤�ե饰����äƤ��ޤ���

py�ե����������å����ʤ��������򤷤����⡢ import ���˥����å����ʤ������ǡ����ޥ�ɤ�Ȥä�����Ū�˥����å��������ӥ�ɤ��뤳�ȤϤǤ��ޤ����ʤΤ� root �����񤭹���ʤ��ǥ��쥯�ȥ�� Python ��饤�֥��򥤥󥹥ȡ��뤹����ʤɡ��桼���������ä��� py �ե�������ѹ����������̵����������ʤ��Ǥ��礦��

����PEP��Acceptľ����¾�˰ո����ʤ��ä���Accept������Guido�������ˤǤ����ʤ�������PEP�ϥե�����ե����ޥåȥ�٥�Ǥ����������������ǡ�����ʳ��ˤ� pyc �ե����뤬����ˤʤ�ʤ����������ͳ�ϴ��Ĥ�����ޤ�������������PEP��Accept���줿�Ȥ������Ȥϡ� deterministic pyc �򥵥ݡ��Ȥ���Ȥ�������������ޤä����ȤǤ⤢��Τǡ������̤β���⺣�彤������Ƥ����Ȼפ��ޤ���

��ư��®��

���󥿥ץ꥿�ε�ư��®�����񤷤�����ʤΤǤ������ºݤΥ��ץꥱ�������ε�ư�ǤϤ��β�������ɴ�ܤλ��֤����饤�֥��Υ����ɤ˾��񤵤�Ƥ��ޤ���

����⥸�塼��� import ���Ƥ⡢���Υ⥸�塼��������ε�ǽ��Ȥ��櫓�ǤϤ���ޤ��󡣤��Υ⥸�塼�����ǡ����ޤ�������٤��⤯�ʤ��Ȼפ���ؿ��Ǥ����Ȥ����¸�ط��ϡ��⥸�塼�����Ƭ�ǤϤʤ����δؿ��� import ���뤳�Ȥǡ����ץꥱ�������ε�ư���֤򸺤餹���Ȥ��Ǥ��뤫�⤷��ޤ���

�����ǡ������ PEP 8 ��ȿ�����Τ���ͳ����åȤ����ä����ȿ���Ƥ��ɤ��Ǥ��ˤǤ��������δؿ��μ¹Ի��֤ϼ㴳�٤��ʤäƤ��ޤ��ޤ��������顢�������٤����ʤ������Ĥ����������٤���٤� import ���Ť��⥸�塼��˹ʤäƽ񤭴������ʤ�Ǥ��ޤ���

argparse ��ľ�ܡ�����Ū�� import ���Ƥ���⥸�塼�뤬���餵��ޤ�����(�ޡ����Ѥ�) https://github.com/python/cpython/pull/1269

functools �� singledispatch �Ǥ����Ȥ��ʤ��⥸�塼��� singledispatch ��˰�ư���ޤ��� (accept�Ԥ�) https://github.com/python/cpython/pull/3757

uuid �⥸�塼�뤬�� uuid1 �Τ���� libuuid �� UuidCreateSequential ������ɤ���������Ť��ΤǤ�����ٱ䤹����ơ�(���줫���ӥ塼���ޤ�)

https://github.com/python/cpython/pull/3684

�ޤ����Ť� import �򸫤Ĥ��뤿��˻䤬��������ǻȤäƤ��� import �˳ݤ�����֤�ɽ������ѥå��򡢤���Ǥ���ä˥饤�֥���ե졼�����κ�Ԥ��˴�ñ�˻Ȥ���褦�� -X importtime ���ץ����Ȥ�����Ƥ��Ƥ��ޤ������Ϥ��ν��ϥե����ޥåȤˤĤ��Ƽ�ž���֤���ε����򤷤Ƥ��ޤ��� https://github.com/python/cpython/pull/3490

;�̤Ǥ������δ��Ĥ��Υ����ɥѡ��ƥ����饤�֥��� import ���֤�Ĵ�٤Ƶ錄�ꡢ Jinja2 �� import ���������٤����Ȥ˵��Ť��ޤ�����

�¤Ϻ�ǯ�ΤϤ���˥�������̤���Ϥ��Ƥ����Ȥ����� Jinja2 �� Python 3 �Ǥϥ�˥����ɤΥ���ܥ��ʥƥ�ץ졼�ȥ��󥸥�����ѿ�̾�Ȥ��ơ˻Ȥ���褦�ˤ��褦�ȡ�����ܥ�̾�Ȥ���ͭ����̾����ɽ����������ɽ���򤫤ʤ궯������ˡ�Ǻ�äƤ����Τ򸫤Ĥ�����𤷤Ƥ����ΤǤ�������������ɽ���Υ���ѥ��뤬 import ���˼¹Ԥ���Ƥ����٤��ä��ΤǤ���

���Ǥ� Jinja2 �γ�ȯ�֥����ǤϤ��ä��ɤ��������ڤ��ؤ�äƤ���Τǡ����� Jinja2 �Υ�꡼����ڤ��ߤˤ��Ƥ��ޤ���

songofacandy at 18:52���������URL��Comments(0)
2017ǯ09��01��

�Ƕ��Python-dev(2017-08)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

https://docs.python.org/ja/3/

docs.python.org �˸��쥹���å��Υɥ��åץ�����ꥹ�Ȥ��ɲä���ޤ�����docs.python.org �� Fastly ��ȤäƤ���Τǡ� docs.python.jp �����®�˱����Ǥ���Ȼפ��ޤ���

docs.python.jp �ˤ��륻�������ñ�̤ǤαѸ�ɥ�����ȤؤΥ�󥯵�ǽ�ʤɤ��ޤ��ʤ���ñ��������Ǥ���̵���Τǡ������ˤ� docs.python.jp ��ߤ��Ĥ��Ϥ���ޤ��󤬡�����Ū�ˤ� docs.python.jp �� docs.python.org/ja/ �˥�����쥯�Ȥ��뤳�Ȥ�ͤ��Ƥ��ޤ���

PEP 550: Execution Context

Flask �ʤɤΥե졼�����Ǥϥ���åɥ������륹�ȥ졼�������Ѥ��ơ֥���ƥ����ȡפ��ꡢ���ߤΥ桼�����ξ���Ȥ��ꥯ������ID�Ȥ��򤽤��˳�Ǽ�����������ޤ��������� asyncio �ʤɤΥ��롼����ǤϤ��줬�Ȥ��ޤ���

�����ǡ���äȹ��٤���ݲ����줿������ƥ������ѿ��򰷤�����λ��Ȥߤ���Ƥ���Ƥ��ޤ���

Hide implementation details in the C API

�����ɥѡ��ƥ����γ�ĥ�⥸�塼�뤬���Ѥ��Ƥ��� Python/C API ���� Stable ABI �ʳ��ϸ�������������ޥ�����C�ؿ����������äƤ��ơ� Cython �ʤ󤫤������API���Ѷ�Ū�˻Ȥä���ǽ��Ԥ����ꤷ�Ƥ��ޤ���

�����Υǥ��åȤȤ��ơ� Stable ABI �ϻȤ��ˤ����Τ�;��Ȥ��Ƥ��ʤ��Τ��Ф��ơ� API �ϻ����Ȥ��Ƥ���¾�� Python ������ Python/C API �ߴ��� API ���󶡤���ϡ��ɥ뤬�⤯�ʤäƤ��ޤäƤ����ꡢ�տޤ����˼����ܺ٤˰�¸���������ɥѡ��ƥ����Υ饤�֥�꤬�����ƾ������ǽ����Τ���������������ʽ񤭴����򤹤���˸ߴ��������꤬�������Ψ�������Ƥ��ޤäƤ��ޤ���

�����ǡ� Stable ABI �� #include <Python.h> �δ֤����롢�������줿 Python/C API ���Ѱդ��褦�Ȥ�����Ƥ�����Ƥ��ޤ���

�Ŀ�Ū�ˤϡ�����ˤ�äƺ��ޤǥޥ������ä�API��C����δؿ��ˤʤꡢRust��Go�ʤ�C����ʳ��θ��줫�� Python/C API ��ƤӽФ��䤹���ʤ뤳�Ȥ˴��Ԥ��Ƥ��ޤ���

PEP 539: A new C API for Thread-Local Storage in CPython

Python �� TLS �Τ���� C API �� pthread_key_t ���90ǯ�夫��� int ���˥��㥹�Ȥ��ƻȤäƤ���ΤǤ���������� posix ���ǤϤ���ޤ��󡣥᥸�㡼�ʴĶ��Ǥ�����ˤʤäƤ��ʤ��ΤǤ����� Cygwin �� CloudABI ������ˤʤäƤ��������Ǥ���

��������ABI��٥�θ����ߴ��������꤬���ꡢ��ñ���Ѥ��뤳�Ȥ�Ǥ��ޤ��󡣤Ȥ������Ȥǿ�����API����Ƥ���Ƥ����ΤǤ������Ƕ� Yamamoto Masayuki (ma8ma)�᤬���� PEP �˺Ƕ����Ȥ�Ǥ��Ƥ⤦����������褷�����Ǥ���

C��٥���ä� Python ����ϸ����ʤ��ΤǤ��������ܿͤγ�������Ǥ�����

songofacandy at 17:27���������URL��Comments(0)
2017ǯ06��29��

�Ƕ��Python-dev(2017-06)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

PEP 546 -- Backport ssl.MemoryBIO and ssl.SSLObject to Python 2.7

2014ǯ�� Python 2.7 �򥻥��奢�ʾ��֤��ݤĤ��ᡢ���� PEP 466 �ǥ������ƥ���Ϣ�� Python 3.4 �ε�ǽ�� Python 2.7 �˥Хå��ݡ��Ȥ���ޤ���������ˤ� ssl �⥸�塼���ޤޤ�Ƥ��ꡢ Python 2.7.9 ����� TLS �Υۥ��Ȥ�ư�Ǹ��ڤ���褦�ˤʤä��ꥷ���ƥ�ξ����񥹥ȥ������ѤǤ���褦�ˤʤ�ޤ�����

����� PEP 546 �ϡ������ Python 3.5 ���ɲä��줿 ssl.MemoryBIO �� ssl.SSLObject �� Python 2.7 �˥Хå��ݡ��Ȥ����ΤǤ��������� API �����Ѥ���ȡ� socket ���åפ���ΤǤϤʤ��������Υǡ������Ф��� TLS �ν������Ǥ���褦�ˤʤ�ޤ��� Windows �� winsock2 �ǤϤʤ� IOCP ��Ȥä��ꡢ����¾��Ʊ��IO�ե졼������Ȥ��Ȥ��� socket �� TLS ��ʬΥ�Ǥ��뤳�ȤϽ��פǤ���

Python 2.7 ���ΤΥ��Ƥ� 2020 ǯ�˽�λ���ޤ����� pip �� Python 2.7 �Υ��ݡ��Ȥ�λ���������̤��Ǥ����ºݤ˺��ޤǤ⡢pip �ϥ桼�������ۤȤ�ɥ����ˤʤ�ޤǤ��ʤ�Ĺ���ָŤ� Python �򥵥ݡ��Ȥ��Ƥ��ޤ�����

������ pip �� http ���饤����ȤȤ��ƻȤäƤ��� requests �ϡ�������������Ʊ��IO�١����ˤ��Ƥ������Ȥ�Ƥ���Ƥ��ޤ��������� Python 2.7 �Τ��������ʣ���μ�������ƥʥ󥹤��뤳�Ȥˤ�����Ū�Ǥ���

PEP 546 �ˤ�ꡢ pip �� requests �� Python 2.7 �Υ��ݡ��Ȥ������ڤ����Ǥ⡢(��ǯ��Ⱦ�˥�꡼�������) 2.7.14 �ʹߤΤߤΥ��ݡ��Ȥ˸��ꤹ��Ȥ������� requests ����������Ʊ��IO����¸�����;�Ϥ��Ǥ��ޤ���

�ºݤˤ��Υ��ʥꥪ�̤�˿ʤޤʤ���ǽ���⤢�ä��Τǡ�������ɬ�פʤΤ��ɤ�����������Ǯ���ޤ��������Хå��ݡ��Ȥ���Ƥ���Ƥ��륳���ɤΥ�������C��Python��­���Ƥۤ�ο�ɴ�ԤǤ�������ޤ���

�ǽ�Ū�� Python 2.7 �Υ�꡼���ޥ͡����㡼�� Benjamin Peterson ���󤬡� PEP 466 �ΤȤ��ˤ���API�����ä�����˥Хå��ݡ��Ȥ���Ƥ��������ȿ�Ф��붯����ͳ��̵����͡��Ȥ��ä� Accept ���ޤ�����

PEP 538 warning at startup: please remove it

����ͤ� Accept ���� PEP 538 (C locale �ΤȤ� LC_COLLATE �� C.UTF-8 �ʤɤ˾�񤭤���) ��������������ޤ�ޤ�����

���ơ����ο���ǽ�ϡ� locale ���ѹ������������Ȥ��ˤϥ桼�����˺ǽ餫��UTF-8�Υ�����������ꤹ��褦¥������� warning �򡢼��Ԥ����Ȥ��� C locale ��ȤäƤ뤫����ASCIIʸ�������꤬�Ф��Ȥ��� warning ��ɽ�����Ƥ��ޤ�����

������������ warning ��ñ���ݵƫ�����Τȡ��ҥץ�������ư����ɸ�������Ϥ򸫤�褦�ʥƥ��Ȥ����Ĥ��Υޥ��ʡ��ʥץ�åȥե�����Dz���Ƥ��ޤäƥ��Ƥ����ݤˤʤäƤ��ޤ�����

�Ȥ������Ȥǡ��ɤ���� warning ��ǥե���Ȥ�̵���ˤʤ�ޤ������Ķ��ѿ��� PYTHONCOERCECLOCALE=warn �����ꤷ����ͭ���ˤʤ�ΤǤ������ޤ�ï��Ȥ�ʤ��Ǥ��礦�͡�

LC_COLLATE ���ѹ����� UTF-8 ��Ȥ���褦�ˤ��Ƥ�����ˤʤ뤳�ȤϤ�ä���̵���Ǥ����� C locale ����ASCIIʸ���ΰ��������¤�����Τ� Python 3.6 ��Ʊ���Dz����������ʤä��櫓��̵���Τǡ� warning ��̵���ʤ뤳�ȤǺ���桼�����ϤۤȤ�ɵ�ʤ���Ƨ��Ǥ��ޤ���

PEP 544 -- Protocols: Structural subtyping (static duck typing)

Python �� typing �⥸�塼��� structural subtyping �Υ��ݡ��Ȥ��ɲä���ޤ�����

��ñ����������ȡ� typing.Protocol ���饹��Ѿ��������饹���������ȡ����줬�ץ��ȥ���ˤʤ�ޤ����ץ��ȥ��륯�饹�Υ᥽�åɤ�Ʊ�������ͥ���Υ᥽�åɤ���ĥ��饹�ϡ����Υץ��ȥ��륯�饹��Ѿ����Ƥ��ʤ��Ƥ⡢��Ū�����å��ϥ��֥��饹��Ƚ�Ǥ���褦�ˤʤ�ޤ���

PEP ����ʬ����䤹�������Ѥ��ޤ���������ϡ��桼��������� Bucket �� Sized �� Iterable ���ȷ������å��˶����뤿��˷Ѿ���ȤäƤ��ޤ���

from typing import Sized, Iterable, Iterator

class Bucket(Sized, Iterable[int]):
    ...
    def __len__(self) -> int: ...
    def __iter__(self) -> Iterator[int]: ...

PEP 544 ����ǧ�����ȡ� Sized �� Iterable �� Protocol �ˤʤ�Τǡ����� Bucket �ϷѾ��򳰤��Ƥ� Sized �� Iterable[int] ����ʬ�����ȷ������å���Ƚ�Ǥ���褦�ˤʤ�ޤ���

�Ŀ�Ū�ˤϡ� ABC ��Ѿ�����ȵ�ư���٤��ʤ�ʥ��饹���������٤��ʤ�ˤΤǷѾ����ʤ��Ƥ��ɤ��ʤ�Τϴ򤷤��������ǽ餫�� typing �� ABC ��Ȥ�ʤ��Ǥ��Ƥ��줿���äȷ��̲��Ǥ����Τˤʡ��Ȥ����������⤢��ޤ���

typing �Υ����С��إåɤˤĤ��Ƥ����� Language Summit �Ǥ�����ˤʤä��餷����ML�ʤɤǤ��������Ƥ���Τǡ����줫���Ŭ�����ץ����Ǻ��ʤɤβ�������Ƥ���뤫�⤷��ޤ���

��ư��®��

3���ǾҲ𤷤��ΤǤ�����Python�ε�ư���®�����뤿��Υץ�ꥯ�����Ȥ�2��Ф��Ƥ��ơ����� ��3����˥ޡ������졢�⤦���� �������ޡ������ޤ������ä˸�Ԥ� macOS ��Ǥ���ǽ���夬�����ǡ����꡼�󥤥󥹥ȡ��뤵�줿 Python �ǵ�ư���֤�30ms���餤���ä��Τ�20ms���餤�˸���ޤ���

site �Ȥ����� (Python �� -S ���ץ�����Ȥ�ʤ��ä��Ȥ���) ��ư���ɤ߹��ޤ��⥸�塼�뤬���ꡢ���줬 sys.path �Ȥ����饤�֥��� import ����Ȥ���õ�����ʤɤ�������Ƥ��ޤ��� pip �Ȥ� apt-get �Ȥ��ǥ��󥹥ȡ��뤷���⥸�塼�뤬�����˻Ȥ���褦�ˤʤ�ΤϤ��� site �Τ������Ǥ���

���� site ���������Ĥ��Υǥ��쥯�ȥ�ξ�����ꤹ�뤿��� sysconfig �Ȥ��� Python �δĶ�����򽸤᤿�饤�֥����ɤ߹���Ǥ���ΤǤ��������줬���������Ť��Ǥ��������Ƥ���� macOS �ξ�硢 Framework ��Υǥ��쥯�ȥ�̾ ("Python" ���ä��� "Python3.7" ���ä���) ��Ĵ�٤뤿��� sysconfig ���� _sysconfigdata �Ȥ����� Makefile �� pyconfig.h �������̤��ѿ��򤫤����᤿ dict ����ĥ⥸�塼������Ѥ��Ƥ��ޤ�����

Framework ̾�� sys._framework ������� _sysconfigdata ��ɬ������ʤ���������� sysconfig ����ɬ�פʤ�������ʬ������ site ��˥��ԡ����뤳�Ȥǡ���ư���֤�û�̤����Ǥʤ��� mac �ξ���¿ʬ��ưľ��Υ�������̤�1MB���ٸ��äƤ��ޤ���

�ޤ��� site ����Υ⥸�塼��� import �򸺤餹���Ȥˤ���Ŭ���ϡ����Υ⥸�塼�뤬 functools �ߤ����ˤ褯�Ȥ����ΤǤ���з�ɥ��ץꥱ�������ε�ư���֤ˤϴ�Ϳ���ʤ�����¿���ΤǤ����� sysconfig ��Ȥ��Τ� site �ʳ��ˤ� pip �� distutils �ʤɤΥѥå������󥰴�Ϣ�Υġ����饤�֥������ʤΤǡ�����κ�Ŭ����¿���Υ��ץꥱ�������ε�ư���֡���������̤ˤ⤽�Τޤ޴�Ϳ����Ϥ��Ǥ���

songofacandy at 22:29���������URL��Comments(0)��TrackBack(0)
2017ǯ05��31��

�Ƕ��Python-dev (2017-05)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

PEP 545 -- Python Documentation Translations

3���ǾҲ𤷤��� Python ���������Ȥ������ɥ�����Ȥ�ۥ��Ȥ�����Ƥ���������ޤ�����

PHP �Υɥ�����ȤΤ褦�˸������ؤ�UI���Ѱդ���ơ����¿���οͤ������������줿�ɥ�����Ȥ˥��������Ǥ���褦�ˤ��Ƥ������Ȥ���ɸ�Ǥ���

docs.python.jp �Ǹ������Ƥ������ܸ����⡢���������ä��� docs.python.org �˰ܴɤ��Ƥ����Ĥ��Ǥ���

PEP 538 -- Coercing the legacy C locale to a UTF-8 based locale

1���ǾҲ𤷤� C locale �ˤ����� UTF-8 ��Ȥ��������ƤǤ��� PEP 538 �� PEP 540 �Ǥ������䤬 BDFL delegate �ˤʤꡢ�轵 PEP 538 ��������ޤ�����

BDFL �Ȥϸ�����ͤˤĤ��Ƥκǽ����긢����� Guido �Τ��ȤʤΤǤ������ºݤˤϤ��٤Ƥ� Guido �����Ƥ���櫓�ǤϤʤ���Ŭ�ڤʿͤ˰Ѿ�����뤳�Ȥ�¿��������� BDFL delegate �ȸƤ�Ǥ��ޤ���

��Ȥ�� PEP 538 �� 540 �ˤ��̤� BDFL delegate �������ΤǤ����������������֤����ʤ��ʤä��Ȥ������Ȥǡ� (PEP 538 �����Ԥ� PEP 540 �����ԤϤդ���Ȥ� Red Hat �οͤʤΤ�) Red Hat ��̵�ط��ʡ������˻��ä��Ƥ�������ASCIIʸ��������Ū�˻ȤäƤ��륳����ȯ�ԤȤ����򱩤���Ω���ޤ�����

PEP 540 �����ԤϤ��Ф餯�̤Τ��Ȥ�˻��������Ƥ���ΤǤ����� PEP 538 �����Ԥ� Nick Coghlan ����ϳ�ȯ�� PEP �򹹿�����Ƥ���Τǡ�����ĥ�äƥ�ӥ塼���ơ��轵���˼������ޤ�����

��ñ�� PEP 538 ��ư�����������ȡ� LC_CTYPE �� C �ΤȤ����Ķ��ѿ� LC_CTYPE �� C.UTF-8, C.utf8, UTF-8 ��3�Ĥ������ꤷ�Ƥ������ǽ�����Ѳ�ǽ���ä�����򤽤Τޤ޻Ȥ��Ȥ�����ΤǤ������������ Python �������Ѥ���¾�Υ饤�֥�� (readline �ʤ�) ��Ķ��ѿ�������Ѥ��ҥץ������Ǥ�ʤ�٤���Ӥ��� UTF-8 �����ѤǤ���褦�ˤʤ�ޤ���

�Ķ��ѿ����񤭤���Ȥ��ٹ𤵤�ޤ�������񤭤˼��Ԥ������� C locale �����Ѥ��Ƥ��뤳�Ȥ��Ф���ٹ𤬽��Ϥ���ޤ����ٹ��ä������ͤϡ� locale -a ���ޥ�ɤ����Ѳ�ǽ�ʥ��������Ĵ�٤ơ� LANG �� LC_CTYPE �� C.UTF-8 �� en_US.UTF-8 �ʤɤΥ�����������ꤷ�Ƥ��������� �ޤ����ɤ����Ƥ�ɤ����Ƥ� C locale ��Ȥ�������UTF-8��Ȥ������ʤ��ͤϡ� LC_ALL=C �����ꤹ��С� C locale �����ѤǤ��ޤ���

�Ť� Linux ���� C.UTF-8 �������뤬���ѤǤ����� LANG=en_US.UTF-8 �� LANG=ja_JP.UTF-8 ���Ƥ��ޤ��� LC_COLLATE �ʤɤ�ƶ�������� sort ���ޥ�ɤʤɤ�ư��Ѥ�äƤ��ޤ��ޤ����� LC_CTYPE �ϥ��󥳡��ǥ��󥰤λ���˻Ȥ��륫�ƥ���ʤΤǡ� LC_CTYPE=ja_JP.UTF-8 �ʤɤ��Ѥ����ꤷ�Ƥ� man �����ܸ�ǥޥ˥奢���ɽ�������� sort ���٤��ʤä��� ls �ν�����Ѥ�ä���Ȥ��ä� C locale �桼���������������Ѥ�ȼ�鷺�ˡ� Python, readline, vim �ʤɤ� UTF-8 �����ѤǤ���褦�ˤʤ�ޤ���

[Python-Dev] Is adding support for os.PathLike an enhancement or bugfix?

Python 3.6 �� os.PathLike �Ȥ������󥿡��ե��������ɲä���� pathlib �����äȻȤ��䤹���ʤä��ΤǤ�����ɸ��饤�֥���API����ˤϤޤ�������б����Ƥ��ʤ��ƥѥ���ʸ������Ϥ��ʤ��Ȥ����ʤ���Τ������餫�ĤäƤ��ޤ���

�̾ 3.6.x �ǤϥХ������Τߤ�ԤäƵ�ǽ�ɲä� 3.7 �ˤʤ�ΤǤ����� PathLike ���ݡ��Ȥ��ɲä� 3.6.x ������Ƥ������ɤ����ˤĤ�������ˤʤ�ޤ����������Ȥ��Ƥϡ��������Х��������� x ���������֤Ϥ����餫 3.7 ����Хå��ݡ��Ȥ���뤳�Ȥˤʤ�ޤ���

PEP 484 (static type hinting) ���

PEP 484 update proposal: annotating decorated declarations

�ؿ��˥ǥ��졼����Ŭ�Ѥ���ȡ������ͥ��㤬�Ѥ���������ޤ���

# �ǥ��졼�ȸ�η��� Callable[[str], ContextManager[DatabaseSession]]
@contextmanager
def session(url: str) -> Iterator[DatabaseSession]:
    s = DatabaseSession(url)
    try:
        yield s
    finally:
        s.close()

���ΤȤ����ǥ��졼�����Τ� type hint ���񤫤�Ƥ����顢��Ū�����å����ϥǥ��졼�Ȥ��줿��η���Ƴ�ФǤ��ޤ���������������񤯤Τϥץ���������Ū�����Τ�������ǤϤʤ����ʹ֤ؤΥɥ�����ȤȤ���¦�̤⤢��ޤ���

Ƴ�и�η���������뤿�����ˡ���ɲä��ơ������̷�⤬�ʤ����Ȥ���Ū�����å�������ǧ�Ǥ���褦�ˤ��褦�Ȥ������Ȥǡ����Τ���ι�ʸ��API��������Ǥ���

PEP 484 proposal: don't default to Optional if argument default is None

���� PEP 484 �Ǥϡ�def handle_employee(e: Employee = None): �Τ褦�˥ǥե�����ͤ� None ��ȤäƤ����硢 e �η��ϰ���Ū�� Optional[Employee] �ˤʤ�ޤ��� ���ξ�ά��ˡ��¾�Ȱ�������ʤ��ʤɤ���ͳ�Ǥ��褦�Ȥ������Ȥˤʤ�ޤ�����

�����׿��������Ƥ��ޤ��ΤǤ��������������Ū�� Optional[Employee] �Ƚ񤫤ʤ���Фʤ�ޤ���

����Ū�ʴ�ά��ˡ�� ����Ƶ��� ����뤳�Ȥˤʤꤽ���Ǥ���

PyCon US

PyCon US �����Ť���ޤ����� YouTube�Υ����ͥ��Ǥ��������ư��򸫤뤳�Ȥ��Ǥ��ޤ���

��ϥꥹ�˥󥰤�����DZѸ��ȯɽ�Ϥ��ޤ�����Ǥ��ʤ��ΤǤ����� YouTube �ǻ���򥪥�ˤ���Ȼ��뤬�ְ㤦��ʬ�ʼ�ˤ���ȯɽ�˴ؤ������̤�ñ��ˤȼ�ʬ��ʹ�����ʤ���ʬ�����ޤ꤫�֤�ʤ��Τǡ��ꥹ�˥󥰤η����򤷤ʤ���ȯɽ�򸫤뤳�Ȥ��Ǥ���Τǥ�������Ǥ���

�ޤ��� Language Summit �Ȥ�����������ȯ�Ԥ��濴�˾��Ԥ��줿�ͤ��������ޤ륤�٥�Ȥ� PyCon ����ǹԤ��ޤ����� ���Υ��٥�Ȥ������ LWN.net �DZ������뤳�Ȥ��Ǥ��ޤ�����6/2�ޤǤϥ��֥�����ץ����ɬ�ס�

�㤨�С������ Python 2 ��̿���ˤĤ��ơֺǸ�� Python 2.7 ���꡼���������� EOL�פȽ񤤤��Ф���ʤΤǤ�������ħ�Ȥ�������ɸ�Ȥʤ����դȤ��� 2020ǯ�� PyCon US �Ȥ������Ȥˤʤ�ޤ�����

�ޤ��� CPython ���¤���� GIL ��������¸�Ū�ʥץ��������� "Gilectomy" �ˤĤ��Ƥθ�������Ԥ��ޤ�����

songofacandy at 21:12���������URL��Comments(0)��TrackBack(0)
2017ǯ04��17��

�Ƕ��Python-dev(2017-04)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

NEWS (changelog) ����

Mercurial���夫��NEWS�ե����� (changelog) �ΰ��������ݤ��ä��ΤǤ�����Github�˰ܹԤ������ȤǤ�ꥳ��եꥯ�Ȥ�������䤹���ʤ����ݤ�����֤�������ޤ����� �ޤ�������եꥯ�Ȥ����˴ְ�ä����֤ǥޡ��������Ȥ������ʤ���̿Ū�ʻ��Τⵯ���äƤ��ޤäƤ��ޤ��� (����ե����� cherry-pick �ˤʤä�����˥ޡ����������򤬹�θ����ʤ��ʤä��Τ�������Ȥ�Mercurial����Git�������ޡ������Х��ʤΤ����ܺ٤��İ����Ƥޤ���)

����ǡ�1�Ĥ��礭��NEWS�ե�����˥���ȥ���ɵ����Ƥ�������ˡ�1�ĤΥ���ȥ������ޤྮ�����ե�������ɲä��Ƥ������ġ���Ǥ����Υե����뤫��NEWS�ե����������������ȤߤؤΰܹԤ���̳�Ȥʤꡢ�ġ��������Τ���˥���ڤ��Ԥ��ޤ�����

Generate Misc/NEWS from individual files

����ڤ˻��ä����Τ� reno, towncrier, blurb ��3�ĤǤ���

reno �� OpenStack �ǻȤ��Ƥ���ġ���ǡ�����ȥ�ե�����Υե����ޥåȤ�Yaml���ä���Ȥ���äȥ���������ޤ���

towncrier ���¸�Υġ���ǡ��ե�����γ�ĥ�Ҥ�ǥ��쥯�ȥ�̾��ɬ�פʥ᥿�ǡ��� (��ǽ�ɲä��Х��ե��å������ѥե����ޥ󥹸��夫�ʤ�) ��ɽ������Τǥե��������ȤϤ����Υƥ����Ȥˤʤ�ޤ����ޤ�����������ȥ���ɲä���Τ˥��ޥ�ɤ�Ȥ鷺����˥ե�������ɲä�������ǺѤ�Τ�̥�ϤǤ���NEWS��ӥ�ɤ���Ȥ��� towncrier ��ɬ�פȤ����ΤΡ��׸��Ԥ� towncrier �����Ѥ����˺Ѥफ��Ǥ���

blurb �� Python �Τ���˿����˺��줿�ġ���ǡ� towncrier �� reno �δ֤��餤�Ǥ��� �ǽ�Ū�ˡ� Python �� NEWS �����ɤ����Ƥ�������ˤ��ȼ��Υġ������ƥʥ󥹤�����ͤ�����Ȥ���Ƚ�Ǥ� blurb �����Ф�ޤ�����

PyCon US �ޤǤ˰ܹԤ�λ���������ɸ�ˡ� NEWS����ȥ�ν��������������ɤ��Τǻ������˥����Ȥ��뤿��� reST �Υ����ȷ����ǥ᥿�ǡ����������ʤɡ�������ͤ�Ƥ���Ȥ����Ǥ���

�ץ�ꥯ�����ȤΥ֥����� push --force(-with-lease) �򤹤�Τ���褦

git �� commit --amend �� rebase -i origin/master �������ʿͤ��ޤ���͡��ͤ⹥���Ǥ����Ǥ⡢��ͤ������Ƥ��ʤ��֥����ϤȤ⤫�����ץ�ꥯ�����Ȥ�Ф��Ƥ���֥����� push -f ��ɬ�פ����򤹤�Ȥ��Ϥ褯�ͤ��ޤ��礦��

���Υץ�ꥯ������ ��Ф����ͤ�����ӥ塼�ǻ�Ŧ���줿��ʬ���������Τˤ��θ�ʤ��ʤ���ӥ塼���Ƥ�館�ʤ���ML�ǥ�ӥ塼������ä��ΤǤ������ǽ�˥�ӥ塼�����ͤ���Ŧ���ब������ľ�äƤ�Τ� Github �ǥ�ӥ塼����Τ����ݤ������󤷤ˤ��Ƥ�������쥹���ơ� push -f ����侩�ˤ��褦�Ȥ����äˤʤ�ޤ�����

����å�: Regarding reviewing test cases written for tabnanny module

Github �ܹ����ˤ� Rietvelt ��ȤäƤ����ΤǤ����������ǤϹ׸��Ԥ��������ѥå��򥢥åץ����ɤ����Ȥ�����ӥ塼���ϥѥå����Τ��ӥ塼���뤳�Ȥ⡢���ΥС������Υѥå��Ȥκ�ʬ�������ӥ塼���뤳�Ȥ�Ǥ��ޤ�����

Github ��ץ�ꥯ�����Ȥ� diff ���̤� "Changes from -- Show changes since your last review" �����򤹤�С������ӥ塼�������ߥåȤȥץ�ꥯ�����Ȥκǿ��Υ��ߥåȤκ�ʬ���ӥ塼���뤳�Ȥ��Ǥ��ޤ����Ǥ�������Υץ�ꥯ�����Ȥ����Ԥ� commit --amend �� rebase -i origin/master �ǥ��ߥåȤ�ޤȤ�Ƥ��ޤä��褦�ǡ����ε�ǽ���Ȥ��ʤ��ʤäƤ��ޤ��ޤ�����

python/cpython ��ݥ��ȥ�Ǥϥץ�ꥯ�����Ȥ�ޡ�������Ȥ������ѤǤ�����ˡ�� "Squash and merge" �����˸��ꤷ�Ƥ��ޤ����ʤΤǤɤ�����ץ�ꥯ������������򤬱����Ƥ⡢����ϥޡ�������Ȥ��˾ä���Τǵ��ˤ���ɬ�פϤ���ޤ��󡣰����� push --force ��ɬ�פ����ϡ���ӥ塼������ӥ塼���Ƥ������ߥåȤ�ä���;�פ���ô�����䤹����������ޤ���(����� push --force-with-lease ���ץ����Ǥ�Ʊ���Ǥ���)

���η�� Python �ˤ����餺 Github ��DZ��Ѥ���Ƥ��� OSS �˹׸���������٤Ƥ����ƤϤޤ��äǤ����ä� "Squash and merge" �䥳�ߥå�ñ�̤Υ�ӥ塼�ϵ�ǯ�о줷���Ф���ε�ǽ�ʤΤǡ�(���ޤ�)�Τ��� Github �˴���Ƥ���ͤ⤽�����ä���ǽ���Ȥ��ʤ��ʤ�ǥ��åȤˤ��ޤ굤�Ť��Ƥ��ʤ����⤷��ޤ��󡣻�� commit --amend �� rebase -i origin/master �򵤷ڤ˻ȤäƤ��ޤ������ä��Τǵ���Ĥ��ޤ���

Python 2 ��̿��

Exact date of Python 2 EOL?

Python 2 �� Python Core Developer �ˤ����ƥʥ󥹤� 2020 ǯ�ǽ�λ���ޤ����������� 2020 ǯ�β�������Ϸ����Ƥ��ޤ���

pythonclock.org �Ȥ��������Ȥ� Python 2 �� EOL ������ȥ����󤬤���Ƥ��ޤ������Ȥꤢ���� 4/1 �Ȳ��ꤷ�Ƥ��ޤ��� Python �γ�ȯ�Ը����Υɥ�����ȤǤ� 1/1 �� EOL date �ˤ��Ƥ��ޤ�����

�������դˤĤ��ƥ��ե�������ͽ��������ʤ����Ȥ������꤬�����夬�ä��ΤǤ����� Python 2.7 �Υ�꡼���ޥ͡����㡼�� Benjamin Peterson ���󤬺Ǹ�� Python 2.7 ���꡼���������� EOL �Ȥ������Ȥ���������դϷ����ޤ���Ǥ�����

PyCharm�ΥǥХå���40�ܹ�®��

PyCharm debugger became 40x faster on Python 3.6 thanks to PEP 523

PyCharm ������ Blog ���� ���� ML �ǾҲ𤵤�ޤ����� PyCharm 2017.1 & Python 3.6 �δĶ��ǥǥХå�������30��®���ʤä��褦�Ǥ���

Python ɸ��ΥǥХå� (pdb�Ȥ�����쥤�䡼��bdb) �ϡ� Python ���󶡤��Ƥ���ȥ졼���󥰵�ǽ��ȤäƤ��ޤ����������ԥ�����Хå����ƤФ�Ƥ�����ǥ֥졼���ݥ���Ȥ��ɤ�����Ƚ���ԤäƤ���Τǡ����ʤꥪ���С��إåɤ��礭���ʤ�ޤ���

���ơ�Python 3.6 ����Ω���ʤ�����ǽ�Ȥ��ơ��������� CPython �˥ѥå������Ƥ뤳�Ȥʤ� JIT ���ɲäǤ���褦�ˤ��뤳�Ȥ���Ū�ˤ��ơ��ե졼���ɾ������ؿ����֤���������褦��API���ɲä���ޤ���������� Microsoft �� Pyjion �Ȥ��� Python �� JIT ���ɲä���ץ��������Ȥ������ƤǤ���

PyCharm �Ϥ��ο���ǽ��Ȥ����֥졼���ݥ���Ȥ����ꤹ��Ȥ��˥Х��ȥ����ɤ������������ΥǥХå���ȯ���뤳�ȤǤ��Υ��ԡ��ɥ��åפ�¸������褦�Ǥ���

���������ɤ���� pdb ���٤����֤θ����ϥѥե����ޥ󥹤��礭���ƶ�������ʬ�� Python �ǽ񤫤�Ƥ��뤫��Τ褦�ǡ� trace �١����Τޤ������ʥ��ԡ��ɥ��åפ�¸����Ƥ��� pdb-clone �Ȥ����ץ��������Ȥ�ML�ǾҲ𤵤�Ƥ��ޤ�����

���Ƥ��������� API ����Ƥ��Ƥ��줿 Microsoft �ȡ�����API�����Ѥ�����®�ǥХå�����ѥ�٥�˻��äƤ��ä� JetBrains �ϥ��å���֤Ǥ���

Python 3.6.1 �ˤ�����Х��ʥ�ߴ�������

Python 3.6.1 �ǥӥ�ɤ�����ĥ�⥸�塼�뤬 3.6.0 �����ѤǤ��ʤ��Ȥ����ߴ��������꤬ȯ�����Ƥ��ޤ��ޤ�����

What version is an extension module binary compatible with

���ˤʤä��Τ� bpo-27867 �ǡ� __index__ �Ȥ����ü�᥽�åɤ��Ѥ��뤳�Ȥǥ����԰����ʥ����ɤ��񤱤�Ȥ�������Ǥ��� (Python �� ctypes ��Ȥ����ʤɤ���������̤ϥ�������ˤʤ�褦�ˤȤ����ؿˤdz�ȯ����Ƥ��ޤ���)

�������������������ǡ� PySlice_GetIndicesEx() �Ȥ�������API�μ����� _PySlice_Unpack(), _PySlice_AdjustIndices() �Ȥ�������API��ʬ�򤵤줿��ǡ� Py_LIMITED_API �Ȥ����ޥ������������Ƥ��ʤ��Ȥ��� PySlice_GetIndicesEx() �Ȥ���Ʊ̾�Υޥ�����API�ؿ���ʤ�äơ����Υޥ���������API��ľ�ܸƤ֤��ȤǸƤӽФ��Υ����С��إåɤ��︺�������ˤʤ�ޤ�����

�Ȥ����������� Py_LIMITED_API �Ȥ����ޥ��������� Python 3.4 �� 3.6 �Τ褦�ʥޥ��ʡ��С�����󤬰㤦 CPython �Ǹߴ����Τ���API, ABI�����Ѥ��뤿������Ѥ�����Τǡ�¿���Υ饤�֥��γ�ĥ�⥸�塼��Ϥ��Υޥ�����Ȥ鷺�� 3.6.0 �� 3.6.1 �Τ褦�ʥޥ������С������Ǥθߴ�������Ԥ��Ƥ��ޤ���

Python 3.6.1 �� PySlice_GetIndicesEx ��Ȥä���ĥ�⥸�塼���ӥ�ɤ���ȡ� 3.6.1 ���ɲä��줿 _PySlice_Unpack, _PySlice_AdjustIndices �򻲾Ȥ��Ƥ��ޤ��Τǡ� 3.6.0 �Ǥϥ����ɤǤ��ʤ��ʤäƤ��ޤ��ޤ���

binary wheel �����ۤ��Ƥ���饤�֥��γ�ȯ�Ԥϡ����̤��к��Ȥ��ơ����Τ褦�ˤ��ƥޥ����򥭥�󥻥뤹��� 3.6.0 �Ǥ� 3.6.1 �Ǥ�¸�ߤ���ؿ���ľ�ܸƤӽФ���Ϥ��Ǥ��� (�ޤ��� 3.6.0 �ǥӥ�ɤ���Ȥ�����⤢��ޤ�)

#ifdef PySlice_GetIndicesEx
#undef PySlice_GetIndicesEx
#endif

�ʤ����ޤ����1������Ȥ������Ȥ⤢�ꡢ���ΤȤ��� 3.6.2 �ζ۵ޥ�꡼��ͽ��Ϥ���ޤ���

Python 3.6 �� set �Υ��������̤Υꥰ��å����

Program uses twice as much memory in Python 3.6 than in Python 3.5

���륢�ץꥱ�������� Python 3.6 �Υ�������̤� 3.5 ��2�ܤˤʤ�Ȥ�����𤬤���ޤ����� 3.5 ���� ���꤬32GB �Υޥ�������̤˽����������� 3.6 ���ȥ���åפ�Ȥ������ƿ����ܻ��֤�������Ȥ����ΤǤ���

�Ƹ������ɤ� OpenCL �ʤ��ͤ����ѷи��Τʤ���¸�ط���¿�����Ƹ�����Τ�32GB��RAM��褻���ޥ���ɬ�פǡ�1��μ¹Ԥ�30ʬ�ʾ夫���ꡢ�����⥢�ץꥱ�������ϥ⥸�塼���ưŪ�����Ѥ�����ˤʤäƤ��ƥ��������פ�grep�ǥ��������ɤ��Τ����ݤȤ����������ä��Τǡ��ۤ�1�������������βս�����ꤷ�ޤ�����

���ʤߤˡ�����ޤ���ޤ��˥������Ĥ��뤿��˻Ȥä���ˡ�ϡ����Υץ������κǽ���̥���åɤ�ư�������Υ���åɤ�30�ä˰���������� (����� swap �������Τ� getrusage(2) �ǤϤʤ� /proc/self/status �� VmRSS �� VmSwap �򻲾Ȥ��ޤ���) �ȥ����å��ȥ졼����ɽ������Ȥ�����ΤǤ�������ǥ��ץꥱ�������ι������Ф���ͽ���μ����ۤܥ����ξ��֤Ǥ⡢�ץ������Τɤ���ʬ��¹Ԥ���Ȥ��ˤɤ줯�餤��������̤������Ƥ���Τ�����ޤ����İ����뤳�Ȥ��Ǥ��ޤ�����

��̤Ȥ��� �� set (�ޤ��� forzenset) �Υ��󥹥ȥ饯�������� set (�ޤ��� frozenset) ���Ϥ����Ȥ��ˡ����� set �Υ�������̤������Ƥ��ޤäƤ��뤳�Ȥ�ʬ����ޤ����� bpo-29949

set �Υ����ɤ���������Ȥ��˥ߥ������ꡢ set.add(x) �����Ǥ��ɲä���Ȥ��������ǵ�����ꥵ������set.add() �������֤��ƤФ���ǽ��������Τǡ��ϥå���ơ��֥뤬���ʤ�;͵���ä��礭���˥ꥵ��������ˤ�Ʊ���׻��� set �򥳥ԡ�����Ȥ������Ѥ���Ƥ��ޤ�����������̤��ۤ��ܤˤʤ�Ȥ����ꥰ��å����Ǥ��������Ǥ� 3.6 �֥����ǽ����ѤߤʤΤ� 3.6.2 ��ľ��Ϥ��Ǥ���

Python 3.6.1 (default, Mar 23 2017, 16:39:01)
[GCC 6.2.0 20161005] on linux
>>> import sys
>>> s = set(range(10))
>>> sys.getsizeof(s)
736
>>> t = set(s)
>>> sys.getsizeof(t)
1248  # Ʊ�� set �ʤΤ���1.7��!

æ���Ǥ���Ʀ�μ���Ҳ𤷤Ƥ����ޤ��� dict ��1����ȥ�� key �� value ��2�ͤ򵭲�����Τ��Ф��� set ��1����ȥ�1�ͤʤΤǡ�Ʊ�����ǿ��ʤ� set �������ʥ���ˤʤꤽ���˻פ��ޤ���͡��¤� Python 3.6 �Ǥϡʤ��Υꥰ��å�����ȴ���ˤ��Ƥ�˥�������̤ϵ�ž���Ƥ��ޤ���

>>> d = dict.fromkeys(range(10))
>>> sys.getsizeof(d)
368  # set(range(10)) ����٤�Ⱦʬ!

����ϼ��Τ褦����ͳ�Ǥ���

  1. �ϥå����ͤ�ϥå���ơ��֥�Υ���ȥ�˳�Ǽ���Ƥ���Τǡ� 1����ȥꤢ������礭������� 2 : 1 �ǤϤʤ� 3 : 2
  2. ������ compact orderd dict �����Ѥ���� dict �Υ�������̤��� 2/3 �ˤʤäƤ���Τǡ��ϥå���ơ��֥���礭����Ʊ���ʤ��������̤�Ʊ��
  3. ����� set ������ dict ������ϥå���ơ��֥�򥢥���å��֤��礭������Τǥ�������̤���ž����

�ϥå���ơ��֥�Υ������˴ؤ��� dict �� set �����ˤ��ۤʤ�Τˤ���ͳ������ޤ���dict ��̾�����֤Ȥ������Ѥ����ΤǸ������ҥåȤ��뤳�Ȥ�¿���Τ��Ф��� set �Ͻ���黻�Ȥ������Ѥ����Τǥߥ��ҥåȤ�¿���������ν����٤� dict ����⤯�ʤ�ޤ����ϥå���ơ��֥뤫��θ������ҥåȤ�����Ͼ��ͥ��������ʿ��Ĺ��Ⱦʬ��õ�������Ȥδ����ͤˤʤ�ޤ������ߥ��ҥåȤ���Ȥ��Ͼ��ͥ��������Ĺ���������ͤˤʤ�Τǡ����ä���ȸ����о��ͤΥ����Ȥ��ܤˤʤ�ΤǤ������Τ��ᡢ�����ͤ򸺤餽���� set �ϥϥå���ơ��֥�򥢥���å��֤��礭�����Ƥ���ΤǤ���

�ϥå���ơ��֥��̩�٤��㤤�Ȥ������Ȥϡ�compact ordered dict ��Ʊ����������Ѥ���оʥ��경�Ǥ���;�Ϥ��礭���Ȥ������ȤǤ⤢��ޤ����Ǥ���������Υꥰ��å����η�ǥꥰ��å����ʳ�����ʬ�ˤĤ��Ƥ�ϥå���ơ��֥�Υ������ΥХ�󥹤ˤĤ��Ƥ��줳��ո�����äơ�set���ͤ�Raymond����ˡֲ��ˤ�ä���ͤ�����֤򤯤�פ�ţ�򤵤���Ƥ��ޤä��Τǡ��ޤ�����������Ƥ��Ƥߤޤ���


@metahne

songofacandy at 19:53���������URL��Comments(0)��TrackBack(0)
2017ǯ03��16��

�Ƕ�� Python-dev (2017-03)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

Python 3.6.1rc1

Python 3.6.1rc1 ����꡼������ޤ������礭�����꤬�ʤ���� 3.6.1 �� 3/20 �˥�꡼�������ͽ��Ǥ���

3.6.1 �� Github �˰ܹԤ��Ƥ�����ƤΥ�꡼���ˤʤ�ޤ����ʤˤ����꤬�ʤ�����ǧ���뤿��ˡ����Ĥ��RC�ǰʾ�˥������������Х��ʥ����ξ��������ʪ�Υƥ��Ȥ�ɬ�פʤΤǡ���ǽ�����϶��Ϥ򤪴ꤤ���ޤ���

Github �ܹԸ�����

�ʹߤ���1����Ф��ޤ�������ȯ�Ԥ���Υե����ɥХå��Ϥ�����͹�ɾ�Ǥ�����ϡ����ڤ˥ץ�ꥯ�����Ȥ򤯤줿�ͤ�CLA�˥����󤷤ʤ��ޤ����֤������̤Υޡ����Ǥ��ʤ��ץ�ꥯ�����Ȥ����ޤ뤳�Ȥ��ǰ���Ƥ����ΤǤ��������ޤǤΤΤȤ������������פ����Ǥ���

������ Misc/NEWS �Ȥ��������� changelog �ˤ�����ե����뤬���ˤ˥���եꥯ�Ȥ򵯤����Ƥ��Ʋ�褹�뿷�ġ��뤬��ȯ����ä��ꡢ�ץ�ꥯ�����Ȥ�ޡ�������Ȥ��Υ��ߥåȥ����Υե����ޥåȤʤɤ��ä��礤�ǥ롼���ޤä����ɤޤ��ɥ�����Ȳ�����Ƥʤ��� Github �Υǥե���ȤΤޤޥޡ�������륱������¿���Ȥ����٤�������Ϥޤ��ޤ�³���Ƥ��ޤ���

�ޤ���Travis-CI �ǤΥƥ��Ȥ�ѥ����뤳�Ȥ�ޡ����ܥ���򲡤��Τ�ɬ�ܤ�����ˤ��Ƥ���ΤǤ��������줬�褯�ٱ䤹�����꤬����ޤ�������ñ�ʽ����ΥХå��ݡ��ȤǤ��������ԤäƤ��ʤ������� Travis-CI �� (���Ĥ��� Python ��Ϣ organization ��ͭ��) ����25job�������ƤƤ��äƤ��Ƥ���ʾ��˾��ʤ����ɤ줫�ƥ��Ȥ��������Ȥ����ä��礤�򤷤Ƥ����顢�֤�������25job�η���������ƥ��١��Ȥ��줿���顣�פȤ����񤭹��ߤ����ꡢ�ºݤ������ʹ� Travis-CI �Υƥ��Ȥϲ�Ŭ�ˤʤ�ޤ������ޤ������ƥ��١��Ȥ���Ƥʤ��ä��ʤ��ï���Τ�ʤ��ä���ĤȤϤ��� Travis-CI ����ˤ�100���δ��դ�

CPython 3.7 is now faster than CPython 2.7 on most benchmarks

������ʥ��ץ�򽸤᤿�٥���ޡ����� Python 2.7 �� 3.5 ����٤�����®���ʤäƤ�Τ��٤��ʤäƤ�Τ�Ⱦ�����餤���ä��ΤǤ����� Python 3.6 �䤽��ʹߤι�®���ˤ�äƤ������� Python 3 ������®���ȶ���ĥ�äƸ����봶���ˤʤäƤ��ޤ���������Ū�ˤ�10%�ʾ��٤��ʤä��٥����12����Ф��ơ�10%�ʾ�®���ʤä��٥����23�濫��ޤ���

���ʤߤ��٤��ʤäƤ�٥���Υȥå�2�� Python ���ޥ�ɤε�ư (`-S` ���ץ���󤢤�ʤ���2����) �Ǥ����㤨�� Python 2 �Ǥ��Ȥ߹��ߤ� open �ؿ��� C ����� FILE* ���åפ������֥������Ȥ��֤��Ƥ��ơ������� Python ���󥿥ץ꥿��Ǽ�������Ƥ����ΤǤ����� Python 3 �Ǥ� FILE* ���Ȥ��ʤ��ʤ������ io �⥸�塼�뤬���Ѥ����褦�ˤʤä����ᡢ��ư���� io �⥸�塼��Ȥ��ΰ�¸�⥸�塼�뤬����ݡ��Ȥ����褦�ˤʤäƤ���Τ��٤��ʤäƤ븶����1�ĤǤ���

��ư���٤��ʤä��ȸ��äƤ���ߥ��äǤ�������ư���˥���ݡ��Ȥ����⥸�塼����������٤��⤤�⥸�塼��ʤΤǡ� Python ���Τε�ư���٤��ʤäƤ��Ƥ� Python �ǽ񤫤줿���ץ�ε�ư���֤ˤϡʷ�ɥ��ץ꤬���Υ⥸�塼��򥤥�ݡ��Ȥ����ǽ�����⤤����ˡ˱ƶ����ʤ����Ȥ�¿���Ϥ��Ǥ���

�ȤϤ�����ư��1�ߥ��äǤ��ᤤ�˱ۤ������Ȥ�̵���Ǥ����������¤� vim �ץ饰�����ͭ̾������ Python �ε�ư�� (�ä� Lua ����٤�) �٤��ȶ��Ԥ򤳤ܤ��Ƥ���Τ� Twitter �Ǹ��뵡���褯���ä��Τǡ� ���ƥʥ󥹥����ȤȤΥХ�󥹤���줿�ϰϤǤκ�Ŭ�� �򤷤Ƥ���Ȥ����Ǥ���

PEP 543 -- A Unified TLS API for Python

Python �ˤ��Τ��� ssl �Ȥ���ɸ��饤�֥�꤬����ΤǤ���������� OpenSSL �� Python ����Ȥ�����Τ�ΤǤ���

�Ƕ�ϰ���TLS�ν������������Ƥ���ΤǤ����� Windows �ʤɤ� OpenSSL ��Х�ɥ뤷�����ۤ��Ƥ�Ķ��� OpenSSL �Υ������ƥ������åץǡ��Ȥ����ۤ���ɬ�פ��ФƤ��Ƥ��ޤ��ޤ��� macOS �Ǥ⡢ Apple �������ƥ�� OpenSSL �� deprecate ���Ƥ��ޤäƤ⤦�����ȥ��Ƥ��Ƥ���Ƥʤ��Τǡ� Windows ��Ʊ�����꤬ȯ�����Ƥ��ޤ��� (PyPI �� CDN �� fastly ��ȤäƤ���ط��ǡ� macOS �Υ����ƥ�� OpenSSL ���б����Ƥʤ� TLS v1.3 ��ɬ�ܤˤʤ�Ȥ������祤�٥�Ȥ�Ƕᤢ��ޤ�����)

OpenSSL ����� macOS �Ǥ� SecureTransport, Windows �Ǥ� SChannel ��Ȥ��С� OpenSSL �˰�¸�����ˡ� Apple �� Microsoft �����ƥʥ󥹤��Ƥ���Ƥ�������񥹥ȥ���TLS������Ȥ����Ȥ��Ǥ��ޤ����ޤ��Ƕ�� OpenSSL �ʳ��μ���Ū��TLS �����������Ƥ��Ƥ��ޤ��� OpenSSL �˰�¸�����˴�ñ�� TLS ��Ȥ���褦�ʻ��Ȥߤ������¿���οͤ������ˤʤ�ޤ���

������Ƥ��줿 PEP 543 �ϡ����ΤϤ���ΰ���Ȥ��ơ�TLS�Υ饤�֥�꤬��������٤�ɸ���API��������ơ� ssl �⥸�塼��ˤ��� API �����������Ȥ�����ΤǤ������줬�Ǥ���С�Ʊ��API�˽�򤷤� SChannel ���åפ���ʤɤ��̼����⥸�塼��� PyPI �����ۤ���TLS�����Ѥ���饤�֥��� ssl �ȥ����ɥѡ��ƥ��饤�֥��δ֤ǥ����å����䤹���ʤ�Ϥ��Ǥ���

��ƤϤ��줿��ΤΡ��ºݤ˼��������Ѥ��뤳�Ȥʤ�������ӥ塼���Ƶ����Ǥ���ͤ����ʤ��Τǡ��Ū�˼����������������ʤ��������Ф������ǿʤ�Ǥ���Ϥ��Ǥ���

¿ʬ���줬 Python 3.7 �ǰ��ֽ��פʿ���ǽ�ˤʤ�󤸤�ʤ����ʡ�

Translated Python documentation

Python �Υɥ�����Ȥ����������ֿʤ�Ǥ���Τ����ͤ⻲�ä��Ƥ������ܸ����ʸŤ� Python �� changelog �Ȥ���ĥ��񤯿ͤ���ɬ�פȤ��ʤ� Python/C API�Υɥ�����Ȥ������ޤ��85%�ʾ塪�ˤǡ������������ʤ�Ǥ���Τ��ե�󥹸������Ψ��10%������ɥ��塼�ȥꥢ��ϥ��С�����Ƥ���ˤǤ���

����ʥե�󥹸�������򤵤�Ƥ��� Julien Palard ���󤬡� docs.python.org/<lang>/ �۲��������ɥ�����Ȥ�����Ǥ���褦�ˤ������� ��ǯ python-ideas ML����Ƥ��Ƥ������ͤ������δ�������ư�ӥ�ɡ��ۥ��ƥ��󥰤ʤ󤫤β������̲������¾�θ���Ǥ��ä����������䤹���ʤ�������ʤȻפäƱ��礷�Ƥ��ޤ���

���ơ� Python �Υɥ�����Ȥ� Sphinx �Ȥ����ġ���ǹ��ۤ���Ƥ��ꡢ������ Sphinx �����ĵ�ǽ��ȤäƤ��ޤ�������Ū�ˤ� Sphinx ����ʸ��ѥ饰������ʬ���� gettext �� POT �����ǽ��Ϥ����ꡢ���Υѥ饰��դ��б���������ʸ�� mo �����Υե����뤫���ɤ߹���DZ�ʸ�Ⱥ����ؤ��뤳�Ȥǡ�¾�� gettext ��Ȥä�OSS��Ʊ���褦�ʼ����������Ǥ���褦�ˤʤäƤ��ޤ���

�ܲȤΥɥ�����ȤϤ�����󤳤ε�ǽ��Ȥ鷺�˹��ۤ���Ƥ���ΤǤ��������ε�ǽ��Ȥ������꤬�Ф���ʬ�����ꡢ���ܸ�ץ��������ȤǤ� fork �˽��������Ƥ����֤����Ѥ��Ƥ��ޤ������Ĥ��ν��������ܸ�ʳ��θ���������Ǥⶦ�̤���ɬ�פʤ�ΤǤ����Ȥ������Ȥ��ܲȤǽ�������ץ�ꥯ�����Ȥ��ä��ΤǤ������ɥ����������������Ū�ʥ��С����� Reject ����Ƥ��ޤ��ޤ������������θ� Victor Stinner ����(����1ǯ�Ǥϥ���ȥĤǥȥåפΥ��ߥå���) �� Accept ���Ƥ���ơ�������2��1�ˤʤ�ޤ�����

����ޡ����ܥ���򲡤��Ƥ⤤�������ǤϤ����ΤΡ��̤˵ޤ�ɬ�פϤʤ����ͻҸ������ä��֤����顢 Victor ���󤬤���ˡ�������ٱ礷�褦���פäƤ����᡼��� Python-Dev ����Ƥ��Ƥ��졢¿���λ�Ʊ�Υ쥹�������ޤ����� Victor ����ޥ��������

����ʤ���ʤǡ�����Υץ�ꥯ�����Ȥϥޡ������ޤ��������줫��� Julien ����ã�ȶ��Ϥ��ơ���ʩ�ʳ��� Python ���ߥ�˥ƥ��οͤ��������䤹�����Ȥߤ��äƤ�������ʤȻפ��ޤ���

���ʤߤˡ����� Python �Υɥ������������ Transifex �Ȥ��������� (OSS������̵���ץ�󤢤�) �ǹԤäƤ���ΤǤ���������Τ��Ȥ�ͤ��� Red Hat ����äƤ��� Zanata ���Ƥߤޤ����� Transifex �����äƤ�����פʵ�ǽ�Ϥۤܥ��С����Ƥ��뤷�� Transifex �ˤ�̵���С������ǽ������ʸ�ΥС�������������ʤ��ơ�Ʊ���ץ��������Ȥθ�ʸ��ʣ���С��������Ƥ�ˤ����ä��ꡢ���ݡ��ȤΥ쥹�ݥ󥹤⤹�����᤯���ɤ��ä��Ǥ��� �ޤ��� gettext ���η����ǤϤʤ� Web �����Ȥ� WYSIWYG ����������ʤ顢 Mozilla �� Pontoon ���ɤ������Ǥ����� ���� OSS �������ץ��������Ȥ�Ϥ�褦�Ȥ���Ƥ������ϻ��ͤˤ��Ƥ���������


@methane
songofacandy at 18:40���������URL��Comments(0)��TrackBack(0)
2017ǯ02��16��

�Ƕ�� Python-dev (2017-02)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�Хå��ʥ�С�:

������������ȯ��

��˥ɥ�����Ȥβ����ˤĤ��Ʒ�³Ū�˳�ư����Ƥ��뤳�Ȥ�ɾ������ơ� Mariatta ���󤬥�����ȯ�Ԥ˲ä��ޤ�����

�ͤ��礭�ʥѥå�����Ω�äƥ�����ȯ�ԤˤʤäƤ��ޤä��Τǡ�����Blog���ɼԤ˴ְ�ä����ݤ�Ϳ���Ƥ��ޤ�ʤ��褦�˶�Ĵ���Ƥ��������ΤǤ�����������ȯ�Ԥ˽��פʤΤ�¾�Υ�����ȯ�Ԥȶ�Ĵ���ƥ롼����äƹ׸����뤳�ȤǤ���

��������ñ�ʽ�����¾�ͤ� pull request �Υ�ӥ塼�ʤɤǤ⡢��³Ū�˥�����ȯ�ԤȤ��Ȥꤹ�뵡�񤬤���С��빽��ñ�˥�����ȯ�Ԥˤʤ��Ϥ��Ǥ��� ��Ҥ��� Github �ܹԤˤ�ä��ߵ郎�����ä��Ϥ��ʤΤǡ����ε������ɤ�Ǥ������äƤ������⤼�����äƤߤƤ���������

Github �ܹ�

2/11 (����ꥫ���֤ʤΤ����ܤǤ�2/12)�ˡ�Python �Υ�ݥ��ȥ꤬ https://github.com/python/cpython �˰ܹԤ��ޤ�����

������ mercurial �����Ѥ��Ƥ����Τǥ�ݥ��ȥ���Ѵ���ɬ�פˤʤ�ΤǤ��������� python/cpython �ˤ��ä��ߥ顼�Ȥ���ʪ�ǥ��ߥåȤΥϥå��夬�Ѥ�ä��Τǡ��ߥ顼�����Ѥ��Ƥ����ͤ����դ�ɬ�פǤ��� �ߥ顼��ݥ��ȥ�� python/cpython-mirror �˰�ư���ޤ�����������������뤫�⤷��ޤ���

���ޤǥ��ߥåȥ����� "Issue #12345: " �ǻϤޤäƤ����ΤǤ��������� #12345 �Ͼ��� Github �ˤ����ֹ�Υץ�ꥯ�����Ȥ�����Ƥ��󥯤���ʤ��餷���Ǥ��� Github ���餤�Ǥ��͡� ����Υ��ߥåȤǤ� bugs.python.org �� issue �򻲾Ȥ���Ȥ��� "bpo-12345" �Τ褦�˽񤯤��Ȥˤʤ�ޤ��� Github �� pull request �򻲾Ȥ���Ȥ��� #1234 �ǤϤʤ� GH-1234 ���侩����ޤ����ʤ���Ǥ������ Github �Ǽ�ư��󥯤���ޤ���

�ȡ������ޤǤ��ɤ���Ǥ����� issue �ȥ�å����� Github �����֤��Ƥ�¾�Υץ��������Ȥηи��Ԥ�Greasemonkey�Ȥä� bpo-12345 ���󥯲�����褦�ˤ������������衼���Ȥ������꤬ȯŸ���ơ���ݥ��ȥ��Ѵ����˲��Υ��ߥåȥ����� (Issue|issue) #12345 �� bpo-12345 ���Ѵ����褦�Ȥ����ä��ޥ����졼�����η�Կ�����������夬�äƤ��ޤ��ޤ�����

�ͤ�ľ���ˤ�����ѹ������ΤϤ��ꤨ�ʤ��Ȼפäƥ��ߥåȥ����񤭴����ˤ� -1 ���Ƥ��ΤǤ������ºݤ˥��ߥåȥ�����񤭴������Ѵ�������ݥ��ȥ�򸫤����̵꤬���������å����Ϥ��᤿�ꤷ�������ޤǤɤ��ʤ뤫ʬ����ʤ������Ǥ����� �ǽ�Ū�ˤϡ����ߥåȥ����Ϥ�������Υ��ߥå����Τ�Τǡ��ۤ��2,3���ε��������ǡ������˻��äǤ��ʤ��ä����ߥå�����̵�뤷�ƾ���˽񤭴������ɤ�ʪ�ǤϤʤ��Ȥ��������ˤʤäơ������ͽ���̤ꥳ�ߥåȥ����񤭴����ϥʥ��ˤʤ�ޤ�����

�ޤ��ޤ���������¿�����ޥ����졼������˳�ȯ�����ͽ��ˤʤäƤ��� bot ���ޤ��Ǥ��Ƥʤ��ΤǺ��Ū�ˤϺ��ޤǤ��ڤˤʤä����Ϥ��ʤ��ΤǤ�������ȯ�˻��ä����ߵ�ϳμ¤˲����äƤ��� pull request �򤷤� Contributer Agreement �˥����󤷤Ƥ����ͤ��������󤤤�Τǡ����줫�鿷����������ȯ�Ԥ������뤳�Ȥ˴��Ԥ��Ƥ��ޤ���

siphash-1-3

�Ƕ��ruby-core (2017ǯ1��) ���ɤ�� siphash-1-3 �ˤĤ����Τꡢ Python �ˤ� ��Ƥ��Ƥߤޤ�����

��ö���� siphash-2-4 �򤽤Τޤ޽񤭴�����ѥå����ꤲ���ΤǤ����� configure ��������Ǥ���褦�ˤ��Ƥ��줿�ͤ������Τǡ����Ϥ��οͤ� pull request ���äƤ����Τ��ԤäƤ��ޤ���

�ѥե����ޥ󥹤ؤαƶ��Ǥ����� Python ��ʸ���󥪥֥������Ȥ� immutable �ǥϥå����ͤϰ��ٷ׻������ȥ��֥������Ȥ���˥���å��夵���Τǡ��ϥå���ؿ�������®���ʤä����٤Ǥϥѥե����ޥ󥹤ˤ��礭���ƶ��Ϥ���ޤ��� JSON ��ǥ����ɤ���Ȥ��ʤɡ�������ʸ���󥪥֥������Ȥ� dict �Υ������ɲä�����������椹��Ȥ��ˤϤ���äȺ����Ф�ΤǤ�����ɸ��饤�֥���JSON�Ϥ����ޤǥ��ꥫ��˥��塼�󤵤�Ƥʤ� (ʸ����Υ��������׽����ʤ���ʬŪ��C��ȤäƤ뤱�����Τ� Python �ǽ񤫤�Ƥ�) �ΤǤ���Ǥ�2~3%���٤��������Фޤ���Ǥ�����

�ȤϤ���������� �ֺǶ��ruby-core�פȡֺǶ��Python-dev�פǤ��ߤ��ˤ����ƶ���Ϳ�����äƤ�������ʤ��Ȼפ��ޤ���

re performance

Go �γ�ȯ�Ԥΰ�ͤǤ⤢�� Russ Cox ����Ρ� PCRE �ʤɤ�����ɽ�����󥸥� (a?){n}a{n} �� "a"*n (n=3 �ʤ� a?a?a?a{3} �� aaa) ��ޥå�������Τ� O(2^n) �η׻��̤������äƤ��ޤ����ɡ��Хå��ȥ�å�����ʤ���NFA�Ȥ��� O(n^2) �ˤǤ����ͤäƵ���������ޤ��� https://swtch.com/~rsc/regexp/regexp1.html

����Ͽ����������ǤϤʤ���Ǥ����� Python ��ɸ��饤�֥��� re �����äȤ����٤������Τޤޤ���ͤȤ������Ȥ�ML������ˤʤ�ޤ�����

Python �� re ���֤������뤳�Ȥ���Ū�˳�ȯ����Ƥ��� regex �ǤϤ����������ɽ�����٤��ʤ�ʤ����ɡ��֤������ɤ�����Ρ���äѤ� Python ���Τ��̤˥С�����󥢥åפǤ��븽���ݻ��Ǥ����䡣 requests �ߤ�����Python�� re �Υɥ�����Ȥ��饪�����᥵���ɥѡ��ƥ����饤�֥��Ȥ��� regex �ؤΥ�󥯤�񤤤Ƥ������ɤ��󤸤�ʤ��� regex �Ϥ����Ĥ������å�����Ƥ뤫�餳�ε���������٤��ʤ�ʤ�����ɤ⡢ NFA ����ʤ��ƥХå��ȥ�å��ʤΤ��Ѥ��ʤ��衢NFA�Ȥ������ʤ� re2 ��Ȥ������Ȥ��������ε���������ޤ�����

���ʤߤ�Go������ɽ�����٤��Ⱥ�ǯ��ISUCON������ˤʤ�ޤ�������C������re2�����٤���ΤΤ�����NFA�ˤʤäƤ��ơ� Python �ʤɤθ������ redos �˶����ʤäƤ��ޤ���

Python �� web ��ȯ���Ƥ���ͤʤɡ��������Ϥ��Ф�������ɽ����Ȥ����̤�����ʤ顢 Facebook���� re2 binding �Ǥ��� fb-re2 �������� fork �� re �Ȥθߴ�����Ż뤷�Ƥ� re2 ��ȤäƤߤƤϤ������Ǥ��礦��

Investigating Python memory footprint of one real Web application

Instagram �γ�ȯ�Ԥˤ�롢 Dismissing Python Garbage Collection at Instagram �Ȥ����������� Python �Ρ֤��Ȥ���GC��ߤ��װƷ���Ȱ���������ˤʤ�ޤ�����

���ε����ϥѥե����ޥ󥹤Ȥ������� prefork �� copy on write ���̤ǥ������󤷤����Τ˽۴Ļ���GC�Τ����ǥ��꤬��ͭ����ʤ��ʤ뤫��Ȥ�����ͳ�� GC ��ߤ�Ƥ��ޤ��������⤽��۴Ļ���GC�μ����ˤ��뻲�ȥ������GC�ޤǻߤ��Ȥ����äǤϤʤ��Τǡ�Ruby on Rails �Ρ֤��Ȥ���GC��ߤ��� �Ȥ������̤��äǤ���

Perl ���Τ� php ��Ʊ���������ȥ������GC�����Ǥ�������̤�ư���ޤ����� �۴Ļ���GC��Ŭ�ڤ˥��塼�˥󥰤���Τ��񤷤�����ޤ���

����Ϥ��Ƥ��������ҤǤ�CPU�Х���ɤΥץ��������ϥ�������2�����٤˹ʤ����¿���Τǥץ����������Ķ��ǥ�����­�����뤳�ȤϤۤȤ�ɤʤ��ơ� AWS �� c4 ���󥹥��󥹤Ǥ���꤬����;�äƤ��ꤹ��ΤǤ�����������ˤ��̤λ��ۤ�����߷ס���������Ƥ륢�ץ�⤢��櫓�ǡ���������̤Ͼ��ʤ��˱ۤ������ȤϤ���ޤ���

���������Ҥγ�ȯ��ΤȤ���Ʒ�Υ����ɤ��Ҽڤ��ơ���ư��Υ�������̤���������Ϥ��Ƥߤ��Τ�����ML�Υ���åɤˤʤ�ޤ��� (������ˡ�ˤĤ��Ƥ��̤ε���˾Ҳ𤷤ޤ���) ���Ƥ���Ĥ��Ҳ𤷤Ƥ����ޤ���

���ҤΥ����ɤ�Python �� type hinting ��¿�Ѥ��Ƥ��� -> List[User] �ߤ����ʤΤ����̤ˤ��������ɡ����� List �ʤɤ� Python �� ABC (�ºݤ˷Ѿ����Ƥ��ʤ����饹�֤˥��֥��饹�ط�������Ǥ���褦�ˤ�����Ȥ�) ��Ѿ����Ƽ�������Ƥ��ơ����줬 SQLAlchemy �� ABC �λȤ��������������������֥��饹�ط���Ƚ����®�����뤿��Υͥ��ƥ��֥���å�������̤��������Ƥ��ޤäƤ��ޤ����� ����� typing �⥸�塼�뤬 List[X] �� List �ǥ���å����ͭ����Ȥ�����Ŭ����Ƴ�������Τǡ�3���꡼��ͽ��� Python 3.6.1 �Dz�������ޤ���

����¾�� type hinting �ˤ���������̤Υ����С��إåɤϡ��礭����ʤ����ɡ������ˤ�äƤ�̵���Ǥ��ʤ����������顢 docstring ���ɤ߹��ޤʤ� -O2 ���ץ����ߤ����˥�󥿥�����ɤ߹��ޤʤ���Ŭ�����ץ���󤬤��ä������ɤ����⤷��ʤ���

�����ȤΥ�������̤ϡ� str > dict, tuple > ����¾�� str ���ä� SQLAlchemy �� docstring ���礭���� -O2 ��Ȥ��� dict, tuple > str > ����¾�ˤʤꡢ dict �� tuple �����줾�� 10% ���ĥ����ȤäƤ��롣 -O2 �� docstring �����Ǥʤ� assert ��ä��Ƥ��ޤ��Τǡ���Ŭ������̤����椹�륪�ץ�����ߤ�����

����¾��Python 3.6 �� compact �ˤʤä� dict ��⤦1�ʾ����������ꡢ tuple �򸺤餹�褦�ʼ�����Υ����ǥ���Ф����Τǡ���ǯ���� feature freeze �ˤʤ� Python 3.7 �ޤǤˤǤ��������Ƥ���������

³��FASTCALL

���ε����� tp_call �� FASTCALL �Ǥ� tp_fastcall ���ɲä����ä򤷤��ΤǤ��������Υ����åȤȸƤФ��ؿ��ݥ��󥿤��ɲäϡ�ABI�ߴ��� (���ꤵ�줿API�Ǥ�ABI�ޤǸ����ߴ��������ݤ���Ƥ��ơ��Ť� Python �����˥ӥ�ɤ��줿��ĥ�⥸�塼�뤬������ Python �����Ȥ���) �ʤɤδط��⤢��빽���ѤǤ���

�����ǡ��ɤ����ɲä���ʤ�Ʊ���� tp_new, tp_init �Ȥ��������åȤ� FASTCALL �б������С������� tp_fastnew, tp_fastinit ���ɲä��Ƥ��ޤ��ȡ� Victor ���󤬤�������ĥ��ޤ�������ĥ�ä���Ǥ����������ޥ������٥����®���ʤ��ΤμºݤΥ饤�֥���Ȥä��ޥ����٥���Ǥ��礭��®�ٺ�����¬�Ǥ����������Ƿ������ƥ�Υ�����ʬ�˼�������ѥå��ʤΤ��ͤ���ӥ塼���Ƥ�֤�������ꤷ�Ƥ��륱������ư���Τ�ʬ���롢�Ǥ⥵���ɥѡ��ƥ����ιԵ�������ĥ�Ȥ��Ȥ������ǵ����������Ѥ�ͽ�ۤǤ��ʤ��פȤ��������ʤΤǡ��ڥ�ǥ��󥰤ˤʤ�ޤ�����

����ʳ�����ʬ�Ǥ� FASTCALL ��Ŭ���ϰϤ���ƻ�������Ƥ��ޤ����㤨�С� Python �� __getitem__ �ʤɤ��ü�᥽�åɤ�������ƥ����åȤ���᤿�Ȥ��������åȤ��餽�� Python �ؿ���ƤӽФ��Τ� FASTCALL ��Ȥ��褦�ˤʤä��Τȡ� Python 3.6 �ǥ᥽�åɸƤӽФ����®�������ƥ��˥å����Ȥ߹�碌�뤳�Ȥǡ��ޥ������٥���Ǻ����30%�ι�®�����Ǥ��ޤ�����


@methane

songofacandy at 10:46���������URL��Comments(0)��TrackBack(0)
2017ǯ01��23��

�Ƕ�� Python-dev (2017-01)

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

@methane �Ǥ��� compact dict �� Python 3.6 ��9��ʥ١����ˤʤ�ľ���ˤ˥ޡ������졢����Τ������ǿ������餤 10������� Python �� Core Developer �ˤʤ�ޤ�����

��Python�Υե륿���ॳ�ߥå��Ȥ���KLab�˸ۤ��Ƥ���פȤ������ǤϤʤ��ΤǤ����� ��Ȥ�ȼ��ʺ��̤Ƕ�̳���֤���Ⱦ��OSS�ؤι׸��䥳���ɤ��ɤळ�Ȥ���䤷���äˤ���3����̤� Python �Ф��꿨�äƤ����Τǡ��¼�Ū�ˤ϶ᤤ���֤Ǥ���

������Ǥγ�ư�򤢤ޤ����ܤǶ�ͭ���뵡�񤬤ʤ��Τǡ� Money Forward ���������󤬽񤫤�Ƥ��� �Ƕ�� ruby-core �Ȥ���������ꥹ�ڥ��Ȥ��ơ� �Ƕ�� Python �γ�ȯ������Ҳ𤹤뵭����񤤤Ƥߤ����Ȼפ��ޤ���

Python 3.6 ��꡼��

12/23 �� Python 3.6 ����꡼������ޤ������Ҳ𤷤���ʤ��ۤɤ�������ν��פʲ���������Ƥ��ޤ����� ¿ʬ (Python �����ʻȤ�ʤ��ͤˤ�) ���֤狼��פ��Τ� f-string �Ǥ��礦��

f-string ��ʸ�������˼���񤯤��Ȥ��Ǥ��뵡ǽ�Ǥ���¿����LL�����äƤ��뵡ǽ�ʤΤǤ��������Ѥ���ȴ�ñ�˥��Ƥ��ˤ��������ɤ��񤱤Ƥ��ޤ��Τǡ� ���� "{foo.name} = {foo.value}".format(foo=foo) �Ƚ񤤤Ƥ����Τ� f"{foo.name} = {foo.value}" �Ȥ���褦�ˡ� ���� .format(name=name) ���֤������Ȥ��ƻȤ��Ϥ�뤳�Ȥ򤪤����ᤷ�ޤ���

�䤬��˹׸������Τ� compact dict �� asyncio �ι�®���Ǥ���;�̤Ǥ����� Python 3.6 ��2����˥�꡼�����줿 Ruby 2.4.0 �ˤ� compact dict �Ȥۤ�Ʊ��ο������ϥå���μ�����Ƴ������ޤ����������Ǥ��͡�

(���) C locale �Ǥ� UTF-8 ���ݡ��Ȳ���

Linux �Ǥ� Python �ϥ����ߥʥ롢ɸ�������ϡ��ե�����ѥ��ʤɤΥ��󥳡��ǥ��󥰤� locale �򸫤Ʒ��ꤷ�ޤ���

�Ǥ����� POSIX �� C locale (POSIX locale �Ȥ����) �� ASCII ��Ȥ��ȷ����Ƥ��뤿��ˡ��� ASCII ʸ����Ȥ��� UnicodeEncodeError ��ȯ�������Ƥ��ޤ��ޤ���ɸ�������Ϥ˴ؤ��Ƥ� PYTHONIOENCODING �Ȥ����Ķ��ѿ�������Ǥ���ΤǤ����� ���ޥ�ɥ饤������ȥե�����ѥ��Υ��󥳡��ǥ��󥰤�����Ǥ��ޤ���Ǥ�����

C locale �ϥǥե���ȤΥ�������ʤΤǡ� crontab �˻��ꤷ�ʤ��ä��Ȥ��� ssh �� LANG=ja_JP.UTF-8 �����ä���³��� �����С��� ja_JP.UTF-8 �����������äƤ��ʤ��ä��Ȥ��ʤɤ˰տޤ����Ȥ��ޤ����������줿���顼��å������ʤ�� �ʱѸ����𤷤ˤ�������˸������ʤ��Ȥ������ޥ�ɤε�ư���Ѥ��Τ���������Ȥ�����ͳ�ǰտ�Ū�� C locale ��Ȥ����󥸥˥���¿���Ǥ��礦������ƥʤ��Ȥ߹��ߤʤɤξ�����Linux�Ķ�����Ȥ������̺︺�Τ���� C �ʳ��Υ������뤬 ���⤽��¸�ߤ��ʤ����Ȥ⤢��ޤ���

�����������ޤ��ޤ���ͳ�� C locale ��� Python ��Ȥ��ȡ� UnicodeEncodeError ��ȯ������������ꡢ�ä� Python ��ȯ�ԤǤϤʤ� Python ���Υġ����ȤäƤ�����οͤ򺤤餻�뤳�Ȥˤʤ�ޤ���

Python �Ϲ����桼�����ؤ������Ƥ���Τ� locale �λȤ�������͡��ʤΤǤ���������Ǥ������� ASCII ������Ȥ������� C locale ��ȤäƤ���桼�����ϤۤȤ�ɤ��ʤ��������Ȥ������Ȥǡ� C locale �ǥǥե���Ȥ� UTF-8 ��Ȥ��������Ƥ�����Ƥ��ޤ���

(�ޤ�����ʳ��ʤΤǡ� Python �γ�ȯ�֥���������å������Ȥ��Ƥ�Ȥ��ޤ���)

PEP 540: Add a new UTF-8 mode

Python �� UTF-8 mode ���ɲä��褦�Ȥ�����ƤǤ��� UTF-8 mode �Ǥ� locale �����ꤹ�륨�󥳡��ǥ��󥰤�̵�뤷�ơ� �ե�����ѥ���ɸ�������Ϥ� UTF-8 �ˤʤ�ޤ���

���Υ⡼�ɤϸ�̩�˸����� disabled, enabled, strict ��3�Ĥξ��֤�����ޤ��� enabled �� strict �ΰ㤤�ϡ� UTF-8 �Ǥʤ� �Х������Ʃ��Ū�˰�������� surrogate escape ��Ȥ����� UTF-8 �Ǥʤ� �Х�����ϥ��顼�ˤ��뤫�Ǥ���

C locale �Ǥϥǥե���ȤǤ��Υ⡼�ɤ� enabled �ˤʤꡢUTF-8�Ǥʤ��ե�����ѥ���ɸ�������Ϥؤ��ɤ߽񤭤���ǽ�ˤʤ�ޤ��� �����Ϥ�ä��˻Ȥ�ʤ������Τ�ʤ��Ǥ����������Υե����륷���ƥ��ޥ���Ȥ����Ȥ��Ȥ��˴򤷤��Ϥ��Ǥ���

C �ʳ��� locale �Ǥ� locale ����Υ��󥳡��ǥ��󥰤� strict �ǻȤ���Τǡ� UTF-8 �ʳ��Υǡ����ϥ��顼��ȯ�������ޤ��� ������� UTF-8 �ʳ��Ͻ�������Ȥ��ˡ����ä�ʸ�����������ǡ�������Τ����˵��Ť��ƻߤ᤿���Ȥ��������Ǥ���

���Υ⡼�ɤ� PYTHONUTF8 �Ȥ����Ķ��ѿ��� -X utf-8 �Ȥ������ץ���������Ǥ���Τǡ� locale ��̵�뤷�����ͤ� .bashrc �ʤɤ� export PYTHONUTF8=1 �Ƚ񤯤��� /etc/environment �� PYTHONUTF8=1 �Ƚ񤤤Ƥ������ɤ��Ǥ��礦��

PEP 538: Coercing the legacy C locale to C.UTF-8

������ϡ��Ķ��ѿ������ꤷ�Ƥ���Τ� C locale ���ä��Ȥ��ˡ� locale �� C.UTF-8 ��(�����ƥब�б����Ƥ����)�ѹ����Ƥ��ޤ����Ȥ�����ƤǤ���

����ˤ�ꡢ Python ���Τ����Ǥʤ����̤Υ饤�֥��� ASCII �� latin1 �ǤϤʤ� UTF-8 ��ư���褦�ˤʤ뤳�Ȥ����Ԥ���ޤ���

�㤨�� Python �� REPL �Ǥ�Ȥ��Ƥ��� readline ����������Τǡ� Android ��� Python �� REPL �� ��������򤷤ʤ��Ƥ��Ŭ�� UTF-8 �򰷤���褦�ˤʤä��Ȥ�����𤬤���ޤ���

�������ƤӽФ�����γ��� (METH_FASTCALL)

���衢C���������鸫�� Python �δؿ��ƤӽФ��Ȥϡ���������򥿥ץ�ǡ�������ɰ����� dict ���Ϥ���ΤǤ�����

Python 3.6 �ǥ��ץ������ˤ������������Ƭ�ݥ��󥿡ܽ�������ο����Ϥ��ƤӽФ������о줷���ƤӽФ�¦�� �����å����Ѥ�������򥿥ץ�˵ͤ�ʤ��Ƥ⤽�Τޤ��Ϥ���褦�ˤʤ�ޤ�����

���ߡ�C����Ǻ�ä���Python����Ƥ٤�ؿ��פ򤳤ο������ƤӽФ�������б��������Ȥ��ʤ�Ǥ��ơ����פ���ʬ�Ϥ��餫���б��������ޤ�����

�ޤ������ʤ��������äˤʤ�ΤǤ����� PyMethodDef (̾��, �ƤӽФ�����򼨤��ե饰, �ؿ��ݥ��󥿤Ǥʤ빽¤��) �Ǻ�������ؿ���᥽�åɰʳ��ˡ� ���֥������ȼ��Τ��ƤӽФ���ǽ (Python �˾ܤ����ͤʤ顢 operator.itemgetter() ���֤����֥������ȤȤ���������뤫���Τ�ޤ���) �ʷ������ꡢ������Ϸ��Υ᥿�ǡ����Ȥʤ빽¤�Τ˴ؿ��ݥ��� tp_call ���ޤޤ�Ƥ��ޤ���

PyMethodDef �����Ͻ��褫��ե饰��Ȥä�ʣ���θƤӽФ�������б����Ƥ����Τǡ�C���줫��Ƥ֤Ȥ������Ѥ�API��ȤäƤ��ޤ����� ����tp_call �����Ϻ��ޤǥ��ץ�� dict ��������ɸ��θƤӽФ����󤷤����ݡ��Ȥ��Ƥ��ʤ��ä��Τǡ������Υ饤�֥�꤬API���ͳ�����˴ؿ��ݥ��󥿤�ľ�ܸƤӽФ����Ƥ��ޤäƤ����ǽ��������ޤ���

�����Ǹߴ����ݻ��Τ���� tp_fastcall �Ȥ����ؿ��ݥ��󥿤򿷤����ɲä��� tp_fastcall ���Ѱդ��Ƥ��뷿�ˤϼ�ưŪ�� tp_call ���Ѵ����뤿��δؿ�������褦�ˤ���ѥå�����ӥ塼��Ǥ���

�٤����褦�Ǥ����� Python ���������鸫����1�ĤθƤӽФ��ΰ�������C����������Ǥ�ʣ���δؿ��δ֤ǰ����Ϥ�����������Τǡ������˿������Ƚ��������������äƤ����;�פ��Ѵ������٤�ȯ�������ǽ��������ޤ���

Python 3.7 �Ǥ������Ǥΰ������Ϥ����������������줵��ƿ������ƤӽФ�����μ��Ϥ�ȯ���Ǥ���Ȼפ��ޤ���

Github �ؤΥޥ����졼�����

��ǯ��1��˥��ʥ��󥹤���Ƥ����塹�Ƚ������ʤ�Ǥ��Ƥ����� Mercurial ���� Git�� hg.python.org ���� Github �ؤΰܹԤǤ������塹�Ƚ������ʤ�Ǥ���褦�Ǥ���

1/17 �� Python 3.4.6 �� 3.5.3 ����꡼�����졢 migration window ���������Ƥ������֤��Ϥޤä��Τǡ����������ºݤ˰ܹԤ��륹�����塼�뤬���ʥ��󥹤����Ȼפ��ޤ���1����˰ܹԤǤ�����ɤ��ʡ���

songofacandy at 16:57���������URL��Comments(0)��TrackBack(0)
2016ǯ08��23��

pixiv private isucon 2016 Python �Ǽ������Ѱդ��ޤ���

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

��ǯ�� ISUCON �Ǥ� Python �������󶡤���뤳�Ȥ� ȯɽ����ޤ�����

Python �Ǥ������ϲ���ͽ������Ǥ��ǽ�Ǥ�������ǯ�ν�������ब������������� �����Ǥ���褦�� Python �Ǥμ������Ѱդ��ޤ������Ȥꤢ�����٥���ޡ��������������� �Ȥ����ޤǤϳ�ǧ���Ƥ���ޤ���

��ݥ��ȥ�

�Ѱդ����Τϥ��ץ�μ��������ʤΤǡ������Ȥä���������ݤ� pixiv ���󤬸�������Ƥ��� AMI �� webapp �ǥ��쥯�ȥ��۲��� python �Ȥ���̾���� git clone ���� systemd �ʤɤ�����������ΰ�ĤȤ��Ƽ����ǹԤäƤ���������

�ޤ����֤�����Ȥ��˼�ʬ�ǥ��塼�˥󥰤��Ƥߤơ��ߥɥ륦����������� �ġ��롦�ƥ��˥å��ʤɤ�����������Ȼפ��ޤ���


@methane
songofacandy at 20:55���������URL��Comments(0)��TrackBack(0)
2016ǯ06��29��

vmprof-flamegraph ����ޤ���

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

vmprof-flamegraph ���ä��ΤǤ��ξҲ�򤷤Ƥ����ޤ���

�ޤ�������ץ�Ȥ��� Sphinx ��Ȥä� Python �Υɥ�����Ȥ�ӥ�ɤ����Ȥ��� vmprof ��̤� flamegraph �ˤ��Ƥߤ��Τǡ��ɤ�ʤ�Τ��Ϥ�����򸫤ƤߤƤ���������

http://dsas.blog.klab.org/img_up/sphinx-prof.svg

flamegraph �ˤĤ���

flamegraph �ΰ���Ū�ʾҲ�ˤĤ��ƤϾ�ά���ơ���󥯤����֤��Ƥ����ޤ���

����������: http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html

���ܸ�ξҲ𵭻�: http://d.hatena.ne.jp/yohei-a/20150706/1436208007

¾�˥ץ��ե������̤�ӥ��奢�饤������ġ���Ȥ��Ƥ� cachegrind �� (kcachegrind, wincachegrind �ʤ�) ������ޤ����� flamegraph �����������å��ȥ졼���� �٤���ʬ��ʬ����䤹���ΤǺǶ�Τ���������Ǥ���

���Ȥ���Web���ץ�ǡ�ORM�Υ����ꥪ�֥������Ȥ���ºݤΥ�������������Ƥ����¹Ԥ��Ʒ�̤򥤥󥹥��󥹲�����������Ť������狼�ä��Ȥ��ޤ��� ���ξ�硢 cachegrind �ϤǤ�ɤ�����ƤӽФ���Ƥ���Τ��Ť��Τ��ޤǤϤ�������ʬ����ޤ��������� flamegraph ��Ȥä����ϡ� ��������ƤӽФ��줿���ϥ��󥹥����������Ť������̤˥��֥������Ȥ�������Ƥ���ʤɡˡ����ä�����ƤӽФ��줿���ϥ�����ӥ�ɤ��Ť� ��ñ��˥�����μ¹Բ����¿���ʤɡˡ��ޤǤҤ��ܤ��İ����뤳�Ȥ��Ǥ��ޤ���

¾�Υ��åȤȤ��ơ�GUI���ץ꤬���פǥ֥饦���Ǹ��뤳�Ȥ��Ǥ���Ȥ��� flamegraph.pl �˿��碌��ǡ����ե�����Υƥ����ȷ����� grep �ʤɤΥġ���ȿ��������⤤ (��̣������ؿ��� grep ���Ƥ��鿩�碌�뤳�Ȥ��Ǥ���) �ʤɤΥ��åȤ����ꡢ�Ȥ��䤹���Ǥ���

���Υƥ����ȥե�����Υե����ޥåȤϥ���ץ�ǡ��ƹԤ����Τ褦�ˤʤäƤ��ޤ���

�ȥåץ�٥�δؿ�̾;1�ʿ����ؿ�̾;���ֿ����ؿ�̾  ����ץ��

�ؿ�̾�Ȥ��Ƥ���Ȥ����ϼºݤˤϤʤ�Ǥ��ɤ�������ץ���������Ǥ���в��Ǥ��ɤ��Ǥ����ʤΤ�CPU���ְʳ��ˤ��������̤Ȥ����������Ū�����Ѥ��뤳�Ȥ��Ǥ��ޤ���

vmprof �ˤĤ���

PyPy �ץ��������Ȥdz�ȯ����Ƥ��롢 PyPy �� CPython �ѤΥ���ץ�󥰥ץ��ե�����Ǥ���

����ץ�󥰥ץ��ե�����ʤΤǡ�����ץ�ֳ֤�Ĺ��ˤ���Х����С��إåɤ򾮤������뤳�Ȥ��Ǥ������ִĶ���ư�������Ȥ��ǽ�Ǥ���

�ޤ��ޤ���ȯ��Υץ��������ȤǤ���������ץ�󥰥ץ��ե����鹥���ʤΤ��Ѷ�Ū�˻ȤäƤ��ޤ���

vmprof �ϥӥ��奢�饤���Ȥ����ȼ��� Web ���ץ��ȯ���Ƥ��ơ��ºݤ� http://vmprof.com/ ��ư���Ƥ��ޤ��� �ä� PyPy �Υץ��ե������̤򸫤��硢 JIT �Υ������ॢ�åפʤɤ⸫�뤳�Ȥ��Ǥ��ޤ���

���� Web ���ץ�� https://github.com/vmprof/vmprof-server �򸫤�Сʤ������٤�Python���μ�������С˴�ñ��ư�������Ȥ��Ǥ��ޤ���

vmprof-flamegraph �ˤĤ���

��ñ��ư������ȸ��äƤ⡢�ץ��ե������̤򸫤뤿������˼����Web���ץ���Ѥ���Τ����ݤǤ��� CPython ��ư�����Ƥ��륢�ץ�Υץ��ե�����򸫤�����ʤ� flamegraph ��Ȥ��ۤ�������ڤǤ���

�Ȥ������Ȥǡ� vmprof ����������Х��ʥ�����Υץ��ե������̤� flamegraph.pl �����ϥե����ޥåȤΥƥ����ȥե�������Ѵ�����Τ� vmprof-flamegraph �ˤʤ�ޤ���

���󥹥ȡ�����ˡ�ϡ� flamegraph.pl �� PATH ���̤ä��ǥ��쥯�ȥ���֤��Ƥ����� vmprof �򥤥󥹥ȡ��뤷�� Python �δĶ��� pip install vmprof-flamegraph ��������Ǥ���

���� Python �Ķ��� bin �ǥ��쥯�ȥ�� vmprof-flamegraph.py �����󥹥ȡ��뤵��ޤ���

�Ȥ����ϼ��Τ褦�ʴ����ˤʤ�ޤ���

$ python3 -m vmprof -o profile.data <Python������ץ�>
$ vmprof-flamegraph.py profile.data | flamegraph.pl > profile.svg
$ open profile.svg  # Mac ��

�ܺ٤� vmprof-flamegraph �� flamegraph.pl �Υإ�פ򸫤Ƥ���������


@methane

songofacandy at 17:27���������URL��Comments(0)��TrackBack(0)
2016ǯ06��24��

Python �˸��߼������ Compact dict �ξҲ�

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�ط�

2015ǯ1��ˡ� PyPy �γ�ȯ��Blog�ˤ���ʵ������ݥ��Ȥ���ޤ�����

Faster, more memory efficient and more ordered dictionaries on PyPy

���θ��꡼�����줿 PyPy 2.5.1 ���� dict ���������ݻ�����褦�ˤʤꡢ��������̤�︺����ޤ�����

���� CPython �Ǥϡ� PEP 468 �ǡ�������ɰ����� **kwargs �Ȥ��������β������Ǽ������Ȥ��ˡ������ν������¸���褦�Ȥ�����Ƥ�����ޤ�����

�㤨�С� SQLAlchemy �Υ����꡼�� .filter_by(name="methane", age=32) �Ƚ񤤤��Ȥ�����������륯���꡼�� WHERE name = "methane" AND age = 32 �ˤʤ뤫 WHERE age = 32 AND name="methane" �ˤʤ뤫������ä��Τ��������Ƚ����ݻ�����褦�ˤʤ�Ȥ��ä����åȤ�����ޤ���

(filter_by ���������ѤΥ��硼�ȥ��åȴؿ��Ǥ��äơ�������ɰ�����Ȥ�ʤ� filter �Ȥ����᥽�åɤ�Ȥ��н����ݻ�����ޤ���)

������ƼԤ� pure Python ���ä� OrderedDict ���饹��C�ǺƼ������ơ� Python 3.5 ���� OrderedDict ������®���ľʥ���ˤʤ�ޤ����� (dict �����ν������򤱤��Τϡ�������� dict �� Python ���󥿥ץ꥿�Τ����ʣ���˺�Ŭ������Ƥ��뤫��Ǥ���)

��������C�ǺƼ������줿�Ȥϸ�������������󥯥ꥹ�Ȥǽ����������줿 OrderedDict �Ϥ���ʤ�˥����С��إåɤ�����ޤ����ä˥�������̤ˤĤ��Ƥϡ��ܶᤤ��������ޤ���

Python 3.5.1 (default, Dec  7 2015, 17:23:22)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> d = {i:i for i in range(100)}
>>> from collections import OrderedDict
>>> od = OrderedDict((i,i) for i in range(100))
>>> sys.getsizeof(d), sys.getsizeof(od)
(6240, 11816)

���Τ����⤢�ꡢ�ޤ� PEP 468 �ϻߤޤä��ޤޤˤʤäƤ��ޤ���

��⡢�����Υ桼��������������������Ȥ��äơ����ƤΥ�����ɰ�������ǽ����Ȥ���ǽ���������ѹ��ˤ��񹳤����ꡢ�ޤ� PyPy �μ������� dict �˶�̣�����ä��Τǡ� Python 3.6 �˥��ꥮ��֤˹礦���Τ�����ĩ�魯�뤳�Ȥˤ��ޤ�����

(ͽ��Ǥ�9����Ⱦ�� beta ��꡼�����쵡ǽ�ɲäǤ��ʤ��ʤ�Τǡ�����ޤǤ˼�����ɾ�����ڡ�ML�Ǥε����ʤɤ�Фƥޡ��������ɬ�פ�����ޤ�)

�ǡ�����¤

�ѹ�������¤�Τ� PyDictKeysObject �����Ǥ���������������������쥤�����Ȥ����ưŪ�ˤʤ�ޤ���

struct _dictkeysobject {
    Py_ssize_t dk_refcnt;
    Py_ssize_t dk_size;
    dict_lookup_func dk_lookup;
    Py_ssize_t dk_usable;
    Py_ssize_t dk_nentries;  /* How many entries is used. */
    char dk_indices[8];      /* dynamically sized. 8 is minimum. */
};

#define DK_SIZE(dk) ((dk)->dk_size)
#define DK_IXSIZE(dk) (DK_SIZE(dk) <= 0xff ? 1 : DK_SIZE(dk) <= 0xffff ? 2 : \
                       DK_SIZE(dk) <= 0xffffffff ? 4 : sizeof(Py_ssize_t))
#define DK_ENTRIES(dk) ((PyDictKeyEntry*)(&(dk)->dk_indices[DK_SIZE(dk) * \
                        DK_IXSIZE(dk)]))

dk_get_index(PyDictKeysObject *keys, Py_ssize_t i)
{
    Py_ssize_t s = DK_SIZE(keys);
    if (s <= 0xff) {
        return ((char*) &keys->dk_indices[0])[i];
    }
    else if (s <= 0xffff) {
        return ((PY_INT16_T*)&keys->dk_indices[0])[i];
    }
    else if (s <= 0xffffffff) {
        return ((PY_INT32_T*)&keys->dk_indices[0])[i];
    }
    else {
        return ((Py_ssize_t*)&keys->dk_indices[0])[i];
    }
}

dk_set_index(PyDictKeysObject *keys, Py_ssize_t i)
{
...

�����Υϥå���ơ��֥�� 3word (hash, key, value) �� PyDictKeyEntry ��¤�Τ�����Ǥ�������������������Ǥϥϥå���ơ��֥�����Ǥ򤿤����������ˤ��Ƥ��ޤ��� ��¤�Τ�����Ǥ� char dk_index[8] �ˤʤäƤ��ޤ���������ϺǾ��� dk_size ��8�λ����礭���ǡ��ºݤˤϥ��������Ȼ��ˤ���礭������������ݤ��ޤ�������ˡ��������������Τ� dk_size �� 128 �ޤǤ� char �Ǥ��� 256 ����� int16_t �ˤʤ�ޤ������Τ褦�ˤ��ƥ��ꥮ��ޤǥϥå���ơ��֥�Υ������򾮤������ޤ���

����ˡ� dk_indices �Υ�������ưŪ�ʤΤǹ�¤�Τ�ľ������Ǥ��ޤ��󤬡����ι�¤�Τθ���� PyDictKeyEntry ��¤�Τ�������֤��Ƥ��ޤ�����������Υ������� dk_size �ǤϤʤ����� 2/3 (����ε����ǾҲ𤷤������Υϥå���ơ��֥��������ǽ�ʺ������ǿ�) �ˤ��Ƥ��ޤ������������Ǥ���������Ȥ��ϡ�����������ɵ����Ƥ��������Υ���ǥå����� dk_indices ����¸���ޤ��� dk_nentries ������������ǿ��ˤʤ�ޤ���

������������Ʊ���������ޤ�¸�ߤ��ʤ��Ȳ��ꤷ�����������ɤǼ����Ȥ����ʤ�ޤ���

// dk_indices ����������֤򸡺�
pos = lookup(keys, key, hash);

// ����ȥ�����˥���ȥ���ɵ�����
DK_ENTRIES(mp)[keys->dk_nentries].me_hash = hash;
DK_ENTRIES(mp)[keys->dk_nentries].me_key = key;
DK_ENTRIES(mp)[keys->dk_nentries].me_value = value;

// dk_indices �ˤ��Υ���ȥ�Υ���ǥå�������¸
dk_set_index(keys, pos, keys->dk_nentries);

// �Ǹ�˻��ѺѤߥ���ȥ���򥤥󥯥����
mp->dk_nentries++;

���

���� dict ���饢���ƥ��������ˤϡ� dk_indices �γ������֤˥��ߡ����Ǥ��������Ƥ����ޤ��� (�ƥ���ǥå�����1�Х��Ȥǰ����륨��ȥ꡼����256�ޤǤǤϤʤ�128�ޤǤʤΤϡ��ޥ��ʥ����ͤ���ߡ��ȶ���ɽ����������Ѥ��Ƥ��뤫��Ǥ���)

����ȥ꡼����κ���ˤĤ��Ƥ�2�Ĥ�����������ޤ���

�ǽ�� compact dict �Υ����ǥ��� Python �γ�ȯ��ML����Ƥ��줿�Ȥ��ϡ��Ǹ�����Ǥ������줿���Ǥ����ä����֤˰�ư���뤳�Ȥǡ�����ȥ꡼�����̩���ݤäƤ��ޤ��������������ǤϺǸ�����Ǥ��������Τǡ������������¸����פȤ������������Ǥ��������Ȥ��˼����ޤ���

������ PyPy �亣���ͤ����Ѥ����Τϡ�ñ�˶��������� NULL ������Ƥ����Ȥ�����ΤǤ���

// dk_indices ��κ���������ǤΥ���ǥå�����������֤򸡺�
pos = lookup(keys, key, hash);
// ����������ǤΥ���ȥ꡼������ΰ��֤��������
index = dk_get_index(keys, pos);

// ���Ǥ�������
DK_ENTRIES(mp)[index].me_key = NULL;
DK_ENTRIES(mp)[index].me_value = NULL;

// dk_indices �˥��ߡ�����Ͽ
dk_set_index(keys, pos, DUMMY);

������������ϡ������Ⱥ���򷫤��֤����Ȥ��˥���ȥ꡼���󤬥��ߡ��Ǥ��äѤ��ˤʤäƥ���ѥ�������¹Ԥ���ɬ�פ�����Ȥ����ǥ��åȤ�����ޤ��� ���������¤Ϻǽ����Ƥ��줿�����Ǥ⡢�����Ⱥ���򷫤��֤������˥ϥå���ơ��֥뤬���ߡ�����ޤäƤ��ޤ��������Ǥ��ʤ��ʤäƤ��ޤ���ǽ��������Τǡ��ɤ���ˤ�������ѥ�������ɬ�פˤʤ�ޤ������Τ��ᡢ�������ݻ����������ɤ���Ƚ�Ǥ��ޤ�����

���ʤߤˡ� .popitem() �ϡ�����ȥ꡼����Τ����Ǹ�����Ǥ������� dk_nentries ��ǥ�����Ȥ��뤳�Ȥǡ�ʿ�ѷ׻��̤� O(1) ���ݤäƤ��ޤ��� ���ξ��� dk_usable �Ȥ����ֻĤ�������ǽ���פ򥤥󥯥���Ȥ��ʤ��Τǡ�����������򷫤��֤��ȥ���ѥ�������¹Ԥ��ƥϥå���ơ��֥��ƹ������ޤ���

Shared-Key dict

���ơ������ shared key dict �Ǥ���

�ǽ�ϡ� compact dict �������������Ʊ���褦�ˡ��ϥå���ơ��֥�˥��ߡ����Ǥ���������������ȥ꡼����¦�� NULL �ˤʤäƤ�������ߡ���Ƚ�Ǥ�����ɤ��ȻפäƤ��ޤ�����

������������Ǥ� shared key �˺ǽ�����Ǥ��ɲä��� dict �������礷����¸���뤳�Ȥ��Ǥ��ޤ���

>>> class A:
...     pass
...
>>> a = A()
>>> b = A()
>>> a.a = 1
>>> a.b = 2
>>> b.b = 1
>>> b.a = 2
>>> a.__dict__.items()
dict_items([('a', 1), ('b', 2)])
>>> b.__dict__.items()  # ������� b, a �ʤΤˡ�����
dict_items([('a', 2), ('b', 1)])

��������ˤĤ��ơ�����3�Ĥ����ˤ�ͤ��Ƥ��ޤ�����ML�ǵ����������Guido��Guido����Ǥ����������ȯ�Ԥ��ǽ����ꤹ��ޤǤɤ�ˤʤ뤫ʬ����ޤ���

(1) ����Τޤޤ���������

���� Python �θ�����ͤǤϡ� dict �ν��������Ǥ����ʤΤǡ��֥��󥹥��󥹤�°����������� dict ����������������¸����פȤ�������ư��⡢�������Ū�ˤ�����ʤ����Ȥˤʤ�ޤ���

compact dict �ˤʤ�� shared key dict �� ma_values ����Υ������� dk_keys ���餽�� 2/3 �ˤʤäƤ�ꥳ��ѥ��Ȥˤʤ�Τǡ����β��ä����˼���������Ǥ��ޤ���

�������ǥ��åȤȤ��Ƥϡ��ؤɤΥ����������������¸����褦�˿����񤦤Τǡ�������ͤ��ǧ���ʤ��ͤϤ��줬���ͤ��ȸ��򤷤Ƥ��ޤ����Ȥ�����ޤ��� ��������ϡָ��򤹤�ۤ��������פȤ���Τ��Կ��ڤǤ��� ���Ȥ��� Go �Ϥ��Υǥ��åȤ��򤱤뤿��ˡ� map �򥤥ƥ졼�Ȥ���Ȥ��ν����տ�Ū�� (��®�ʵ��������Ȥä�) ����ˤ��Ƥ��ޤ���

(2) �����礬��ä��� shared key �����

shared key �����äƤ������Ȱ㤦�������������褦�Ȥ����餹���� shared key �����Ȥ�����ˡ������ޤ���

����̵�����ˡ�˸����ޤ������ɤ줯�餤 shared key ��ݻ��Ǥ���Τ��狼��ˤ����ƥ꥽��������ͽ¬���ˤ����ʤ�Ȥ��������̤�ѥ��������礬�̾�Ȱ㤤�� shared key ���������Ƥ��ޤ��ȡ�Ʊ���������� dict ��Ʊ�����餤���Ѥ�³���Ƥ�Τ˥�������̤����露�������Ƥ��롢�Ȥ��ä����꤬����ޤ���

�¹Ի��֤�Ĺ�� Web ���ץꥱ�������ʤɤΥץ������ǡ���������̤�ͽ¬���Ť餯�����露��������Τϡ����ޤꤦ�줷������ޤ��� �ʤΤǻ�Ϥ��������˾�굤�Ǥ�̵���Ǥ���

(3) Shared Key Dict �����

shared key dict �ϡ��ϥޤä��Ȥ��ϤȤƤ��Ψ��������ΤΡ� compact ordered dict ���������ꤷ�Ƹ�Ψ�������Ǥ��� ������ shared key dict �򥵥ݡ��Ȥ��뤿��ˡ� dict �μ�����������ʣ���ˤʤäƤ��ޤäƤ��ޤ���

�ºݤ� shared key dict ����������äƤߤ��ꡢ4100����500�Ԥ��餤�������뤳�Ȥ��Ǥ��ޤ�������ñ�˺�����������ʤΤǡ�����˥�ե�������󥰤��ƺ���Ȼפ��ޤ���

������Ψ�ϡ� Python �Υɥ�����Ȥ� Sphinx �ǥӥ�ɤ���Ȥ��� maxrss �� /usr/bin/time �Ƿ�¬�����ꡢ

  • shared: 176312k
  • compact + shared: 158104k
  • compact only: 166888k

�Ȥ��������ǡ� shared key ����Ƥ� compact dict �θ��̤ˤ�����︺�������礭���Ȥ�����̤��Ǥޤ�����

�ʤ�����󤳤��1�ĤΥ��ץꥱ�������ˤ������̤Ǥ���̵���Τǡ�¾�˷�¬��Ŭ���������饹�䥤�󥹥��󥹤򤽤������ȤäƼ¹Ի��֤ȥ�������̤����ꤷ�Ƥ��븽�¤Υ��ץꥱ������󤬤���ж����Ƥ�����������

�ޤ��� shared key �������Ƽ������줿ʬ���̤θ�Ψ�Τ����ü첽 dict ��������ơ� compact + shared ����⤤��Ψ���������Ȥ�Ǥ��ޤ��� ���Ϥ��륢���ǥ���POC�������ʤΤǡ����Ѥ��줿��ޤ��Ҳ𤷤ޤ���

OrderedDict

OrderedDict �� compact dict ��Ȥäƹ�®��������ˡ�ˤĤ��Ƥ���­���Ƥ����ޤ���

Python 3 �ˤϡ� Python 2.7 �ˤ�̵���ä� move_to_end(key, last=True) �Ȥ����᥽�åɤ�����ޤ������Υ�����ɰ�����������Τǡ� move_to_end(key, last=False) �Ȥ������Ƭ�˰�ư���뤳�Ȥ��Ǥ��ޤ����ʵ�ǽ�ϤȤ⤫���᥽�åɤ�̿̾�ˤĤ��ƤϤȤƤ⥻�󥹤������Ȼפ��ޤ��� move_to_front(key) �Ǥ�����󡣡�

���ε�ǽ��������뤿��ˡ� dk_entries ����򥭥�ѥ��ƥ������ưŪ����ǤϤʤ�������ѥ���������� deque �Ȥ��ư����Ȥ��������ǥ�����äƤ��ޤ��� �Ĥޤꡢ���� dk_entries[0] ���� dk_entries[dk_nentries-1] �ޤǤ�ȤäƤ���ΤǤ���������˲ä�����Ƭ�����Ǥ��ɲä���Ȥ��� dk_entries �θ��������Ƭ�˸����ä��������Ƥ����ޤ���

�����¸�����ˤ� dk_nentries ��ȿ���Ǥ��äơ��ϥå��塼�ơ��֥��������ꥵ������������ʬ�򰷤��褦�˲�¤������ɤ��Ǥ��� OrderedDict 1�Ĥ����� 1word (8byte) ���ɲä�������ǡ���������Ⱦ�������뤳�Ȥ���ǽ�ʤϤ��Ǥ���

�Ǥ�����Shared-Key ����Ǽ���դʤ����� dict �����������¸����褦�ˤʤä��� OrderedDict �����ѵ���⸺�äƤ��ޤ��Τǡ����Υ����ǥ�������������١�����󤬤���ޤ��󡣾��ʤ��Ȥ� Python 3.6 �ˤϡ�ï�����ͤ�����˼������Ƥ���ʤ��¤�˴֤˹��ʤ��Ǥ��礦��


@methane

songofacandy at 16:02���������URL��Comments(0)��TrackBack(0)
2016ǯ06��22��

Python �� dict �μ����ܲ�

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

@methane �Ǥ���

�Ƕ� Python �� dict ��ϥå����Ƥ���Τǡ����ξҲ�򤷤����Ȼפ��ޤ��� �Ǥ������ޤ����ε����Ǥϸ��� (Python 3.6a2) �� dict �μ�����ܲ򤷤ޤ���

�ǡ�����¤

���ܤȤʤ빽¤�Τ�3�ĤǤ���(Python 3.6a2 �Υ�����������)

typedef struct _dictkeysobject PyDictKeysObject;

typedef struct {
    PyObject_HEAD
    Py_ssize_t ma_used;
    PyDictKeysObject *ma_keys;
    PyObject **ma_values;
} PyDictObject;

typedef struct {
    /* Cached hash code of me_key. */
    Py_hash_t me_hash;
    PyObject *me_key;
    PyObject *me_value; /* This field is only meaningful for combined tables */
} PyDictKeyEntry;

typedef PyDictKeyEntry *(*dict_lookup_func)
(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject ***value_addr);

struct _dictkeysobject {
    Py_ssize_t dk_refcnt;
    Py_ssize_t dk_size;
    dict_lookup_func dk_lookup;
    Py_ssize_t dk_usable;
    PyDictKeyEntry dk_entries[1];
};

PyDictObject �� dict �Υ��󥹥��󥹤�ɽ�����֥������ȤǤ��� PyObject_HEAD �� Python �Υ��֥������Ȥ��٤Ƥ����äƤ��붦�̤δ����ѥǡ����ʻ��ȥ���������ˤ��������ޥ����ǡ��̾�ӥ�ɤǤ�3��ɡ�64bit�Ķ��Ǥ�24�Х��ȡˤˤʤ�ޤ���

ma_used ������ dict �����äƤ������ǿ��� ma_keys ��ưŪ�˳��ݤ����ϥå���ơ��֥�Ǥ��� ma_values �ˤĤ��Ƥϸ�Ҥ��ޤ���

PyDictKeyEntry �ϥϥå���ơ��֥�γƥ���ȥ�Ȥʤ빽¤�ΤǤ��� me_key, me_value ��̾���Τޤޥ������б������ͤȤʤ� Python ���֥������ȤؤΥݥ��󥿤ǡ� me_hash �� me_key �Υϥå����ͤǤ���õ����ϥå���ơ��֥�κƹ��ۤΤȤ���ɬ�פˤʤ�Τ����׻�����ΤǤϤʤ��ƥ���ȥ꡼�˻��äƤ��ޤäƤ��ޤ���

PyDictKeysObject ���ϥå���ơ��֥�Ǥ��� dk_size ���ϥå���ơ��֥�Υ������� dk_usable �����Ȳ����ǥϥå���ơ��֥��������뤫�򼨤������󥿤Ǥ��� dk_usable �� 0 �ΤȤ����������褦�Ȥ���ȥϥå���ơ��֥뤬�ƹ��ۤ��졢ɬ�פ˱����Ƴ�ĥ����ޤ��� dk_refcnt �ˤĤ��Ƥ� ma_values �ȤȤ�˸�Dz��⤷�ޤ���

dk_lookup ��õ���ؿ��ؤδؿ��ݥ��󥿤Ǥ��� dict ���㤨�дؿ��ƤӽФ��ΤȤ���̾������ؿ���õ��������ȡ����ʸ����򥭡��Ȥ��� Python �θ���δ��ܤ�٤��Ƥ���Τǡ� key �η���ʸ����� dict ���ü첽���ƹ�®�ˤ����ؿ���ǽ������Ƥ�����ʸ����ʳ��Υ��������������ʳ������Ѥδؿ��ؤΥݥ��󥿤˺����ؤ���ʤɤ�ԤäƤ��ޤ���

dk_entries �ϥϥå���ơ��֥�μ��֤Ǥ�����¤�Τ�����Ǥ�1���Ǥ�����ˤʤäƤ��ޤ������ºݤˤϼ��Τ褦�� PyDictKeysEntry �򥢥������Ȥ��뤳�Ȥ� dk_size ��Ĺ�����������ˤʤ�ޤ���

    dk = PyObject_MALLOC(sizeof(PyDictKeysObject) +
                      sizeof(PyDictKeyEntry) * (size-1));

�����ץ󥢥ɥ쥹ˡ

�ϥå���ơ��֥�Υ����� (dk_size) �� 2^n �ˤʤäƤ��ޤ����ޤ������Υϥå���ơ��֥�˳�Ǽ�Ǥ������ǿ� (dk_usable �ν����) �� (2*dk_size+1)/3 �ˤʤäƤ��ޤ���

dk_size �� 2^n �ʤΤǡ��ϥå���ơ��֥�����Ǥ����������ꡢõ��������ϡ��ϥå����� & (dk_size-1) �Ǿ�����ޤ��� (dk_size �� 8 �ʤ�2�ʿ���ɽ���� 0b1000 �ǡ� dk_size-1 �� 7 = 0b0111 �ˤʤꡢ�ϥå����ͤβ���3bit�����Ѥ��뤳�Ȥˤʤ�)

dk_usable �� 0 �ˤʤ�ϥå���ơ��֥��ƹ��ۤ���ݡ��ʺ�����ʤ������ɲä��Ƥ������ϡ�dk_size��2�ܤˤʤꡢ�ϥå���ơ��֥�Ρ�̩�١פ� 2/3 ���� 1/3 �ˤʤ�ޤ����ʤΤǥϥå���ơ��֥��̩�٤ϲ��¤��������� 1/3 ����¤� 2/3 �ˤʤ�ޤ���

���ơ��ϥå����ͤ�����ʬ�����Ƥ���Ȥ����顢�����������Ѥ����ϥå����ͤβ��̥ӥåȤξ���Ψ�� 1/3 �� 2/3 ��ʿ�Ѥ� 1/2 ���٤ˤʤ�Ǥ��礦�� �ºݤˤϥϥå����ͤ�����ʬ�����Ƥ���Ȥϸ¤�ʤ��Τǡ������갭���ʤ�Ϥ��Ǥ���

�ϥå���ˡ�Ǿ��ͤ��н褹����ˡ�Ȥ��Ƥϡ����Ǥ�ϥå���ơ��֥볰�Υꥹ�Ȥʤɤ��֤��ƥϥå���ơ��֥�ˤϤ����ؤλ��Ȥ��Ǽ������ˡ�ʥ����ץ�ϥå���ˡ�ˤȡ��ϥå���ơ��֥�����̤ξ��˳�Ǽ������ˡ�ʥ��������ɥϥå���ˡ���ޤ��ϥ����ץ󥢥ɥ쥹ˡ���֥����ץ�פ������դΥ����ץ�ϥå���ˡ�����Τ�ʶ��路���Ǥ��ˤ�����ޤ����� Python �ϥ��������ɥϥå���ˡ����Ѥ��Ƥ��ޤ���

���������ɥϥå���ˡ�Ǥϡ��־��ͤ����鼡�Ϥɤ���Ȥ����פȤ������르�ꥺ�����Ƥ����ơ�������õ����Ʊ����ˡ��Ȥ�ʤ���Фʤ�ޤ��� ���ꥢ�������θ�Ψ��ͤ���Ⱦ��ͤ��������٤ξ���Ȥ��Τ��ɤ��ΤǤ������ϥå����ͤ��ɤ��ʤ��ƾ��ͤ���ȯ�����Ȥ��䡢�ϥå���ơ��֥�����Ф꤬ȯ���������ˡ����⡢���μ��⡢���μ��⡢�Ȥ��������˾��ͤ����ǽ�����⤯�ʤ�ޤ���

�ϥå���ơ��֥�����������Ӥ˽�󤷡��ǽ�Ū�ˤϥơ��֥���������Ǥ�1�󤺤���������ؿ����ߤ����ΤǤ��������δؿ��Ȥ��� Python �� (5*i+1) mod dk_size ����Ѥ��Ƥ��ޤ��� �㤨�� dk_size �� 8 �� �ϥå����ͤβ���3bit�� 3 �ʤ顢�ϥå���ơ��֥�� 3, 0, 1, 6, 7, 4, 5, 2, 3 �Ȥ������ǡ� 0~7 ��1�٤����̤äƺǽ�� 3 ����äƤ��ޤ���

��������������ˡ�Ǥϥϥå���ơ��֥����̩�٤��Ф�αƶ����򤱤����ΤΡ��ϥå����ͤβ��̥ӥåȤ����ͤ��� key ��Ʊ�����֤˽�󤹤�Τ�����õ���ˤʤäƤ��ޤ���Ψ�������Ȥ�������������ޤ��������ǡ������δؿ����¤���ơ����Τ褦�ˤ��Ƥ��ޤ���

    for (perturb = hash; ; perturb >>= PERTURB_SHIFT) {
        i = i * 5 + perturb + 1;

����ǡ��ǽ�Τ����ϥϥå����ͤξ�̥ӥåȤ�ȤäƼ��ΰ��֤���ꤷ�Ƥ������ϥå����ͤ򱦥��եȻ��ڤä�����ۤɤΥ��르�ꥺ��dzμ¤˽�󤹤롢�Ȥ����ϥ��֥�åɷ��ν�󥢥르�ꥺ��ˤʤ�ޤ���

(���ʤߤˡ�����for�롼�פˤϺǽ�ξ��ͤΤ��Ȥˤ���Τǡ� perturb �ν���ͤ� hash �Τޤޤ��ȡ�hash �ͤβ��̥ӥåȤ����ͤ��� key ��1���ܤ����Ǥʤ�2���ܤ���ͤ��Ƥ��ޤ��ޤ��͡�)

(�ʤ��� dict ����Ƕ�˲��ɤ��줿 set ���Ǥϡ��ǽ�ϥ���å����Ψ��Ż뤷�ƶ᤯�����Ǥ�õ���Ȥ��ä����ɤ�����Ƥ��ޤ���)

���

�����ץ󥢥ɥ쥹ˡ�Ǥ����Ǥκ���ˤ����դ�ɬ�פǤ����Ȥ����Τϡ�õ���������ΤȤ��ν��ϡ�Ʊ��������������ȯ�������Ȥ�����ߤ��뤫��Ǥ���

���륭��A����������Ȥ����̤Υ���B�Ⱦ��ͤ����̤ξ������������Τˡ������̤Υ���B���������ƶ����ˤʤäƤ��ޤ��ȡ�����A��ޤ�õ������Ȥ��ˡ�����B�����ä����˶����򸫤Ĥ��ơ�����A�ϥϥå���ơ��֥��¸�ߤ��ʤ���Ƚ�Ǥ��Ƥ��ޤ��ޤ���

������򤱤뤿��ˡ��������Ȥ��ϥϥå���ơ��֥��������᤹�ΤǤϤʤ������ߡ����Ǥ������ؤ��ޤ���

�ޤ��� popitem() �Ȥ��� dict �����Ǥ�դ� (key, value) ��������Ĥĺ������᥽�åɤμ����ˤ����դ�ɬ�פǤ��� �ϥå���ơ��֥������õ�����ơ��ǽ�˸��Ĥ������Ǥ��֤������ξ�����ߡ����֤�������ΤǤ���������򷫤��֤��ȥϥå���ơ��֥뤬���ߡ����Ǥ��餱�ˤʤäƤ��äơ����Τ褦�ʥ��르�ꥺ��μ¹Ի��֤� O(n**2) �ˤʤäƤ��ޤ��ޤ���

while d:
    k, v = d.popitem()
    do_something(k, v)

popitem() ��ʿ�ѷ׻��̤� O(1) �ˤ��뤿��ˡ��ϥå���ơ��֥����Ƭ�����Ǥ�����Ф�����֤���̵���ä���������õ��������ˡ���������õ���򳫻Ϥ������ʶ������뤤�ϥ��ߡ�key�����äƤ������Ƭ���Ǥ� me_value �˳�Ǽ���Ƥ����ޤ���

PEP 412: Key-Sharing Dictionary

���Υ��󥿥饯�ƥ��֥��å����Ǥϡ�2�Ĥζ��� dict �Υ�������̤�ɽ�����Ƥ��ޤ���

>>> d = {}
>>> class A: pass
...
>>> a = A()
>>> ad = a.__dict__  # a ��°�����Ǽ���Ƥ��� dict �Υ��󥹥���
>>> d
{}
>>> ad
{}
>>> type(d), type(ad)
(<class 'dict' at 0x109c735b0>, <class 'dict' at 0x109c735b0>)
>>> import sys
>>> sys.getsizeof(d)
288
>>> sys.getsizeof(ad)
96

ξ�����Τ��� dict �ζ��Υ��󥹥��󥹤ʤΤǤ������������� 288 �Х��Ȥ� 96 �Х��Ȥȡ�3�ܶ᤯�κ�������ޤ����ʤ��Ǥ��礦����

�����ǡ��������ά���Ƥ��� PyDictKeysObject �� dk_refcnt �� PyDictObject �� ma_values ���о줷�ޤ���

dk_refcnt �ϻ��ȥ�����ȤˤʤäƤ��ơ�A �Υ��󥹥��� a ���ä��ݡ� a ��°����������� dict ���󥹥��󥹤��ä��塢���� PyDictKeysObject �� dk_refcnt �򥤥󥯥���Ȥ��ơ����饹 A �˥ݥ��󥿤�⤿���ޤ���

���θ塢���饹A�Υ��󥹥��󥹤���ݤϡ����Υ��󥹥����Ѥ� dict ����Ȥ��� PyDictKeysObject ����ΤǤϤʤ������饹A�����äƤ��륪�֥������Ȥ򻲾Ȥ������ȥ�����Ȥ򥤥󥯥���Ȥ��ޤ������Τ褦�ˡ�Ʊ�����饹��ʣ���Υ��󥹥��󥹴֤ǡ� PyDictKeysObject �϶�ͭ����ޤ���

�ϥå���ơ��֥��ͭ���Ƥ���Τǡ� me_value �˳� dict �����ĤϤ����ͤ��Ǽ���뤳�Ȥ��Ǥ��ޤ��� PyDictObject �� ma_values �ˡ� dk_size ��Ʊ���礭���� PyObject* �������������ơ� dk_entries[i].me_value ������� ma_values[i] ���ͤ��Ǽ���ޤ���

dk_entries �ϳ����Ǥ��ݥ���3��ʬ���礭������äƤ�������ǡ� ma_values �ϥݥ���1��ʬ�ǺѤ�Τǡ�����Ǥ��ʤ�Υ�������︺�Ǥ��ޤ���

�ޤ��� dk_usable �ν���ͤ� (dk_size*2)/3 �ǤϤʤ� (dk_size*2+1)/3 �ˤʤäƤ����Τˤ���̩������ޤ���

�̾�� dict �Ǥ� dk_size �κǾ��ͤ� 8 �ʤΤǤ����� key sharing dict �Ǥ� dk_size �� 4 �ˤʤäƤ���ΤǤ��� (4*2)/3 �� 2 �ʤΤ��Ф��ơ� (4*2+1)/3 ��3�ˤʤ�Τǡ����κǾ��� key sharing dict ��3�Ĥ����Ǥ��Ǽ���뤳�Ȥ��Ǥ���ΤǤ���

���η�̡�°����3�İʲ��Υ��󥹥��󥹤� 64bit �Ķ��Ǥ� 96 �Х��Ȥ� dict ��°����������뤳�Ȥ��Ǥ���ΤǤ���

���� key sharing dict �ϡ� Python 3.4 ��Ƴ������ޤ����� (���ʤߤ� 3.4 �ǤϥХ��ǥ��֥��饹��ͭ���ˤʤ�ʤ��ä��Τ��� 3.4.1 �Dz�ä���ޤ�����

������Ũ�ʿ���ǽ���� dict ��ϥå����Ƥ����ͤ�ñ��˼�����ʣ���ˤ�����ͤ��ʤ��Ȥ����ʤ������������䤹�Ȥ��������Ǥʤ������ʤ�Ť���̣�Ƕ줷��뤳�Ȥˤʤ�ޤ���

�����äϼ���ε����Dz��⤷�ޤ���


@methane

songofacandy at 17:01���������URL��Comments(0)��TrackBack(0)
2013ǯ04��11��

���꡼���˲����˲��٤򥢥åפ��ޤ���

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

��ٻ�ġ���֥��꡼���˲��פ�������ޤ��� �ǾҲ𤷤����꡼���˲��Ǥ��������θ�� KLab ��ΰƷ�����Ѥ���Ĥ� ��ƻ�˶�������Ƥ��ޤ��� �Ƕᶯ�����줿����2�ľҲ𤷤ޤ���

���꡼���˲�(KLab/green-hakai)

ʬ������

�����Ҳ𤷤����Υ��꡼���˲��� fork ����ʣ���ץ��������鹶�⤹���������ä��ΤǤ����� execnet �Ȥ����饤�֥����Ѥ��Ƽºݤ˹����Ԥ������ץ��������������褦�ˤ��ޤ�����

execnet �� fork&exec �����Ǥʤ��� ssh ��ͳ�ǥ�⡼�ȥޥ����˳����ץ������� ��뤳�Ȥ��Ǥ��ޤ������꡼���˲��⤳������Ѥ���ʬ�����⤬�Ǥ���褦�ˤʤ�ޤ�����

����ե����� (YAML) �˼��Τ褦�ʥ���������񤯤ȡ����������2�ץ������� attacker �ۥ��Ⱦ�� 4 �ץ������ι��6�ץ��������鹶���ųݤ��뤳�Ȥ��Ǥ��ޤ���

#�˲��Ρ���
nodes:
    - host: localhost  # localhost �ξ��� ssh �ǤϤʤ��� popen ���ޤ�
      proc: 2  # ���� host �ǵ�ư����ץ�������
    - host: ghakai@attacker   # ssh��
      proc: 4

�������Ȥ��ơ������ۥ��Ⱦ�ǹ���ץ�������Ω���夲����⡢���꡼���˲���ư�����ޥ����Ʊ�� �ǥ��쥯�ȥ�ˤ��� Python �����Ѥ���Τǡ����꡼���˲��򥤥󥹥ȡ��뤷���ǥ��쥯�ȥ�� rsync ���ʤˤ���Ʊ�����Ƥ���ɬ�פ�����ޤ���

���꡼���˲��� AWS �ǻȤ���硢1���󥹥������������ǽ��ʪ���ޥ���ۤɤǤʤ� ���Ȥ�¿���Τǡ� Spot Instance ���Ȥ߹�碌�ƻȤ��Τ�������Ǥ���

̾�����

���Υ��꡼���˲������̤ˡ�̾�����䤤��碌�ơ���̤�夫����֤����Ѥ���Ȥ�������̾�����򤷤Ƥ��ޤ�����

�������� Keep-Alive ��̵���Υ����ӥ����Ф�����ٻ����Ȥ���̾����褬�ܥȥ�ͥå��ˤʤä��ꡢ AWS �� ELB �����Ѥ����ץ��������Ȥ��Ф�����ٻ����Ȥ��˥��������DNS����å���Τ����� ������IP���ɥ쥹��ʬ�����ʤ��ä��ꤹ�뤳�Ȥ�����ޤ�����

�����ǡ��ǽ��̾������¹Ԥ�������̤����ƳФ��Ƥ�������³������Ͼ夫���ǤϤʤ��� ����������Ѥ���Ȥ����������ѹ����ޤ�����

��������Ĺ���ֹ�����³�����硢 ELB ���������륢���Ȥ��Ƥ⥰�꡼���˲����ɽ����ޤ��� ��Ȥ�Ȳ�ǽ�ʸ¤� Keep-Alive �����ˡ���³���ڤ�Ƥ����³����̾�����򤷤ʤ�����Ǥ��� ELB ��ͳ����ٻ��Ԥ����ϡ����٥��꡼���˲���¹Ԥ��ƥ������ॢ�åפ��� ELB �򥹥����륢���Ȥ����Ƥ��顢���꡼���˲���Ƽ¹Ԥ��Ƥ���������

�ޤ����פä��褦����٤�������ʤ��ǥ쥹�ݥ󥹥����ब�㲼����Ȥ��� ELB ������� ���ץ��������ڤ�ʬ����Ȥ��� ELB �Υ������ॢ�åפ����ݤʤȤ��Τ��ᡢ���ʬ���� �̤���ľ�ܹ��⤹�뵡ǽ����ܤ��ޤ�����

����ե������ domain �� addresslist ��ξ�����������ȡ���³��� addresslist �������������Ф졢 HTTP �� Host �إå��ˤ� domain �����Ƥ����Ҥ���ޤ���

#������Υɥᥤ��. ����ʳ��Υɥᥤ��Ϲ��⤷�ʤ�.
# Host �إå��ˤ��Υɥᥤ�󤬽񤫤��.
domain: "http://localhost:8889"

#��³�襢�ɥ쥹�ꥹ��. ��ά�������� domain �����Ѥ���.
addresslist:
    - 127.0.0.1:8889
    - localhost:8889

@methane
klab_gijutsu2 at 16:59���������URL��Comments(0)��TrackBack(0)
2012ǯ03��29��

����� Google �ȼ������з衪 Go 1 vs PyPy

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�����ץ��ա���ͥ����פ��Ĥ��ʤ�����4/1�ϵ����ʤ�����ꤢ��ޤ��� methane �Ǥ���

�Ȥ��Ȥ� ���� �ΥС������ 1 ����꡼������ޤ����͡�����ǤȤ��������ޤ��� �ޤ�RC2���ФƤ��餢�ޤ���֤��ФäƤʤ���������ΤǤ������ѥ�����˥��������ȼ�����ξι��å��줽���ˤʤäƹ��Ƥ��Τ��⤷��ޤ���

�����echo�����С��з� ����Ⱦǯ�������Фä��ΤǤ��������δ֤ˤɤ줯�餤��®�������Τ�����®�٥���ޡ����򥢥åץǡ��Ȥ��ޤ�����

echoserver on github
Google Docs Spreadsheet

����Υ���������Ӥ��Ƥߤ�ȡ� Go �� r59 �Ǥ�

Throughput: 52087.16 [#/sec]
Throughput: 52070.02 [#/sec]
Throughput: 52068.27 [#/sec]
���ä��Τ��� Go 1 �Ǥ�
Throughput: 55872.09 [#/sec]
Throughput: 55857.82 [#/sec]
Throughput: 55949.57 [#/sec]
�ȡ���̤���ư������ۤɤǤϤ���ޤ��󤬡���¤�®���ʤäƤޤ��������� PyPy 1.6�Ǥ�
Throughput: 79193.30 [#/sec]
Throughput: 81063.83 [#/sec]
Throughput: 81442.70 [#/sec]
���ä��Τ��� PyPy 1.8 ���ȡ�����
Throughput: 84852.55 [#/sec]
Throughput: 106760.88 [#/sec]
Throughput: 107032.43 [#/sec]

�ʤ�ȡ����󥰥륹��åɤ�C++��epoll�ǡˤ�������ǽ��á���Ф��褦�ˤʤäƤޤ���

����� Go �� PyPy �����ι����Ǥ������ƤޤǤˤϷ��̥���åɺ�®�Ķ��Ǥ��� Haskell �ο����� Haskell Platform �Ȥ����ǥ����ȥ�ӥ塼����󤬽Ф�Ȼפ��Τǡ�������Ԥä�����Ū�˹����������Ȼפ��ޤ���


@methane
klab_gijutsu2 at 12:45���������URL��Comments(0)��TrackBack(0)
2011ǯ12��21��

Ajax��ȯ�Υƥ��ȥġ���Ȥ��Ƥ�Python

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

KLab Advent Calendar 2011 ��DSAS for Social ��٤��뵻�ѡ� ��15���ܤǤ���

�Ƕ�ϥ�������륲����γ�ȯ�Ʒ�������Ƥ��ޤ�����Android/iOS���ץ�γ�ȯ��Ϥ���Ȥ���Ajax�̿��λ��㤬��¿���ʤꡢ��ȯ������������Ѥ�ꤷ�ĤĤ���ޤ���������Web�����ȡ�Web���ץ깽�ۤξ���PC����ӤΥ֥饦���������ɤ��ʤ�����ä��Τ������ޡ��ȥե��󤬲ä��ĤĤ���ޤ���

���ޡ��ȥե���ˤ����ƤϤ���˥��ץ곫ȯ���礭�ʰ�̣������ĤĤ���ޤ������ӻ���ˤ�Java���ץ��BREW���ץ�ʤ�¿�ͤʥ��ץ꤬����ޤ����������ޡ��ȥե��󥢥ץ�Ǥΰ㤤�ϡ������ФȤ��̿�������¿���Ԥ��褦�ˤʤä����ȤǤ������饤����ȥ��ץ��¿���ξ�缫�����⤷����WebView���Ѥ����̿���Ajax���Ȥ��ޤ����ꥯ�����Ȥ�GET�����Ǥʤ�POST��Ȥ�����¿�����ꡢ�֥饦�������ǥ����г�ȯ���ǥХå���ʤ��Τϸ���������¿������ޤ���

����ʤ櫓�Ǻ���Ajax�̿���Ԥ���ñ�ʥƥ��ȥġ��뤬�ۤ����Ȼפäƾ���õ���Ƥߤ��ΤǤ�������Selenium�פȤ����֥饦���١����Υġ���ʳ���������ʤ��褦�Ǥ������䤬�ߤ����ä��Τ�ñ�˰���Ajax�ꥯ�����Ȥȥ쥹�ݥ󥹤Τ��줾����������ͤ򸡺����ơ������̤�ν���������Ƥ뤫�ɤ����򸫤����ä��ΤǤ�������������Ӥˤϥ����С����ڥå��Ǥ�����

�ǽ�ϥ����Ф�ư���ǧ�ˤ�wget��curl�Ȥ��ä����ޥ�ɥ饤��ġ������Ѥ��Ƥ��ޤ���������������Ū�����̳�ǧ��ץ�����ब���顼�ʤ�ư��뤫�ɤ������餤�ˤϻȤ��Ƥ⡢Ajax�쥹�ݥ󥹤�ʣ���ˤʤäƤ���ˤĤ�ƥ쥹�ݥ󥹤�JSON���ͤ����������������ɤ�����Ƚ��ϤǤ��ޤ����ܻ�Ǥγ�ǧ��³�������ޤ������饤����ȥ��ץ꤬���ä�ǧ���׵��������Ƚ�̤���OK/NG���֤����ɤ����Ȥ�������������å��Ȥ����������ͤ��֤����ɤ������ʤɤʤɡ���ȯ���ʤ�ˤĤ��Ajax�����ФιԤ�������ʣ�������ޤ��Τǡ����˥��ߡ����饤����ȡ������Хƥ����ѤΥ�����ץȤ������ߤ����Ȥ����Ǥ���

Python�ˤϥ�˥åȥƥ��ȥ⥸�塼��unittest��ɸ��饤�֥��Ȥ����Ȥ߹��ޤ�Ƥ��ޤ��������HTTP�̿���Ԥ�urllib2��json�⥸�塼���ɸ��Ǥ��Τǡ��������Ȥ߹�碌���Ajax�����Фγ�ȯ���Ϥ˱��뤳�Ȥ��Ǥ��ޤ���

import urllib2
import json

import unittest

session = 'xxxxxxxx'
url = 'http://foo.bar/apps/?p={"session_id":"%s","action":"%s","params":"%s"}'

class TestAjaxProcess(unittest.TestCase):
    def test01(self):
        f = urllib2.urlopen(url % (session, 'hoge_action', 1)) 
        result = json.loads(f.read())
        print result

        # Ajax�쥹�ݥ󥹤ˤ� { "result":"ok", "data":{"response_code":1, ... }} �Τ褦�����Ƥ�����
        self.assertEqual(result['result'], 'ok')
        self.assertEqual(result['data']['response_code'], 1)

    def test02(self):
        f = urllib2.urlopen(url % (session, 'hoge_action', 2)) 
        result = json.loads(f.read())
        print result

        # Ajax�쥹�ݥ󥹤ˤ� { "result":"ng", "data":{"message": }} �Τ褦�����Ƥ�����
        self.assertEqual(result['result'], 'ng')
        self.assertEqual(result['data']['message'], '"params" invalid')

if __name__ == '__main__':
    unittest.main()

����ư����Ǥ���

$ python tester.py
{ u'result':u'ok', u'data': {u'response_code": 1, u'value':100, u'extra_comment': u'hogehoge' }}
{ u'result':u'ng', u'data': {u'message': u'"params" invalid' }}
..
----------------------------------------------------------------------
Ran 2 tests in 0.160s

OK

ɸ��饤�֥�꤬���¤���������ץȸ���Ǥ���С����Τ褦��Ajax�ƥ��ȥ�����ץȤ��ưפ��Ȥ�ޤ������ᤤ����������ѹ�������볫ȯ����ˤ����ơ���������Ajax�ƥ��ȴĶ���·���Ƥ������Ȥϡ����夵��˽����٤��������Ǥ��礦��

klab_gijutsu2 at 12:00���������URL��Comments(0)��TrackBack(0)
2011ǯ03��02��

���������������ȥޥåפ������� �����Υ����ǡ������Ѥ������

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�����iPhone�˥ǡ��������Ѥδʰץ��ץ���ä�������ߡ���¬�����Ȥ����ޤǤǤҤȤޤ������Ȥ������ǡ����ϼ�ä�����ˤϻȤ�ʤ���С����Υ����ǡ������Ѥ����롣�ޤ����˺��������긵�Υ������ǧ���Ƥߤ����櫓�Ǥ��衣

����PING��̤��Ͽ޾��ɽ�����������⤦��ö�ե�������¸������Τ�����PC���Google Maps����Ѥ���Τ��Ǥ��ñ�����ʤΤǤ���ǽФ����Ȥˤ��������ȤϤ��Υ����ǡ�����ɤΤ褦���ݻ����뤫������Web���ץ���Ϥ���AJAXŪ�˥��饤����Ȥ�������褦�ˤ������ȹͤ��Ƥ��롣����ʤ�Хǡ�����DB�ˤ��ޤäơ�Web���ץ�ˤ�������Ф����Ϥˤ����������ҤȤޤ�JSON����Ū�ե�����ˤ����н褹��Ȥ����ʳ�Ū�ʼ������б����롣

����ʤ櫓�ǡ������ե�����βù�����������"LocationPinger[1785:307]"�䡢"latitude"��"longitude"�Ȥ��ä���Ĺ�ʸ���ޤ��Ͻ���롣�����Ǥ��Υ����ˤϰ��־����PING��2���ब���äƤ���Τǡ����줾�����̤��䤹�����롣������CSV�����˽स�ƥץ�����������ߤ䤹�������ˤ��褦��

% sed -e 's/ LocationPinger[[^]]*]/,/' 
          -e 's/latitude /latlng,/' 
          -e 's/longitude //' 
          -e 's/, #/,ping,/' 
          -e 's/ sent/, sent/' 
          -e 's/ received/, received/' 
          -e 's/ send/ , send/' 
          -e 's/, /,/g' < (log file)

CSV��2������ܤˡ�PING=ping�Ȱ��־���=laglng�Ȥ������줾��ζ��̤򼨤��������ɲä�����

�ޤ�����1����ब����ΤޤޤˤʤäƤ��뤬�������ǡ����ε�Ͽ���ϻ�����������л��֤��֤������롣�ʤ�����ʤ��Ȥ򤹤뤫�ȸ����ȡ����־����������֤��뤿�����

def at_location(t):
    i = 0
    while t > locations[i + 1][0] and i + 1 < len(locations):
        i += 1
    (t0, p0, q0) = locations[i]
    (t1, p1, q1) = locations[i + 1]

    dt = t1 - t0
    dp = p1 - p0
    dq = q1 - q0

    return (p0 + dp * (t - t0) /  dt, q0 + dq * (t - t0) / dt)

���������󿷴����Ȥ�����®��ư���ʤ���Υǡ��������Ȥʤ뤿�ᡢ0����޲��äδֳ֤Ǥ��äƤ⤫�ʤ�ε�Υ���ư���Ƥ���׻��ˤʤ롣�Ǥ�ᤤlatlng�Υǡ����Ǵ֤˹�碌�Ƥ⤤���������٤Ƥ�latlng�ǡ����ˤϥ����ॹ����פ����뤳�Ȥ�ͤ���С����Υ����ॹ����פ����Ϥˤ����ؿ� x = f(t), y = g(t) ���������С�Ǥ�դλ����Ǥΰ��֤򤽤������μ�֤Ƿ׻��Ǥ��뤳�Ȥˤʤ롣�������Τ�(����)��֤���

import datetime
import sys

f = sys.stdin
dt0 = None

def __read_datetime(s):
    dt0 = s.split(' ')
    dt1 = dt0[1].split('.')
    fd = dt0[0].split('-')
    ft = dt1[0].split(':')

    da = [int(x) for x in fd + ft + [dt1[1] + '000']]
    dt = datetime.datetime(*da)
    return dt

for line in f.readlines():
    line = line.rstrip()
    fs = line.split(',', 2)
    dt = __read_datetime(fs[0])
    if not dt0:
        dt0 = dt
    d = dt - dt0
    print "%d,%s,%s" % (d.seconds * 1000 + d.microseconds / 1000, fs[1], fs[2])

�����ޤǤǥ����ǡ�������������ʬ�ʤ��������ˤ����ץ��������ǰ����٤Υǡ�����¤�˹�碌�ƺ��������롣�ǽ�Υ�����������1��ʬ��ñ�̤Ȥ����ݻ������褿����PING�������ȼ��������줾��ɳ�Ť��Ƥ���Τǡ��б��������Ʊ�Τ�ޤȤ�ƿ����ʰ�ĤΥǡ���ñ�̤Ȥʤ�褦�ˤ�������

for line in sys.stdin.readlines():
    line = line.rstrip()

    fs = line.split(',')
    fs[0] = long(fs[0])

    if fs[1] == 'ping':
        d = None
        fs[2] = int(fs[2])
        if fs[2] in pings:
            d = pings[fs[2]]
        else:
            d = {}
            pings[fs[2]] = d
        if fs[3] in ('sent', 'received'):
            d[fs[3]] = fs[0]
    elif fs[1] == 'latlng':
        locations += [(fs[0], float(fs[2]), float(fs[3]))]

"ping"�ιԤ���3������PING�������������󥹤��ֹ�򼨤��Ƥ��롣"if fs[1] == 'ping':"�ι԰ʹߤǡ�Ʊ��Υ��������ֹ�����"sent"��"received"���Ȥ��ꡢ��Ĥ�Ϣ������Ȥ��ƤޤȤ�Ƥ��롣�ޤȤ᤿Ϣ������ϡ������pings������༡�ɲä��Ƥ��롣

����ˡ����־���Υ���ȥ����ֽ��locations���������ơ����Ҥ�������֤Τ���Υǡ����Ȥ��ƻȤä���PING�������Τ��줾�쥿���ॹ����פ���Ѥ��Ƴƻ����Ǥΰ��־������ꤷ�Ƽ��������

for k in pings:
    p = pings[k]
    if 'sent' in p:
        p['sent'] = (p['sent'],) + at_location(p['sent'])
    if 'received' in p:
        p['received'] = (p['received'],) + at_location(p['received'])

���Ȥϡ��������Ĥ�JSON���Ϥˤ��ƽ���夬��Ǥ��롣

result = {"locations":locations, "events":list(pings[k] for k in sorted(pings.keys())) }

print json.dumps(result)
{"locations": [
  [0, 39.158541999999997, 141.18367799999999],
  [606, 39.149102999999997, 141.187062],
  [1641, 39.149863000000003, 141.18681799999999],
  [2629, 39.150553000000002, 141.186599],
  [4189, 39.151201, 141.18638999999999],
  [4668, 39.151829999999997, 141.18618599999999],
  ...
], "pings": [
  {"received": [734, 39.149196990338162, 141.18703182415459], "sent": [581, 39.149492397689762, 141.18692239603959]},
  {"received": [1689, 39.149896522267213, 141.18680736032388], "sent": [1584, 39.149821144927536, 141.18683143768115]},
  {"received": [2696, 39.150580830769236, 141.18659002371794], "sent": [2584, 39.150521572874496, 141.18660897469636]},
  {"received": [3674, 39.15098707692308, 141.18645899679487], "sent": [3584, 39.150949692307691, 141.18647105448719]},
  {"received": [4757, 39.151889238247861, 141.18616726816239], "sent": [4584, 39.151719695198324, 141.18622177453025]},
  {"received": [5766, 39.152556356000005, 141.18595579000001], "sent": [5584, 39.152439688034192, 141.18599320940172]},
  ...
]}

���������褤�褳���Ȥä�Google Maps���ɽ�����Ƥߤ褦����ʤ��Ǥ�����

<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="jquery-1.5.1.min.js"></script>
<script type="text/javascript">

var map = null;
function initialize() {
  var y = (39.158542 + 39.701141) / 2;
  var x = (141.183678 + 141.136431) / 2;
  var latlng = new google.maps.LatLng(y, x);
  var myOptions = {
    zoom: 10,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

$(document).ready(function() {
    initialize();

    $.ajax({
        url: 'pinglog.json',
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            $.each(data['events'], function(i, ev) {
                var loc0 = null, loc1 = null, t0 = null, t1 = null, thickness = 1;
                if ('sent' in ev) {
                    loc0 = new google.maps.LatLng(ev['sent'][1], ev['sent'][2]);
                    t0 = ev['sent'][0];
                }
                if ('received' in ev) {
                    loc1 = new google.maps.LatLng(ev['received'][1], ev['received'][2]);
                    t1 = ev['received'][0];
                }

                if (loc0 != null && loc1 != null) {
                    var dt = t1 - t0;
                    if (dt <= 100) {
                        thickness = 20;
                    } else if (dt <= 200) {
                        thickness = 12;
                    } else if (dt <= 400) {
                        thickness = 7;
                    } else if (dt <= 1000) {
                        thickness = 4;
                    } else if (dt <= 2000) {
                        thickness = 2;
                    }

                    var path = new google.maps.Polyline({
                        path: [loc0, loc1],
                        strokeColor: "#FF0000",
                        strokeOpacity: 1.0,
                        strokeWeight: thickness 
                    });
                    path.setMap(map);
                    google.maps.event.addListener(path, 'click', function() {
                        alert('clicked')
                    });
                }
            });
        }
    });
});
</script>
</head>
<body>
  <div id="map_canvas"></div>
</body>
</html>

���ޤ��������ޤ����賧����

���̤���ǧ�Ǥ����ս�Ǥ�PING������������������������������ޤǤδ֤�����������Ƥ��ꡢRTT�λ��֤�û�����û�����������ˤ��Ƥ��롣����Ǹ���ȡ��������ɱؤ��������ؤޤǤδ֡����ͤɤ��Ǥ�Softbank 3G�����Ȥ򽦤��Ƥ������Ȥ�ʬ���롣�����������礦�ɲִ��ԤΤ�����ǤϤä�����򤬤Ǥ��Ƥ��롣����ϡ����ִ�����¦�ˤ���ִ��ȥ�ͥ�ȹ⾾�ȥ�ͥ�Ȥ�����ĤΥȥ�ͥ�Τ��������Ȥ��Ϥ��ʤ��ʤä�����Ǥ��ꡢ�ޤ�����ξ�ȥ�ͥ�֤��Ͼ������֤ˤϥͥåȥ������ã���������Ǥ��ʤ��ä����Ȥ��̣���Ƥ��롣�����餯�������ְ�ư�ʤɤǷ�¬����аۤʤ��̤��Ф���������Ȥ���¬����롣

�ޤ���¾�ˤ�ȥ�ͥ�Ȥϴط��ʤ��꡹PING��̤��ץ��åȤ���Ƥ��ʤ��ս꤬���뤳�Ȥ�ʬ����Ȼפ����Ҷ��̿��ȽŤ͹�碌�Ƹ���ȡ��ͲȤ����ڤ쵤̣�ˤʤä��꿹�����Ӥ��ä��ꤷ�Ƥ��ơ����϶ɤ���󤫤ä��Τ��Ȥ��ɴ֤Υϥ�ɥ����С��˼��Ԥ����Τ��������Ȥ�������������¬���Ƥߤ�Τ����򤤤����������ʤߤˡ��������ɤ����ء��������̤˸������Ȥ�äȥȥ�ͥ뤬¿���Τǡ������ư��¿����������Τ���ǡ��������뤳�Ȥ�����������ɤ��Ȥ��Ϥ�ä��Ѱդ�ʤ�Ƥ�����Ǥ�ǡ���������褦�ˤ��Ƥ��������Ȥ�����

�Ȥ����櫓�ǡ������ޤǤǥǡ����ε�Ͽ�Ƚ��ϤϤǤ���褦�ˤʤä������饤����ȥ����ɤ�ư��ڥ�ǥ뤬���褿���Ȥˤʤ롣�Ĥ�ϥ����ФؤΥǡ������ѡ����������äƸ������餤�ʤ�Ǥ����餵���������󡢳�������ͤ�ϡ����äȡ����äȡ��������ƤĤʤ��äƤ����櫓�Ǥ��褪�����������ļ���Ϥ��褤�褽�Τؤ�ε�ǽ��������ޤ����ɤΤؤ�

(������ �Ҥ��Τ�)

klab_gijutsu2 at 10:01���������URL��Comments(0)��TrackBack(0)
2010ǯ08��31��

Python�Υץ��ե������̤�GUI�Dz��Ϥ���

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

¥¨¥­¥¹¥Ñ¡¼¥ÈPython¥×¥í¥°¥é¥ß¥ó¥°
�פ��֤�Υ������ѡ���Python�ץ�����ߥ���­�����Ǥ�������ϥץ��ե�����󥰤���­�Ǥ���

Python��ɸ��饤�֥��˥ץ��ե�����(profile/cProfile�⥸�塼���Profile���饹)����äƤ��ơ� ���η�̤��Ǽ���Ƥ���pstats.Stats���饹�ˤϥץ��ե������̤���Ϥ���Τ�ɬ�פʵ�ǽ(�¹Ի��֤ǤΥ����Ȥ䡢�ƤӽФ������ƤӽФ����ɽ���ʤ�)�����̤ꤽ���äƤ��ޤ��������Υ��饹�ˤĤ��Ƥϥ������ѡ���Python�ץ�����ߥ󥰤ǻȤ�������⤷�Ƥ���ޤ���

���ޥ�ɥ饤��Ǻ�Ȥ���Ȥ��ˤ�IPython����Stats���֥������Ȥ�ľ�����ƥץ��ե������̤�Ĵ�٤���ΤǤ�������Ϥ�ץ��ե������̤ϥ���ե������ɽ�����Ƥ��줿�������䤹����ΤǤ����äˡ֥������ѡ���Python�ץ�����ߥ󥰡פ���Ǥ���ڤ���Ƥ���KCacheGrind�Ȥ���GUI�ġ�������˶��Ϥǡ����ٻȤ��ȼ������ޤ���

KCacheGrind���б����Ƥ���callgrind�����ϡ�������Valgrind�Υġ���ΰ�ĤǤ���Callgrind�Τ�ΤǤ������� �Ƕ�ϥץ��ե������̤���¸����ե����ޥåȤȤ��ƹ����Ѥ����Ƥ��ޤ���callgrind�����ե�����Υ֥饦���Ȥ��Ƥ�KCacheGrind�ʳ��ˤ⡢Windows��ư��WinCacheGrind��PHP���ǥ֥饦�����ɽ������webgrind ��������ޤ�����PHP��xdebug�˴ޤޤ��ץ��ե������callgrind�����ǥץ��ե������̤���¸���ޤ���

���ҤǤ�����Ū��callgrind�����Υץ��ե������̤�ͭ���Ƥ��ơ����Τ���˼����Web�ġ���ޤ��Ѱդ��Ƥ��ޤ���(�Ҳ𵭻�: PHP Xdebug ��Profile�μ�ڤʶ�ͭ�ġ�����ä���)

��������Stats���饹��callgrind�����ˤ��б����Ƥ��餺���ץ��ե������̤���¸����Ȥ��Υե�����ե����ޥåȤ��ȼ��ե����ޥå�(Stats�������ѿ���marshal��������¸�������)�ˤʤäƤ��ޤ������ΤޤޤǤϡ�Python�Υץ��ե������̤�KCacheGrind��ɽ�����뤳�Ȥ��Ǥ��ޤ��� �����ǡ�Stats���֥������Ȥ�callgrind��������¸���뤿���lsprofcalltree.py�����Ѥ��ޤ���

lsprofcalltree.py�ϡ����ޥ�ɥ饤��ġ���Ȥ��� $ lsprofcalltree.py ������ץȥե����� �Ȥ����Ȥ�����Ǥ��ޤ��������ץꥱ���������Ȥ߹���ǻȤ����Ȥ�Ǥ��ޤ����㤨��Bazaar�Ǥ� $ bzr --lsprof-file callgrind.out status�Τ褦�˼¹Ԥ���ȥץ��ե������̤�callgrind�����ǽ��Ϥ���褦�ˤʤäƤ��ޤ���

�ץ��ե������̤򸫤䤹���ӥ��奢�饤���Ǥ���Ķ��������ȡ����ץꥱ�������Υ��塼�˥󥰤��ڤ����ʤ�ޤ��� KCacheGrind����GUI�ġ����callgrind�����Υե��������Ϥ���ץ��ե�����ϡ�Python�ץ�����ޤ˸¤餺�ߤ�ʾ������Ƥ����Ȥ����Ȼפ��ޤ���


@methane
klab_gijutsu2 at 21:21���������URL��Comments(0)��TrackBack(0)
2010ǯ06��18��

Twisted vs Tornado vs Go ����Ʊ��Web�����С��з�

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

������ takada-at �ε����ǡ֥����С�¦�Ǥ�ñ���100ms�ԤäƤ���쥹�ݥ󥹤��֤������Υڡ������Ѱդ��Ƥ������פȤ��ä��ΤǤ����������Ϥ��Υ����С�¦���ä򤷤ޤ���

��Ȥ�Ȥ��Υ����С����ä�ư���ϡ�takada-at �����������ٻ�����ƥब�������������٤򤫤����뤫�ɤ����򸡾ڤ��뤿��Ǥ����� �����˥쥹�ݥ󥹤��֤��Ƥ��ޤ��ȡ���ٻ������ץȤ���������������٤򤫤����ʤ��Ƥ� PV/sec ���ФƤ��ޤ��ޤ��� �����ǡ� epoll ��Ȥäƹ�®��������³�򰷤���Twisted�ե졼������Ȥäơ�100ms���ٱ�򤷤ĤĿ���PV/sec���Ѥ���Web�����С����äƤߤޤ����� ����ˡ�Ʊ���� epoll ��ȤäƤ��� Tornado �� Go �ˤⶽ̣�����ä��Τǡ�������Ǥ�Ʊ����Τ���������ѥե����ޥ󥹤���Ӥ��Ƥߤޤ�����

������

�ޤ��ϡ������ɤ򸫤Ƥߤޤ��礦��

Twisted Python:

from twisted.internet import epollreactor
epollreactor.install()

from twisted.web import server, resource
from twisted.internet import reactor

class Lazy(resource.Resource):
    isLeaf = True
    def __init__(self, delay=0.1):
        self._delay = delay

    def render_GET(self, request):
        def after():
            request.write('Hello, World!')
            request.finish()
        reactor.callLater(self._delay, after)
        return server.NOT_DONE_YET

if __name__ == '__main__':
    import sys
    delay = 0.1
    try:
        delay = float(sys.argv[1]) / 1000
    except Exception:
        pass
    site = server.Site(Lazy(delay))
    reactor.listenTCP(8000, site)
    reactor.run()

���ϡ�Tornado�Ǥ���

from tornado import httpserver, ioloop, web

from time import time

DELAY = 0.1

class MainHandler(web.RequestHandler):
    @web.asynchronous
    def get(self):
        def _hello():
            self.write("Hello, World!")
            self.finish()
        ioloop.IOLoop.instance().add_timeout(time() + DELAY, _hello)

application = web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    import sys
    try:
        DELAY = float(sys.argv[1]) / 1000
    except Exception:
        pass
    http_server = httpserver.HTTPServer(application)
    http_server.listen(8001)
    ioloop.IOLoop.instance().start()

�Ǹ�ˡ�Go�Ǥ���

package main

import (
    "flag"
    "http"
    "io"
    "log"
    "time"
    )

var addr = flag.String("addr", ":9000", "http service address")
var delay = flag.Int64("delay", 100, "response delay[ms]")

func main() {
    flag.Int64Var(delay, "d", 100, "response delay[ms]")
    flag.Parse()
    http.Handle("/", http.HandlerFunc(hello))
    err := http.ListenAndServe(*addr, nil)
    if err != nil {
        log.Exit("ListenAndServe:", err)
    }
}

func hello(c *http.Conn, req *http.Request) {
    time.Sleep(int64(1000000) * int64(*delay))
    io.WriteString(c, "Hello, World!\n")
}

Twisted��Tornado�ϡ��롼�פ˸�ǸƤӽФ��ؿ�����Ͽ���Ƥ��Ƥ������餫�˥��٥�ȥɥ�֥�ե졼�����Ȥ������������ޤ��� ������Ф���Go�� Sleep() ��ȤäƤ��ơ��츫���̤Υ���åɤ١�������������˸����ޤ��� ��������Go�ϥͥ��ƥ��֥���åɤǤϤʤ�goroutine�Ȥ������̤ʥ桼�������ɥ���åɤ����Ѥ��Ƥ��ꡢ���Υ������塼��ϡ�Linux�ξ���epoll�����Ѥ��Ƥ��ޤ����̾�Υ���åɤ�Ȥ������ΨŪ��ư���Ϥ��Ǥ���

�٥���ޡ���

����Ǥϡ�����3�Ĥˤ��줾����٤򤫤��Ƥߤޤ��礦���Ȥ��äƤ⡢100ms���ٱ������٤򤫤���Τ����ѤʤΤǡ�10ms���ٱ�Ǽ¹Ԥ���ab -c100 -n10000�Ǽ¸����Ƥߤޤ���

Twisted:
Requests per second:    2620.31 [#/sec] (mean)
Time per request:       38.163 [ms] (mean)
Time per request:       0.382 [ms] (mean, across all concurrent requests)

Percentage of the requests served within a certain time (ms)
  50%     31
  66%     32
  75%     33
  80%     37
  90%     38
  95%     38
  98%     40
  99%     44
 100%   3082 (longest request)


Tornado:
Requests per second:    5299.04 [#/sec] (mean)
Time per request:       18.871 [ms] (mean)
Time per request:       0.189 [ms] (mean, across all concurrent requests)

Percentage of the requests served within a certain time (ms)
  50%     19
  66%     19
  75%     19
  80%     19
  90%     19
  95%     19
  98%     21
  99%     22
 100%     33 (longest request)


Go:
Requests per second:    4712.63 [#/sec] (mean)
Time per request:       21.220 [ms] (mean)
Time per request:       0.212 [ms] (mean, across all concurrent requests)

Percentage of the requests served within a certain time (ms)
  50%     19
  66%     20
  75%     20
  80%     21
  90%     32
  95%     40
  98%     42
  99%     42
 100%     48 (longest request)

Tornado��Go����٤�ȡ�Twisted����ǰ�ʷ�̤ˤʤäƤ��ޤ��� ����ϡ�Twisted�����Ū����Ū�ǹⵡǽ�ʥե졼�����Ȥ������Ȥ⤢��ޤ������ٱ�¹Ԥ���ؿ���ꥹ�Ȥ˳�Ǽ���Ƥ��ơ��¹Ԥ���ؿ������뤫�ɤ�����ꥹ�Ȥ����������å����Ƥ���Τ��礭�����Ǥ�����Tornado�ϥ����ȺѤߥꥹ�Ȥ����Ѥ��Ƥ��Ƥޤ���

Go�⡢����ѥ��鷿�ʤΤ�Tornado���餱�Ƥ�Τ���ǰ�Ǥ�����epoll����ľ�ܥ��٥�ȥɥ�֥󤷤Ƥ���Tornado����٤�� goroutine �Ȥ�����ݲ��쥤���1��Ϥ���Ǥ���Τǻ����ʤ����⤷��ޤ���

����˹�®��

�ޤ���Tornado��JIT�ˤ���®����ĩ�路�Ƥߤޤ���PyPy-1.2�����֤褵�����Ǥ��������åȥ��åפ����ݤʤΤǤ���ڤ�psyco��ȤäƤߤޤ�������ȤΥ����������ɤˡ�����2�Ԥ��ɲä��ޤ���

import psyco
psyco.full()

��̤Ϥ����ʤ�ޤ�����

Requests per second:    7503.16 [#/sec] (mean)
Time per request:       13.328 [ms] (mean)
Time per request:       0.133 [ms] (mean, across all concurrent requests)

Percentage of the requests served within a certain time (ms)
  50%     13
  66%     13
  75%     14
  80%     14
  90%     14
  95%     14
  98%     15
  99%     15
 100%     23 (longest request)

5299req/sec => 7503req/sec �ǡ�20��ʾ��®���Ǥ��ޤ�����top�Ǹ��Ƥ���¤ꡢ���������(RES)��1MB�ʲ��Ǥ���Tornado+psyco������ͥ���Ǥ��͡�

���ˡ�Go�ǥޥ������åɲ����Ƥߤޤ���goroutine��ʣ���Υͥ��ƥ��֥���åɤ����Ѥ��������ư��뤳�Ȥ��Ǥ��ޤ������������������ǤϤޤ��������塼�餬�褯�ʤ��餷�����ǥե���ȤǤϥޥ������åɤ�Ȥ�ʤ��褦�ˤʤäƤ��ޤ����Ķ��ѿ� GOMAXPROCS �����������ꤷ�Ƽ¸����Ƥߤޤ�����

GOMAXPROCS=6 ��:
Requests per second:    5760.33 [#/sec] (mean)
Time per request:       17.360 [ms] (mean)
Time per request:       0.174 [ms] (mean, across all concurrent requests)

Percentage of the requests served within a certain time (ms)
  50%     16
  66%     17
  75%     17
  80%     18
  90%     28
  95%     33
  98%     37
  99%     40
 100%     53 (longest request)

�¸��ޥ����Core2 Duo��2���������ܤäƤ��ʤ�(Hyper Threading��ʤ�)�ʤΤǤ�����2����ꤷ�Ƥ⤢�ޤ���ǽ���夬�餺����������1�Ĥ��Ŀ�����夲�Ƥ��ä��Ȥ���6�ޤǤϾ���������ǽ�����夷�Ƥ����ޤ����������⡢top�򸫤Ƥ���¤�CPU����Ψ�Ϻ����200%�ˤ������Ϥ���120%�ʲ��������ѤǤ��Ƥ��ޤ��� CPU�򸶰���Ƚ��ޤ��󤬡�����Τ褦�ʥ��٥�ȥ롼�פ�إӡ��˻Ȥ����Ӥˤϥ������塼�餬��Ŭ������Ƥ��餺����äȥ����С�¦��CPU�����Ѥ���׻���Ԥ������򤷤ʤ��ȥޥ��������Ȥ�����ʤ��Τ��⤷��ޤ���

Go�Ϻ���Υ������Ǥ�Tornado���餱�Ƥ��ޤ��ޤ�������IO¿�Ų��򥤥٥�ȥɥ�֥��ꥷ��ץ�˵��ҤǤ�������ѥ��뷿����ʤΤ�ʣ���ʷ׻���Python��갵��Ū�˹�®�˷׻��Ǥ������ʤΤǡ����˴��Ԥ��Ƥ��ޤ���


@methane
klab_gijutsu2 at 18:37���������URL��Comments(0)��TrackBack(0)
2010ǯ05��28��

Python������ɽ���Ϥʤ�®����

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

�֥������ѡ���Python�ץ�����ߥ󥰡פ�ȯ�䤬��Amazon������ν�Ź�ǻϤޤ�ޤ�����

¥¨¥­¥¹¥Ñ¡¼¥ÈPython¥×¥í¥°¥é¥ß¥ó¥°ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ñ¡ï¿½ï¿½ï¿½Python�ץ�����ߥ�
���ԡ�Tarek Ziade
���丵��������������ǥ��������
ȯ������2010-05-28
�������ߤ򸫤�

����ϡ��֥������ѡ���Python�ץ�����ߥ󥰡פ�2�Ϥ��顢�ꥹ������ɽ���ˤĤ�����­���ޤ��� �ܽ�ǡ��ꥹ������ɽ����®����ͳ�ˤĤ��ơ����Τ褦��������񤭤ޤ�����

�������ꥹ�Ȥ����Ǥ� append() �����硢���󥿥ץ꥿�ϡ֥ꥹ�Ȥ��� append °������Ф��Ƥ����ؿ��Ȥ��ƸƤӽФ��פȤ��������򤷤ʤ���Фʤ�ޤ��� ������Ф��ơ��ꥹ������ɽ����Ȥ��ȡ����󥿥ץ꥿��ľ�ܡ֥ꥹ�Ȥ����Ǥ��ɲä���פȤ��������򤵤��뤳�Ȥ��Ǥ��ޤ������󥿥ץ꥿����᤹��̿��������롢°���μ��Ф������פˤʤ롢�ؿ��ƤӽФ������פˤʤ롢�Ȥ���3�Ĥ���ͳ�ǡ��ꥹ������ɽ����Ȥ���®���ʤ�ޤ���

����Ϥ������������ƤˤĤ��ơ��ܤ������Ƥ����ޤ��礦�������ʤ�Ǥ���������ɽ����Ȥ��ؿ��ȻȤ�ʤ��ؿ����Ѱդ��ơ��¹�®�٤ȥХ��ȥ����ɤ���Ӥ��Ƥߤޤ���

In [1]: def sample_loop(n):
   ...:     L = []
   ...:     for i in xrange(n):
   ...:         L.append(i)
   ...:     return L
   ...:

In [2]: def sample_comprehension(n):
   ...:     return [i for i in xrange(n)]
   ...:

In [3]: %timeit sample_loop(10000)
1000 loops, best of 3: 1.03 ms per loop

In [4]: %timeit sample_comprehension(10000)
1000 loops, best of 3: 497 us per loop

In [5]: from dis import dis

In [6]: dis(sample_loop)
  2           0 BUILD_LIST               0
              3 STORE_FAST               1 (L)

  3           6 SETUP_LOOP              33 (to 42)
              9 LOAD_GLOBAL              0 (xrange)
             12 LOAD_FAST                0 (n)
             15 CALL_FUNCTION            1
             18 GET_ITER
        >>   19 FOR_ITER                19 (to 41)
             22 STORE_FAST               2 (i)

  4          25 LOAD_FAST                1 (L)
             28 LOAD_ATTR                1 (append)
             31 LOAD_FAST                2 (i)
             34 CALL_FUNCTION            1
             37 POP_TOP
             38 JUMP_ABSOLUTE           19
        >>   41 POP_BLOCK

  5     >>   42 LOAD_FAST                1 (L)
             45 RETURN_VALUE

In [7]: dis(sample_comprehension)
  2           0 BUILD_LIST               0
              3 DUP_TOP
              4 STORE_FAST               1 (_[1])
              7 LOAD_GLOBAL              0 (xrange)
             10 LOAD_FAST                0 (n)
             13 CALL_FUNCTION            1
             16 GET_ITER
        >>   17 FOR_ITER                13 (to 33)
             20 STORE_FAST               2 (i)
             23 LOAD_FAST                1 (_[1])
             26 LOAD_FAST                2 (i)
             29 LIST_APPEND
             30 JUMP_ABSOLUTE           17
        >>   33 DELETE_FAST              1 (_[1])
             36 RETURN_VALUE

�¹�®�٤ϡ��ꥹ������ɽ���������ܰʾ�®���Ǥ��͡� �Х��ȥ����ɤˤĤ��ƤϾܤ����ϲ��⤷�ޤ��󤬡� sample_loop�� "19 FOR_ITER" ���� "38 JUMP_ABSOLUTE" �ޤǤ�8̿�ᡢsample_comprehension�� "17 FOR_ITER" ���� "30 JUMP_ABSOLUTE" �ޤǤ�6̿�᤬�롼�פˤʤäƤ��ޤ��� ���󥿥ץ꥿�Ϥ�����̿����ɤ߹���Ǽ¹ԤȤ����롼�פ�ԤäƤ���Τǡ��ޤ���̿����κ︺����®������ͳ��1�Ĥˤʤ�ޤ��� ����ˡ��롼�פ���ν����ˤĤ��Ƹ��Ƥ����ޤ��礦��

1. append°���μ��Ф�

sample_loop �ΥХ��ȥ����ɤǡ� "23 LOAD_ATTR" �Ȥ�����ʬ���� "L" �Ȥ����ѿ���������ɤ������֥������Ȥ��� "append" �Ȥ���°������Ф��Ƥ��ޤ��� °���λ��Ȥ��ɤ줯�餤�Ť������ʤΤ��� °���λ��ȤϤ���ʤ�ˡֽŤ��׽����Ǥ�����ˡ� append °���λ��Ȥ�롼�פγ����ɤ��Ф��Ƥߤޤ��礦��

In [19]: def sample_loop2(n):
   ....:     L = []
   ....:     append = L.append
   ....:     for i in xrange(n):
   ....:         append(i)
   ....:     return L
   ....:

In [20]: %timeit sample_loop2(10000)
1000 loops, best of 3: 549 us per loop

�ꥹ������ɽ�������Ѥ���������٤�1�����٤����٤�����ޤ��󡣼¤ϡ����Υ����ɤΥ����С��إåɤ���Ⱦ�ϡ�append°���λ��Ȥˤ��ä��Ȥ������ˤʤ�ޤ���

���ʤߤˡ��Х��ȥ����ɤϺܤ��Ƥ��ޤ��󤬡�LOAD_ATTR��̵���ʤä�ʬ̿�����8̿�ᤫ��7̿��˺︺����Ƥ��ޤ���

2. �ؿ��θƤӽФ�

�ꥹ������ɽ����®���Ĥ�1�����ͳ�ϡ� "29 LIST_APPEND" �Ȥ���̿��ˤ���ޤ���

����ɽ����Ȥ�ʤ����ϡ� "13 CALL_FUNCTION" �ˤ�äơ� append ���Python�δؿ��Ȥ��Ƽ¹ԡפ���ɬ�פ�����ޤ������Ρ�Python�δؿ��Ȥ��Ƽ¹ԡפȤ����Τϡ� �����å���������ꥹ�Ȥ��������ɬ�פ����ä��ꡢ�ƤӽФ����ؿ������ǰ����Υ����å��򤷤Ƥ����ꡢ�ؿ�������ͤν���("37 POP_BACK" �ʤ�)��ɬ�פˤʤ�ޤ���

������Ф��ơ� "LIST_APPEND" �Ȥ���̿��ϥꥹ�ȥ��֥������Ȥ����Ǥ��ɲä������Ѥ�̿��ʤΤǡ������Ǥϥꥹ�Ȥؤ����Ǥ��ɲäΤߤ��Ԥ���褦�ˤʤ�ޤ���

�ޤȤ�

�ꥹ������ɽ����Ȥ���®���ʤ���Ȥߤ򡢥Х��ȥ����ɥ�٥�Dz��⤷�ޤ�������äȲ��ޤ��Τꤿ�����ϡ�Python�Υ����������ɤ� ceval.c �Ȥ����ե����뤫�顢 CALL_FUNCTION �� LIST_APPEND �ν����򤷤Ƥ�����ʬ���ɤäƤߤƤ���������

�ޤ���®���ʤ���ͳ����Ⱦ�ϡ�°���λ��ȥ����Ȥˤ���ޤ��������Υ����Ȥϡ�����ɽ����Ȥ�ʤ��Ƥ⡢�᥽�åɤ�롼�פμ����ǥ��������ѿ�����������Ȥ����ƥ��˥å��Ǥ����Ǥ��ޤ������Υƥ��˥å��ϥꥹ�Ȥ�append�᥽�åɰʳ��ˤ�Ǥ�դ�°�������ѤǤ���Τǡ��ܥȥ�ͥå��ˤʤ뤫�⤷��ʤ��롼�פ�񤯤Ȥ��ˤ��Ѷ�Ū�����Ѥ��ޤ��礦��


@methane
klab_gijutsu2 at 17:25���������URL��Comments(2)��TrackBack(0)
2010ǯ03��02��

Windows��fopen��ȤäƤϤ����ʤ�!?

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

Windows�Ķ���svn+ssh:// ����� bzr branch �˼��Ԥ���Ȥ�����𤬤��ꡢĴ�٤Ƥߤ��Ȥ������򤤤��Ȥ�Ƚ�ä��Τǵ����ˤ��Ƥ����ޤ���

�ޤ���bzr-svn��subvertpy�Ȥ���libsvn�ΥХ���ǥ��󥰤����Ѥ��Ƥ��ơ�svn+ssh://�ץ��ȥ���Υϥ�ɥ�󥰤�libsvn���ԤäƤ��ޤ��� ���Τ��ᡢbzr+ssh://�Ǥ�Python����SSH���饤����ȤǤ���paramiko�����Ѥ��Ƥ���Ķ��Ǥ⡢svn+ssh://�ξ���libsvn��ssh.exe��SVN_SSH�Ķ��ѿ������ꤵ�줿ssh���饤����Ȥ�ư���Ƥ��ޤ��� ���putty�����Ѥ��Ƥ���Τǡ�SVN_SSH=plink�����ꤷ��svn+ssh�����ѤǤ���Ķ����Ѱդ������꤬�Ƹ����뤳�Ȥ��ǧ���ޤ�����

������ȥ졼���Хå����ɤäƤߤ��Ȥ���������ե�������ۤ���ݤ˰���ե�����˽񤭹��ߤ��Ƥ��äƺǸ�˥����������Ƥ�����Ū�Υե�����̾�˥�͡��ह�롢�Ȥ��������å��Υ�͡������ʬ��Permission Error��ȯ�����Ƥ��ޤ�����

�����������顼�θ����ˤʤäƤ���ե�����ϡ���͡���ľ���˳μ¤�close()����Ƥ��ޤ��� �ʤ�Permission Error��ȯ�����Ƥ���Τ���Ĵ�٤뤿���Process Monitor�dz����ե�����˴ؤ��륷���ƥॳ������ɤäƤߤ��Ȥ�����

  • Bazaar���ե������close()���Ƥ��륿���ߥ󥰤ǡ�CloseFile()��ȯ�Ԥ���Ƥ��ʤ�
  • �ʤ������顼ȯ�����plink.exe����CloseFile()����Ƥ���

�Ȥ�������Ƚ��ޤ�����

�ǽ�ϡ֤ʤ��plink.exe��Bazaar�λȤäƤ���ե�����Υϥ�ɥ����äƤ��������פȺ��𤷤Ƥ����ΤǤ�����Bazaar��IRC�Ǥ��λ����ä��Ƥߤ��Ȥ����� "<jelmer>naoki: It's inheriting handles from the parent process perhaps?" �ȸ���졢Windows�Υץ������ȥե�����ϥ�ɥ�ˤĤ���Ĵ�٤Ƥߤޤ�����

�ޤ���Windows��CreateProcess()�����ƥॳ����ϡ�bInheritHandles�Ȥ�����������äƤ��ơ����ΰ�����TRUE�ξ��ϥ�ɥ��ҥץ������˰����Ѥ��ޤ��� �����Ѥ��ʤ��ȥѥ��פ����ѤǤ��ʤ��Τǡ�libsvn��bInheritHandles=TRUE��ssh���饤����Ȥ�Ω���夲�ޤ���

CreateProcess()¦�ǥѥ��װʳ��Υϥ�ɥ������Ѥ��ʤ��褦�ʻ����Ǥ��ʤ��ΤǤ����� CreateFile()��lpSecurityAttributes������SECURITY_ATTRIBUTES��¤�Τ��Ϥ����Ȥ��Ǥ����������bInheritHandle�Ȥ����ե饰������ޤ��� ���Υե饰��FALSE�ˤ���ȡ�CreateFile()�Ǻ�ä��ե�����ϥ�ɥ�ϻҥץ������˰����Ѥ���ʤ��褦�Ǥ���

Python���椫��CreateFile() API ��ľ�����Ѥ���ΤϤ���ä����ݤʤΤǡ�MSVCRT��open()��fopen()�Ǥ�Ǥ��ʤ���Ĵ�٤Ƥߤ��Ȥ�����

  • fcntl.h ����������Ƥ��� O_NOINHERIT �ե饰�� open() ���Ϥ�
  • fopen() �� mode �Ȥ��ơ� "rbN" �Τ褦�˸���� N ��Ĥ���

�Ȥ�����ˡ�ǥե�����ϥ�ɥ������Ѥ��ʤ��褦�˥ե�����򳫤����Ȥ�����뤳�Ȥ�Ƚ��ޤ�����

�����ޤ�Ƚ�ä��Ȥ����ǡ�Bazaar�ν����˼�꤫����ޤ���������ˤʤäƤ���ե�����ϥӥ�ȥ����open()�ؿ���ȤäƤ��ơ� ���δؿ���mode�����Ϥ��Τޤ�fopen()��mode�����ˤʤ�Τǡ� "wb" �ȤʤäƤ���Ȥ����� "wbN" �Ƚ񤭴�����������ɤ����ʤȻפä��ΤǤ����� ���Τ褦�����꤬����ޤ�����

  • "N" �ϸ��ߤ�glibc�Ǥ�̵�뤵��Ƥ��뤱��ɤ⡢���貿�������Ѥ���뤫���Τ�ʤ�����¾��libc�����Ѥ���Ƥ��뤫���Τ�ʤ��� �ʤΤ�Windows�ǤΤ�"N"��Ȥ��褦�˽������ʤ��Ȥ����ʤ���
  • �����⡢"N"��ͭ���ʤΤ�VC++2005�ʹߤ�MSVCRT�ǡ�����������MSVCRT�Ǥ�̵�뤵��롣Windows�Ǥ�Python2.4��Python2.5�ǤϻȤ��ʤ���

�ʤΤǡ�C�����open()�ؿ�����������Python��os.open()�ؿ��ȡ�os.O_NOINHERIT�ե饰�����Ѥ��ƥӥ�ȥ����open()������ˤʤ�ؿ�����������ե�����򥯥�����������ˤ��Υե�����������͡��ह����Ǥ��δؿ���Ȥ��褦�ˤ��ޤ�����

���ͤˡ�����ν����Τ�����open()�����ؤˤʤäƤ���open_file()�ؿ��������ʬ�����Ǻܤ��Ƥ����ޤ��� �ºݤν��������ν����Υޡ����ꥯ������ �Ǹ��뤳�Ȥ�����ޤ����ޤ���Pythonɸ��饤�֥���tempfile�⥸�塼���os.O_NOINHERIT�����Ѥ��ơ�����ե���������Ѥ�����˥ե���������Ǥ���褦�ˤ��Ƥ���Τǡ�������⻲�ͤˤ��Ʋ�������

O_NOINHERIT = getattr(os, 'O_NOINHERIT', 0)

if sys.platform == 'win32':
    def open_file(filename, mode='r', bufsize=-1):
        """This function works like builtin ``open``. But use O_NOINHERIT
        flag so file handle is not inherited to child process.
        So deleting or renaming closed file that opened with this function
        is not blocked by child process.
        """
        writing = 'w' in mode
        appending = 'a' in mode
        updating = '+' in mode
        binary = 'b' in mode

        flags = O_NOINHERIT
        # see http://msdn.microsoft.com/en-us/library/yeby3zcb%28VS.71%29.aspx
        # for flags for each modes.
        if binary:
            flags |= O_BINARY
        else:
            flags |= O_TEXT

        if writing:
            if updating:
                flags |= os.O_RDWR
            else:
                flags |= os.O_WRONLY
            flags |= os.O_CREAT | os.O_TRUNC
        elif appending:
            if updating:
                flags |= os.O_RDWR
            else:
                flags |= os.O_WRONLY
            flags |= os.O_CREAT | os.O_APPEND
        else: #reading
            if updating:
                flags |= os.O_RDWR
            else:
                flags |= os.O_RDONLY

        return os.fdopen(os.open(filename, flags), mode, bufsize)
else:
    open_file = open

���ν���������ʤ������ޤ��С�Bazaar 2.1.1����� svn+ssh:// ����� bzr branch ���Ǥ���褦�ˤʤ�ޤ���


@methane
klab_gijutsu2 at 18:31���������URL��Comments(0)��TrackBack(0)
2010ǯ02��17��

Bazaar 2.1 ����꡼������ޤ���

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

Bazaar 2.1 ����꡼������ޤ������ޤ������������ɤΤߤǤ����������������������ɤǤ��ޤ���

Bazaar�� 2.0���Υ�꡼�� ����Ubuntu�Τ褦��Ⱦǯ���ȤΥ�꡼���������塼��˰ܹԤ��Ƥ��ơ��ۤܥ������塼���̤�Υ�꡼���Ȥʤ�ޤ�����

����⡢��δ��Ǥ���Ⱦǯ�֤�Bazaar�䤽�μ��դβ��ɤ�Ҳ𤷤Ƥ����ޤ���

Bazaar���Τβ���

�ޤ���bzr���Τβ������Ǥ���

  • bzr+ssh �Ǥ� bzr+sftp �Τ褦�ˡ� ~ �ǥۡ���ǥ��쥯�ȥ�����Ǥ���褦�ˤʤ�ޤ����� ��ʬ�Υۡ���ǥ��쥯�ȥ�ʲ��˥�ݥ��ȥ��֤������äƤ���ͤϡ� bzr+ssh://host/~/bzr/proj/branch ���Ѥ�û��URL�����ѤǤ���褦�ˤʤ�ޤ���
  • ��������̤�®�٤����夷�ޤ������ä˥��ץ�Ȥ���Python�η��̤ʥǡ�����¤�ò¤µ¤ï¿½Ë·ï¿½ï¿½Ì¤Ë¤ï¿½ï¿½ï¿½StaticTuple��¸�ߤ��礭���Ǥ���Python��Ȥ��ͤϤ��һ��ͤˤ��ƤߤƤ���������
  • update���ޥ�ɤ�-r���ץ���󤬤Ĥ��ޤ���������� svn �� update -r ���ץ�����Ʊ���ǡ����ߤκ�ȥǥ��쥯�ȥ�����Ƥ���Ū�˲��Υ�ӥ����� ��ñ¤­¤ï¿½ï¿½ë¥³ï¿½Þ¥ï¿½É¤Ç¤ï¿½ï¿½ï¿½ï¿½Ó¥ï¿½É¼ï¿½ç¤¬Ê£ï¿½ï¿½ï¿½Ê¥×¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Î²ï¿½ï¿½ï¿½Æ°ï¿½ï¿½ï¿½ï¿½Ç§ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½È¤ï¿½ï¿½Ê¤É¡ï¿½ï¿½ï¿½ï¿½ß¤Îºï¿½È¥Ç¥ï¿½ï¿½ì¥¯ï¿½È¥ï¿½ï¿½È¤ï¿½ï¿½ó¤·¤Æ²ï¿½ï¿½Î¥ï¿½Ó¥ï¿½ï¿½ï¿½ï¿½ï¿½Ó¥ï¿½ï¿½ ���������̤������Ǥ����ǿ���ӥ����������� -r ���ץ����̵���� bzr update ���ޤ���

GUI���

TortoiseBZR

�䤬���ƥʤ򤷤Ƥ���TortoiseBZR�⡢����Ⱦǯ�֤��礭���������ޤ�����
  • �ӥ�ɤ���Τ�Microsoft Visual Studio Standard�ʾ夬���פˤʤ�ޤ�����
    ���ޤǤϥ������ĥ�κ�����ATL��ȤäƤ����ΤǤ������⤦�����Ǥ�Visual Studio 2010 �Ǥ�̵����Express Edition��ATL����°���ʤ����Ȥ�Ƚ�����ơ�ATL��Ŧ�м�Ѥ򤷤ޤ����� ���ߤ� Windows SDK �� Python �����ǥӥ�ɤ���ǽ�Ǥ����Ȥ������Ȥǡ����˥��ƥʤ��Ƥ����ͤ��罸��Ǥ�(��)
  • ���ơ�������������Υ����С��쥤ɽ���ǡ��ޤ����ơ�������������Ƥ��ʤ��ե�����ˤ� ? ��ò¤·¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É½ï¿½ï¿½ï¿½ï¿½ï¿½Æ¤ï¿½ï¿½ï¿½Î¤Ç¤ï¿½ï¿½ï¿½ï¿½ï¿½ ���ơ�����������λ���F5�����ʤɤǼ�ư�������ʤ��Ƥ⼫ư�ǥ������󤬹��������褦�ˤʤ�ޤ�����
  • i18n��ò¤·¤Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½TortoiseBZR�ʳ���GUI�ġ�������ܸ쥳�ߥ�˥ƥ��γ�����ζ��Ϥǹ⤤����Ψ��ݻ����Ƥ���Τǡ��Ѹ쥢��륮���ʿͤˤ�¿����Ƥ��Ȥ����������ޤ���
  • ����ƥ����ȥ�˥塼�����Ƥ��������ޤ������äˡ�Bazaar�ο侩GUI�Ǥ��� bzr-explorer �䡢Ǥ�դΥ��ޥ�ɤ�¹ԤǤ��� qrun �ò¥³¥ï¿½Æ¥ï¿½ï¿½ï¿½ï¿½È¥ï¿½Ë¥å¡¼ï¿½ï¿½ï¿½ï¿½Â¹Ô¤ï¿½ï¿½ë¤³ï¿½È¤ï¿½ï¿½ï¿½Ç½ï¿½Ë¤Ê¤ï¿½Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½
  • �ե�������ѹ���ƻ뤷�Ƥ���ǥ��쥯�ȥ�������̤Υե�������ѹ���ȯ���������ʥץ������Υӥ����ʤɡˤ�CPU����Ψ���㴳���ˤʤäƤ����Τ������ޤ�����

qbzr��bzr-explorer

����Ū�˴����٤��⤯�ʤäƤ��ޤ����äˡ� bzr-explorer ������ 1.0rc1 ���꡼�����ޤ����� 0.x �Ϥ��� 1.x �Ϥ��ѹ������Τϡ���ȯ�ԤΡ֤�����������Ū�ʺ�ȤϤ���GUI�Ǵ���Ǥ���������פȤ���������ɽ����Ȼפ��ޤ���

  • qdiff �ʤɤǥƥ����ȥե������ɽ������ݡ��ƥ����ȤΥ��󥳡��ǥ��󥰤�GUI�������Ǥ���褦�ˤʤ�ޤ�����
  • qbrowse �� qcommit �ʤɤΥĥ꡼ɽ���ǡ��ե�����Υ�͡�����ư���Ǥ���褦�ˤʤ�ޤ�����
  • bzr-explorer �κ�ȥĥ꡼�֥饦���ǥե�����ò³«¤ï¿½ï¿½È¤ï¿½ï¿½Ë¡ï¿½ï¿½ï¿½Ä¥ï¿½ï¿½ï¿½ï¿½Ë¥Õ¥ï¿½ï¿½ï¿½ï¿½ï¿½ò³«¤ï¿½ï¿½Î¤Ë»È¤ï¿½ï¿½ï¿½ï¿½×¥ê¥±ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½è¤¦ï¿½Ë¤Ê¤ï¿½Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½
GUI�Ϥɤ����Ƥ�����ε�ǽ���ФäƻȤäƤ��ޤ��Τǡ��䤬���Ť��Ƥ��ʤ��礭�ʲ������⤿�����󤢤�Ȼפ��ޤ���

Bazaar 2.2 �˸�����

2.1 �� 2.0 �Υ֥�å��奢�åפΤ褦�ʥ�꡼���Ǥ���������Ϥޤ��桼�������Ȥ��䤹���ʤ�褦�ʲ��ɤ��ɤ�ɤ����äƤ���Ȼפ��ޤ���

��� bzr ���ΤΥإ�פʤɤ� i18n �б���ô�����褦���ȻפäƤ��ޤ���

¾�ˤ⡢git��hg�Τ褦�ˡֺ�ȥĥ꡼�ȥ�ݥ��ȥ�ϰ�Ĥǡ�������Ǥ�������Υ֥����򰷤��פȤ������������¸����� colocated branch �⡢������Ȥʤ뿷�����ץ饰���� bzr-colo �Ȥ���̾���ǥ�꡼�����졢��ȯ�ʵ���������Ƥ��ޤ���

�ޤ����Ƕ� bzr-git ���Ƥߤ��ΤǤ���������ܥ�å���󥯤����ä�git��ݥ��ȥ�򤦤ޤ������ʤ����Ȥ˵��Ť��ƽ��������ʳ�������ʤ��ʤäƤ��ޤ����� �⤦�������� 1.0 �Υ�꡼�����ᤤ�ΤǤϤʤ����Ȼפ��ޤ��� bzr-2.2 ����꡼�����줿�� ��github �Υ��饤����ȤȤ���TortoiseBZR ��Ȥ��פʤ�Ƶ�����񤯤Ĥ��Ǥ���

���ߡ����ܤ�Bazaar��Ȥ��Τ˰���­��Ƥ��ʤ��Τ����ܸ�ξ�����Ȼפ��Τǡ����ܸ�ξ���򽸤��Hub�����Ȥ������Ȼפ��ޤ��� �轵��ҤΥǡ������󥿡��ˤ�����������С������ڤ�ơ��������֤�Ȥäƥ��åȥ��å���ʤΤǡ��⤦���Ф餯���Ԥ���������


@methane
klab_gijutsu2 at 16:17���������URL��Comments(0)��TrackBack(0)
2009ǯ09��28��

Bazaar 2.0 ����꡼������ޤ���

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

���� Bazaar�ξҲ� �ǾҲ𤷤��Ȥ��ˤ� 1.9 ���ä�Bazaar�Ǥ��������θ�����Υ�꡼���򤫤��ͤ��轵�Ȥ��Ȥ� �᥸�㡼�С�����󥢥åפȤʤ� 2.0 ����꡼������ޤ�����(����������ɥ�����)

�����ʥ�꡼���Ρ��Ȥϸ���Web�����Ȥ򻲾Ȥ��Ƥ�餦�Ȥ��ơ����ΰ�ǯ��Dz��ɤ��줿�����δ��ǾҲ𤷤����Ȼפ��ޤ���

TortoiseBZR��(���֤�)���ѥ�٥�ˤʤä�

��Ϥ����Ƥ����ޥ�ɥ饤�󤫤����Ѥ��Ƥ���Τǡ������Ҳ𤷤��Ȥ���TortoiseBZR�򤢤ޤ�Ȥ�����Ǥ��ޤ���Ǥ�����

���θ塢TortoiseBZR��Ȥ�����Ǥߤ��Ȥ�����push���Ǥ��ʤ���add��Ǥ��ʤ��ʤɺ���¤ε�ǽ�������äƤ��ʤ��ä��ꡢ���ơ�������ɽ�����Ť��ƥ��ȥ쥹�ˤʤä��ꤷ���ΤǷ�ɥ��󥤥󥹥ȡ��뤷�Ƥ��ޤ��ޤ�����

���θ庣ǯ�����äƤ���TortoiseBZR�γ�ȯ�����ڤ��Ƥ��ޤ������Τޤޤ��㤤���ʤ��Ȼפä�6���Ⱦ����TortoiseBZR�γ�ȯ�˻��ä��ޤ���������2����ǰʲ��Τ褦��������褷�ޤ�����

  • �������ĥ����̿Ū�ʥХ�(�ֿ������ե����������פʤɤΥܥ���ư��ʤ��ʤ롢Windows Vista�ǥ���ƥ����ȥ�˥塼�Υ쥤�����Ȥ������ʤ�)����������ޤ�����
  • ���ơ������μ�����®���ʤ�ޤ������ޤ����ޤ����ơ�������������Ƥ��ʤ��ե�����ξ�� '?' �ޡ����Υ��ơ��������������ɽ�����ƥХå����饦��ɤǥ��ơ�������������뤳�Ȥǡ��������ץ�����α���®�٤��㲼���ޤ��ޤ�����(������ˡ��TortoiseHG�γ�ȯ�Ԥ�Twitter�Ƕ����Ƥ��äƳ�ȯ���ޤ��������մ���)
  • add, push, send �Ȥ��ä���ǽ�ò¥³¥ï¿½Æ¥ï¿½ï¿½ï¿½ï¿½È¥ï¿½Ë¥å¡¼ï¿½ï¿½ï¿½É²Ã¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½

�ޤ�TortoiseSVN�δ����٤ˤ���ã���Ƥ��ޤ��󤬡��Ȥꤢ�����桼���������򤹤��ư��̵���ʤäƴ���Ū��������Ⱦ������ƥ����ȥ�˥塼����ƤӽФ���褦�ˤʤä��Τǡ��ͤ˻�ƤߤƤȸ�������֤ˤʤäƤ��ޤ���

��������ݥ��ȥ�ե����ޥåȤ�ɸ��ˤʤä�

Bazaar 2.0 ����� 2a �Ȥ����뿷�餷����ݥ��ȥ�ե����ޥåȤ�ɸ��ˤʤ�ޤ����� Bazaar�Ǥϥǡ����γ�Ǽ�������Ѥ��ʳ��ˤ⡢����ǽ�Τ���˿������᥿�ǡ������ɲä������ˤ�Ť��С�������Bazaar���餽�Υ᥿�ǡ������ʤ���ӥ����򥳥ߥåȤ���Ƥ��ޤ�ʤ��褦�ˤȥ�ݥ��ȥ�ե����ޥåȤ��ѹ����Ƥ��ޤ������η�̤Ȥ���Bazaar�ˤ����̤Υ�ݥ��ȥ�ե����ޥåȤ��Ǥ��Ƥ��ޤ����֡����Υե����ޥåȤǤϢ����ε�ǽ���Ȥ��ʤ��פȤ��ä����꤬ȯ�����Ƥ��ޤ�����

�������ե����ޥåȤ�ɸ��ˤʤ뤳�Ȥǡ���ݥ��ȥ�ե����ޥåȤ򥪥ץ���󤫤����Фʤ��Ƥ⿷������ǽ�������Ȥ��롢��ݥ��ȥꥵ�������������ʤä��ꤤ���Ĥ�����®���ʤäƤ����ꤹ��Ȥ�������������ޤ���

Windows�Ǥ�Unicode�ե�����̾�ؤ��б������ɤ��줿

Python�Ǥ�Unicode API�����Ѥ��뤳�Ȥǡ�Unicode�ե�����̾�ǥե�����򰷤����Ȥ��Ǥ���ΤǤ����� sys.argv �Ǽ��륳�ޥ�ɥ饤���������Unicode�Ǥ���(Python3�Ǥ�Unicode�ˤʤ�ޤ�) Bazaar�� sys.argv �����Ѥ��Ƥ������ᡢ���ä���Unicode�ǥե�����̾�򰷤��Τ˥��ޥ�ɥ饤���������ϥ����ɥڡ����Ǥ����ե�����̾������Ǥ��ʤ��Ȥ������꤬����ޤ�����

�Ƕ�ΥС������ǤϤ�����ʬ�� GetCommandlineW() API�����Ѥ���褦�ˤʤꡢbzr���Τ����Ǥʤ�QBzr����GUI��ޤ��Unicode�ؤ��б����ʤ�Ǥ���Τǡ�Unicode�ե�����̾�˴ؤ�������ϤۤȤ�ɤʤ��ʤ�ޤ�����

���ܸ�桼�������롼�פ��Ǥ���

���ܸ�ǵ������Ǥ���Ķ����ߤ����Ȼפ���Bazaar 2.0 �Υ�꡼���򤭤ä����˥桼�������롼�פ��뤳�Ȥˤ��ޤ����� http://groups.google.co.jp/group/bazaar-ja

Launchpad��˥ɥ�����������ץ��������Ȥ����������ä���Ǥ���������ȤⳫ�Ϥ��Ƥ��ޤ���TortoiseBZR�ΥХ�������˾�ʤ󤫤⡢�Ѹ��Launchpad����Ͽ��������ڤˤǤ���Ϥ��Ǥ���Bazaar�˴ؿ��Τ������Ϥ��һ��ä��ƤߤƤ���������


@methane
klab_gijutsu2 at 21:14���������URL��Comments(4)��TrackBack(0)
2009ǯ07��13��

MessagePack��Python Binding���꡼�����ޤ���

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

MessagePack �Ȥϡ��Ŷ�(id:viver)���󤬳�ȯ���줿��®�����Ψ�ʥХ��ʥꥷ�ꥢ�饤���ե����ޥåȤǤ����ܤ����� �Ŷ���������� ���ץ��������ȥ����� �򸫤Ƥ���������

Python����MessagePack�ե����ޥåȤ�Serialize/Deserialize���뤿���Python�ѥå��������ä��Τǡ�������ˡ�ȻȤ����ˤĤ��ƴ�ñ�˾Ҳ𤷤ޤ���

1. ���󥹥ȡ���

msgpack�Ȥ���̾����Python Package Index (PyPI)����Ͽ���Ƥ���ޤ��� <http://pypi.python.org/pypi/msgpack/>

setuptools�򥤥󥹥ȡ��뤷�Ƥ���Ķ��Ǥϡ�

$ easy_install msgpack

�ǥ��󥹥ȡ��뤹�뤳�Ȥ��Ǥ��ޤ���

Windows�ǥ��󥹥ȡ��뤹����ϡ�PyPI�Υѥå����������� ���饤�󥹥ȡ�������������ɤ��ƥ��󥹥ȡ��뤹��Τ�����ڤǤ���

2. ���ꥢ�饤��

�ޤ���msgpack�ѥå�������import���ޤ���

>>> import msgpack
>>> help(msgpack)  # docstring ���ɤ�

��ĤΥ��֥������Ȥ򥷥ꥢ�饤������ˤϡ� msgpack.packb() �����Ѥ���Τ���ñ�Ǥ���

>>> msgpack.packb([1,2,3])
'\x93\x01\x02\x03'

Ϣ³���ƥ��ꥢ�饤�������硢 msgpack.Packer ���֥������Ȥ����Ѥ���ȥ����С��إåɤ����ʤ��ʤ�ޤ���

>>> packer = msgpack.Packer()
>>> packer.pack([1,2,3])
'\x93\x01\x02\x03'
>>> packer.pack([4,5,6])
'\x93\x04\x05\x06'

3. �ǥ��ꥢ�饤��

msgpack.unpackb() �����Ѥ���ȡ������֥�������ʬ�Υ��ꥢ�饤�����줿�ǡ�����ǥ��ꥢ�饤���Ǥ��ޤ���

>>> msgpack.unpackb(b'\x93\x01\x02\x03')
[1, 2, 3]

���ȥ꡼�फ��ǥ��ꥢ�饤�������硢 msgpack.Unpacker ���֥������Ȥ����Ѥ��뤳�Ȥǡ�Ϣ³�����ǥ��ꥢ�饤�����Ǥ����ꡢ���֥������Ȥζ�����Ƚ��ʤ������б��Ǥ��ޤ���

>>> unpacker = msgpack.Unpacker()
>>> buf = b'\x93\x01\x02\x03' * 5
>>> len(buf)
20
>>> unpacker.feed(buf[:9])
>>> for o in unpacker:
...     print o
...
[1, 2, 3]
[1, 2, 3]
>>> unpacker.feed(buf[9:])
>>> for o in unpacker:
...     print o
...
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]

4. �٥���ޡ���

�ƥ��ȥ�����:

#!/usr/bin/env python
# coding: utf-8

from msgpack import packs, unpacks
from cPickle import dumps, loads
import simplejson as json
from time import time

BENCH_NUM = 10

def bench(func, num=BENCH_NUM):
    start = time()
    for i in xrange(BENCH_NUM):
            func()
    end = time()
    print "%-12s  %4.3f[ms]" % (func.__name__, (end-start)*1000/BENCH_NUM)

def setup_int():
    global a, a_pickle, a_mpack, a_json
    a = range(1024) * 2**10
    a_pickle = dumps(a)
    a_json = json.dumps(a)
    a_mpack = packs(a)

def setup_str():
    global a, a_pickle, a_mpack, a_json
    a = ['a'*(i % 4096) for i in xrange(2**14)]
    a_pickle = dumps(a)
    a_json = json.dumps(a)
    a_mpack = packs(a)


def pickle_dump(): dumps(a)
def pickle_load(): loads(a_pickle)

def json_dump(): json.dumps(a)
def json_load(): json.loads(a_json)

def mpack_pack(): packs(a)
def mpack_unpack(): unpacks(a_mpack)


targets = [
        pickle_dump, pickle_load,
        json_dump, json_load,
        mpack_pack, mpack_unpack]
import gc
gc.disable()

bytes_suffix = "[bytes]"

print "== Integer =="
setup_int()

print "= Size ="
print "pickle:", len(a_pickle), bytes_suffix
print "json:  ", len(a_json), bytes_suffix
print "mpack: ", len(a_mpack), bytes_suffix

for t in targets:
    bench(t)

print "== String =="
setup_str()

print "= Size ="
print "pickle:", len(a_pickle), bytes_suffix
print "json:  ", len(a_json), bytes_suffix
print "mpack: ", len(a_mpack), bytes_suffix

for t in targets:
    bench(t)

���:

== Integer ==
= Size =
pickle: 6203398 [bytes]
json:   5154816 [bytes]
mpack:  2752517 [bytes]
pickle_dump   248.640[ms]
pickle_load   360.288[ms]
json_dump     255.601[ms]
json_load     136.922[ms]
mpack_pack    51.383[ms]
mpack_unpack  26.851[ms]
== String ==
= Size =
pickle: 33731696 [bytes]
json:   33611776 [bytes]
mpack:  33595139 [bytes]
pickle_dump   182.324[ms]
pickle_load   141.639[ms]
json_dump     126.675[ms]
json_load     93.945[ms]
mpack_pack    66.833[ms]
mpack_unpack  34.953[ms]

pickle��json���ݤ��Ƥ��ޤ������ޤ��ޤ�������;�Ϥ����ꤽ���Ǥ��� �Ȥ���pack��unpack�Ȱ�ä����̤�Python���֥������Ȥ���������ɬ�פ�����櫓�ǤϤʤ��Τˡ�unpack������֤������äƤ��ޤäƤ��ޤ���

5. ����¾

�����ǤϾҲ𤷤Ƥ��ʤ���simplejson��pickle�⥸�塼��˻�����API�⤢��ޤ���pickle��json����msgpack�ذܹԤ���Ȥ��ϥѥå����������õ���ƤߤƲ�������

�����������ߤ�msgpack�ϥХ�������������ư�����������������󥹷������񷿤ˤ����б��Ǥ��Ƥ��ޤ���simplejson�� dumps() �� defalut() �ؿ��� loads() �� object_hook() �ؿ����Ѱդ��뤳�Ȥǥ桼����������������饹�Υ��ꥢ�饤�����ǥ��ꥢ�饤�����Ǥ��ޤ���0.2 �Ǥ�Ʊ���褦�� default() ��object_hook() ���б����褦�Ȼפ��ޤ���


@methane
klab_gijutsu2 at 15:58���������URL��Comments(1)��TrackBack(1)
2009ǯ03��13��

IPython��unicode��ƥ���Ȥ�

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

IPython�Ȥ�

IPython�Ȥϡ�Pythonista���������ʿ͵���ؤ륤�󥿥饯�ƥ��֥�����Ǥ���

Python�Ϥ�Ȥ�ȥ��󥿥饯�ƥ��֥��������¢���Ƥ���ΤǤ����� IPython�ˤ���¢�Υ��󥿥饯�ƥ��֥��������٤�¿��������������ޤ��������Ĥ��󤲤Ƥߤޤ���

  • ưŪ�䴰

    �ѿ�̾�ʤɤ�����ޤ����Ϥ������֤�TAB�����򲡤��ȡ��Ĥ���䴰���Ƥ���ޤ��� ���䤬ʣ��������ϸ��������ɽ�����Ƥ���ޤ���

  • ���󥿥å����ϥ��饤��

    �ץ���ץȤʤɤ˿����Ĥ��ޤ�������äȤ��줷���Ǥ���

  • �̾�Υ�����Ȥ��Ƥ����Ѳ�ǽ

    IPython����ǡ�ls�ǥե���������򸫤��ꡢcd�ǥ����ȥǥ��쥯�ȥ���ư������Ǥ��ޤ��� !vim �Τ褦�˥���������᡼�����ޡ�����³���ƥ��ޥ��̾�����Ϥ��뤳�Ȥǡ����ޥ�ɤμ¹Ԥ�Ǥ��ޤ��� ����ˡ����ޥ�ɤν��Ϥ�Python���ѿ��˳�Ǽ���졢Python�������Ѳ�ǽ�ˤʤ�ޤ���Unix�����̤Υ��ޥ�ɤ�Ȥ����ʤ��ʤ��ä��ꡢWindows�ǥ��ޥ�ɤ����ʤ����Ȥ��������ä��ꤹ��Ȥ��˽������ޤ���

  • �褯�Ȥ���ǽ���ά���ǵ��Ҳ�ǽ

    help(o) ������� o? �Ǥ��Υ��֥������ȤΥɥ�����Ȥ��ɤ�ޤ���

    func(a, b) ������� func a b �Ǵؿ��ƤӽФ�����ǽ�Ǥ���

  • ���ǥ�����Ϣ�Ȳ�ǽ

    ed foo.py �Τ褦�ˤ��뤳�Ȥǡ� foo.py �������ǥ����dz������Խ��Ǥ��ޤ��� �����ƥ��ǥ������Ĥ���ȡ���ưŪ�ˤ��Υե����뤬eval����ޤ��� ���ε�ǽ��Ȥ��ȡ����ǥ����Ǵؿ���񤯢�IPython���ư����ǧ���뢪���ǥ����Ǵؿ��������롢�Ȥ�����������ǥ���������ȯ�Ǥ��ޤ��� ��������Ƥ��ޤ��ȡ�IDE���ߤ����Ȼפ�ʤ��ʤ�ޤ���

IPython��Unicode��ƥ���Ȥ�

IPython 0.9.1 ��Unicode��ƥ���Ȥ����Ȥ���ȡ����Τ褦�����꤬����ޤ���

$ python
Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u"��"
u'\u3042'
>>>
$ ipython
Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49)
Type "copyright", "credits" or "license" for more information.

IPython 0.9.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: u"��"
Out[1]: u'\xe3\x81\x82'

���󥽡����UTF-8�ʤΤ�"��" ��3byte�ˤʤäƤ���ΤǤ��������줾���byte���ʸ����ǧ������Unicodeʸ�����Ѵ�����Ƥ��ޤ���

����������ɤäƤߤ��Ȥ�����IPython��Python���Ȥ߹��ߴؿ� compile() ��ƤӽФ��Ȥ��ˡ�ʸ����򥨥󥳡��ɤ��Ƥ��ޤäƤ���Τ˵��Ť��ޤ����� compile() ��ư���Ĵ�٤Ƹ����Ȥ���

>>> c = compile("""u'��'""", "foo.py", 'single')
>>> c.co_consts
(u'\xe3\x81\x82', None)
>>> c = compile(u"""u'��'""", "foo.py", "single")
>>> c.co_consts
(u'\u3042', None)

�ӥ󥴤Ǥ���

�Ȥ������Ȥǡ�IPython/iplib.py �˼��ν����򤹤뤳�Ȥǡ�IPython��Unicode��ƥ�뤬�������褯�Ȥ���褦�ˤʤ�ޤ�

--- iplib.py.old    2009-03-13 15:42:33.000000000 +0900
+++ iplib.py        2009-03-13 15:42:58.000000000 +0900
@@ -2019,9 +2019,9 @@
         # this allows execution of indented pasted code. It is tempting
         # to add '\n' at the end of source to run commands like ' a=1'
         # directly, but this fails for more complicated scenarios
-        source=source.encode(self.stdin_encoding)
-        if source[:1] in [' ', '\t']:
-            source = 'if 1:\n%s' % source
+        #source=source.encode(self.stdin_encoding)
+        if source[:1] in [u' ', u'\t']:
+            source = u'if 1:\n%s' % source

         try:
             code = self.compile(source,filename,symbol)

Windows (Python 2.6.1, IPython 0.9.1) �Ǥ⤦�ޤ�ư������ǧ���Ƹ��ޤ���

In [1]: u"��"
Out[1]: u'\u3042'

In [2]: u"��"
Out[2]: u'\u30bd'

�Хå���Ǥ�


@methane
klab_gijutsu2 at 16:22���������URL��Comments(0)��TrackBack(0)
Blog�⸡��
�ǿ�����
Archives
���Υ֥����ˤĤ���
DSAS�Ȥϡ�KLab �����ۤ����Ѥ��Ƥ��륳��ƥ�ĥ����ӥ��Ѥ�Linux�١����Υ���ե�Ǥ�������5����Υǡ������󥿤ˤƹ��ۤ������Ѥ��Ƥ��ޤ������桹��DSAS����Ȥ��䤹�����������ˡ������Ƥ����ϤDZ��ѤǤ��뤳�Ȥ��ܻؤ��ơ��������ɤ˶Ф���Ǥ��ޤ���
���Υ֥����Ǥϡ������ DSAS �ǻȤäƤ��뵻�ѤξҲ�䡢�¸����Ƥߤ���̤���𡢥ȥ�֥�˴������ޤ줿���ηи��̤ʤɡ���������������������򿥤�ޤ��ƾҲ𤷤Ƥ��������Ȼפ��ޤ���
�ǿ�������
<%==comments[n].author%>
<% } %>