0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

型推定:タイプヒントをつかう

Last updated at Posted at 2017-12-12

Python にはタイプヒントというものがある。ヒントを与えるだけで Python のインタプリタとしてはなにもしない。

def greeting(name: str) -> str:
    return 'Hello ' + name

PEP 0484 に詳しいが上のようなコードは name が文字列で戻り値も文字列であることを示している。示しているだけで、実行時には何ももしない。PEP の言葉を借りる。

「Python will remain a dynamically typed language, and the authors have no desire to ever make type hints mandatory, even by convention.」

型に関して Python がたどってきた道は奥が深い。Python2 から Python3 へバージョンアップする過程で int の解釈を変えている。

python2 のコードで次のようなコードを見かけたことがある。数字の最後に L の文字がある。python2 では整数がハードウェア依存の 32bit や 64bit に多少引きずられている。

a=0x12345678L

python3 では整数はより抽象的になった。int と long の区別はない。

python2
>>> print type(0x1000000000000000)
<type 'int'>
>>> print type(0x10000000000000000)
<type 'long'>

python3
>>> print(type(0x1000000000000000))
<class 'int'>
>>> print(type(0x10000000000000000))
<class 'int'>

Polyphony ではどうする?残念ながら Polyphony では int は任意のビット長にできるものの上限がある。対象がハードウェアなのでインタプリタのように数がある制限を超えたら領域を取り直して差し替える、と言ったことは出来ない。デフォルトでは 32 ビットになっている(64 や 128 に変更可能)。

ターゲットをどこにするかにもよるが、pynum でのハードウェアに引きずられた環境も歓迎されているところを見ると、現状で問題ないと踏んでいる。

一方、ハードウェア的な要求からビット幅を決定したいときがある。その時はどうしたらよいか?すでに Queue や Port で使用されているがその際には int64 や bit64 などを利用してもらいたい。数字は中途半端でもよい。例えば bit9 なども可能だ。uint は過去に導入したが deprecated とする方向だ。

これを使うとハードウェアの資源を抑えたコードを書くことが出来る。次に示すのは x_mem で内部的に使用されるメモリの宣言だ。

from polyphony.typing import List, bit, bit2, bit8

... 中略 ...

   def worker(self):
       block = [0] * self.max_block_n * BLOCK_SIZE # type: List[bit8]
... 後略 ...

変数の宣言にも使える。例をあげよう。

    data:bit8 = self.xmodem_in_q.rd()
    block_no:bit8 = 1

Polyphony は型推定を積極的に行っているので、書かなくてもよいところもある。例えば、上記の rd() から読み取った値を代入する変数は型推定で自動的に bit8 になる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?