Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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 になる。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away