M1チップ搭載のMacだとRのgmpパッケージが動かない?

結論から言うと、install.packages("gmp", type = "source")として、手元でビルドするようにすれば動く。

gmpはCのGMPライブラリを使って多倍長整数演算などを行えるようにするパッケージ(CRAN - Package gmp)で、大きな数字が扱えるだけでなく素数判定とか素因数分解とかも簡単にできるようになるので、Project Eulerなんかはこれを使うか使わないかで難易度が大分変わる(ので、真面目に(?)Project Eulerやりたかったら縛ったほうがいいかもしれない…)。

で、これを新しいMac mini (M1, 2020)に入れたR (M1チップに対応した開発版とかではなくて、Rosetta 2で動かしている普通の4.0.4) で動かすと落ちる。

> gmp::as.bigz(1)

 *** caught illegal operation ***
address 0x112771f6e, cause 'illegal trap'

Traceback:
 1: gmp::as.bigz(1)

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace

あまりよく確認していないので本当にM1が原因かどうか良くわからないけど、少し前のMacBook Pro(13-inch, 2016)では再現しない。

とりあえず冒頭に書いたようにソースからビルドすれば動く。

> install.packages("gmp", type = "source")
> (中略)
> gmp::as.bigz("123")
Big Integer ('bigz') :
[1] 123

また、gmpに依存する他のパッケージもバイナリをインストールすると同様に落ちる。例えばRで任意精度演算を行えるようにするRmpfrパッケージ(CRAN - Package Rmpfr)なんかがダメ。これはgmpをビルドしてインストールしていてもだめで、RmpfrはRmpfrでinstall.packages("Rmpfr", type = "source")としてやらなければならない。