53
千里の道も一歩から 幸福への道も殺伐から

千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

千里の道も一歩から  

幸福への道も殺伐から

Page 2: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

PEP-263 - たった1行で、あなたのPythonが! -

殺伐Python @shibukawa

ソースコードはすべて、 http://bitbucket.org/shibu  にアップロード済みです

Page 3: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

大事なこと を最初に

Page 4: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

今のうちにPythonスキルを 上げてモテたい人はぜひ!

Page 5: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

初心者にやさしく したい人はこの本を

Page 6: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

PEP • Pythonの機能拡張の要望書

日本語訳:h#p://sphinx-­‐users.jp/ar2cles/pep1.html

Page 7: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

PEP-263 • ソースコードのエンコーディングを指定できるようにするPEP • Python 2.3から組み込まれた

Page 8: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

# -*- encoding: utf-8 -*-

amin1 = “私は逢坂さんがいいと思うなあ” taiga1 = “・・・なにぃ!?” amin2 = “ほら、だって逢坂さんって、すっごく”¥ “ちっちゃくてかわいらしいし?” taiga2 = “なに言ってんだ超ばかちー!”

Page 9: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

# -*- encoding: utf-8 -*-

amin1 = “私は逢坂さんがいいと思うなあ” taiga1 = “・・・なにぃ!?” amin2 = “ほら、だって逢坂さんって、すっごく”¥ “ちっちゃくてかわいらしいし?” taiga2 = “なに言ってんだ超ばかちー!”

ソースコードに日本語が書けるように! 3系なら関数、クラス名も日本語OK

Page 10: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ

1,2行目  を見る

py

Page 11: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ

1,2行目  を見る

コーデック:  unicode  にする

py

Page 12: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ

1,2行目  を見る

コーデック:  unicode  にする

パーサ:  抽象構文木  (AST)作成

py

Page 13: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ

1,2行目  を見る

コーデック:  unicode  にする

パーサ:  抽象構文木  (AST)作成

コンパイラ:  バイトコード  作成

pyc

py

Page 14: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ

1,2行目  を見る

コーデック:  unicode  にする

パーサ:  抽象構文木  (AST)作成

コンパイラ:  バイトコード  作成

VM:  バイトコード  実行

pyc

py

Page 15: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ

1,2行目  を見る

コーデック:  unicode  にする

パーサ:  抽象構文木  (AST)作成

コンパイラ:  バイトコード  作成

VM:  バイトコード  実行

pyc

py

Page 16: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP
Page 17: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

コーデック は自作可能

Page 18: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ

1,2行目  を見る

自作  コーデック

パーサ:  抽象構文木  (AST)作成

コンパイラ:  バイトコード  作成

VM:  バイトコード  実行

pyc

py

Page 19: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

パーサが走る前に コードを加工できる!

Page 20: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

Page 21: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

C言語風マクロ

Page 22: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

実装部(一部抜粋) import encodings, codecs, sys, re

_find_macro = re.compile(r"#define\s+(\w+)\s+(.+)")

def replace_macro(input_lines): macros = [] result = [] for line in input_lines: match = _find_macro.match(line) if match: macros.append(match.groups()) continue for name, value in macros: line = line.replace(name, value) result.append(line) return result

全文は: http://bitbucket.org/shibu/demo

Page 23: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

C言語風マクロ # -*- encoding: define -*-

#define MSG “LL Tiger”

print “hello”, MSG

Page 24: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

2

Page 25: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

日本人なら

Page 26: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

実装部(一部抜粋) def rotate(lines): result = [] maxlength = max((len(line) for line in lines)) for line_number in xrange(maxlength-1, -1, -1): rline = [] for line in lines: if line.strip() == '' and not rline: continue try: rline.append(line[line_number]) except IndexError: rline.append(" ") result.append("".join(rline).rstrip()) return result

全文は: http://bitbucket.org/shibu/demo

Page 27: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

# -*- encoding: rotate -*-

f o r

p i r i i n n t r " a H n e g l e l ( o 4 " ) :

Page 28: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

すいません漢字は使えません

Page 29: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

3

Page 30: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

さて、次は何しましょう?

Page 31: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

Rubyでも動かしますか?

Page 32: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ

1,2行目  を見る

Ruby  -­‐>  Python  デコーダ

パーサ:  抽象構文木  (AST)作成

コンパイラ:  バイトコード  作成

VM:  バイトコード  実行

pyc

py

Ruby  トークン  分解  

Ruby  AST作成  

Python  コード  生成  

Page 33: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

処理の流れ(2回目)

Ruby  -­‐>  Python  デコーダ

VM:  バイトコード  実行

pyc

py

Ruby  トークン  分解  

Ruby  AST作成  

Python  コード  生成  

1,2行目  を見る

パーサ:  抽象構文木  (AST)作成

コンパイラ:  バイトコード  作成

Page 34: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

現在の進捗

• たのしいRubyの3章の途中までのサンプルが実行可能 • もうちょいしたらクラスの継承、モジュール、Mix-inも入るかもよ?

リポジトリはこちら:  http://bitbucket.org/shibu/ruby/

Page 35: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

実装済み •  if, unless, while, until(後置も含む) •  変数、整数、小数、文字列、配列、ハッシュのリテラル

•  関数宣言 •  関数呼び出し(ブロック付き) •  クラスの内部表現 – 可視性制御など

リポジトリはこちら:  http://bitbucket.org/shibu/ruby/

Page 36: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

目標 •  $ easy_install ruby • dRubyで生Rubyと通信 • RubySpecのmspecは動くようにしたい • Rubyベンチマークに参戦したい

リポジトリはこちら:  http://bitbucket.org/shibu/ruby/

Page 37: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

PEP-263便利でしょ?

Page 38: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

さて、先日の Pythonハッカソン

Page 39: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP
Page 40: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

「どうがんばっても、PHPは Pythonに勝てません」 「PHPに最後の輝きを」

http://d.hatena.ne.jp/moriyoshi/20100710/1278778949

Page 41: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

PHPはすばらしい言語

• ウェブデザイナーでも勉強しようとする • 初心者をプログラミングの世界に多数引き込んだ

Page 42: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP
Page 43: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP
Page 44: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

PHPはモテ

Page 45: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

LL Tiger 大河

Page 46: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP
Page 47: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

予想:PHP互換実装バトル勃発 •  RbHP: Ruby: Hypertext Preprocessor •  PyHP: Python: Hypertext Preprocessor •  P6HP: PHP6: Hypertext Preprocessor •  ErHP: Erlang: Hypertext Preprocessor •  MsHP: MySQL: Hypertext Preprocessor •  CjHP: Clojure: Hypertext Preprocessor •  N8HP: N88Basic: Hypertext Preprocessor •  SHP: Scala: Hypertext Preprocessor

Page 48: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

だけど!

• これでPythonは勝てる!

# -*- encoding: php -*-

Page 49: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

技術情報:  h#p://www.freia.jp/taka/blog/725

Page 50: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

今のうちにPythonスキルを 上げてモテたい人はぜひ!

Page 51: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

初心者にやさしく したい人はこの本を

Page 52: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

まとめ •  PEP-263はたったの一行。可能性無限。 •  モテを狙うなら、Python! •  本買ってください – 読む用 – 貸す用 – サインをもらう用 – 裁断用

Page 53: 千里の道も一歩から 幸福への道も殺伐からll.jus.or.jp/2010/slide/06-LT-Tiger/殺伐Python/PEP263.pdfPEP-263 • ソースコードのエンコーディン グを指定できるようにするPEP

千里の道も一歩から  

幸福への道も殺伐から