EJPスタッフブログ

ソフトウェアやボードゲームの開発を行うEJP株式会社のスタッフブログです。

64bit CPU 「A7」 による アプリ開発への期待と不安。

NewImage
Tetoatom(てとむ)です。
まさか、 iPhone 5s に 64bit CPU が搭載されるとは思いませんでした。。
iOS7 で変わる様々な UI や、画期的な機能、それに伴う消費電力の増加の為に、画期的な CPU に変更されるであろうことは容易に想像出来ましたが、さすがに 64bit CPU というのは想像できませんでした。

OS X では v10.6以降から 64ビットカーネル となっていますし、 Windows でも以前から 64ビット版はありましたが、 Windows7 にて積極的に 64ビット版を推奨しています。

また、その他の OS 例えば、 Unix /Linux でも 64ビットカーネルは存在します。
一般的にアプリケーションを使う側のユーザーは、このようなアーキテクチャを意識するシチュエーションは少ないでしょう。

64ビット OS になって、今まで使っていたアプリが動かなくなったから、代替アプリ探さなきゃなんて言うデメリットは有るかもしれません。。

アプリを使用するユーザーにとっては、アーキテクチャの変更ってネガティブなイメージが先行しそうな気がします。
もちろん、今後の展開を考えた時にワクワクするユーザーもいるでしょう。
その期待を裏切らないためには、アプリ開発者が的確に対応をしていかなければなりません。

まずは、基本的な 64ビットに関する前提知識と、今後やるべきことを調査、展開してみます。
なお、イメージを持つことを前提に記載するので、ざっくりと記載します。

64bit CPU / OS がもたらすメリットとは?

まず、すぐに言えることは、アプリケーションが使用できるメモリ空間が 「4GB」 という幅を超えることができる可能性が有るというものです(「可能性」と言って断言しなかった理由は後記)。

プログラムの仕組み

ソフトウェアプログラムというものは、CPUが持つ「レジスタ」(レジスタにも用途によって、いろいろ種類があります。ここでいうレジスタとは厳密に「アドレスレジスタ」に限定します。その他のレジスタについてはこちらに記載があります。)という物を使用して、プログラムを処理していきます。
また、実行中のプログラムそのものは主に主記憶と呼ばれるメモリに配置します。
実行されていないプログラムはハードディスクに保存されている状態となります。

このメモリとレジスタを使用して、CPUがプログラムを処理します。
ハードディスクなどの補助記憶装置に保存された、アプリケーションが実行されると、そのプログラムがメモリ上に展開されます。
そして、CPUはプログラムの先頭アドレスから順番に処理を読み込んで行きます。
その際に、単純に順番に読み込んでいくだけでなく、途中で色々なアドレスに行ったり来たり、繰り返したりしながら処理を行っていきます。

しかし、CPUは処理能力はありますが、記憶力があまりありません。
その為、レジスタを使用して、今、メモリ上のどのアドレスを参照するべきなのかという、アドレスの情報を保持します。

これにより、次に読み込むべき命令が格納されたメモリのアドレスを管理することが可能となっています。

この辺の話は、本が何冊も書けるくらいの話なので、ざっくりと書きましたが、興味があればWEB上にも「プログラム 仕組み」というキーワードで出てきますので、見てみることをおすすめします。

アドレス空間

このアドレスですが、32ビット OS では読んで字のごとく、32ビット分のアドレスしか保持できません。
32bitというのは2進数で32桁ということですので、
0b11111111111111111111111111111111
ですね。(2進数表記の場合は先頭に「0b」を記載します。) これは16進数だと、
0xFFFFFFFF
ですね。(16進数表記の場合は先頭に「0x」を記載します。)10進数だと、
4294967295
ですね。これは「4GB」を示しています。
4GBと言うのは 1024 x 1024 x 1024 x 4です。

よって、4GBまでのメモリのみしかプログラムで扱うことができないのです。

これが64ビットになることで、
2進数だと、
0b1111111111111111111111111111111111111111111111111111111111111111
16進数だと、
0xFFFFFFFFFFFFFFFF
10進数だと
18446744073709551615
です。

メモリのアドレス的には約16TB(テラバイト)使用することが可能です。
これが64bit化によるところですが、実はメモリやCPUの他にも様々なハードウェアが関係していたり、OSがメモリ空間の使用を限定していたりなどで、実際にはアプリケーションが使用できるアドレスと言うのは限られている場合があります。

その為、はじめに書いた「可能性」というのは、その他のハードウェアやOSによって、制限されていない場合に、フルでメモリを使うことが可能になるということです。


逆に 64bit CPU / OS がもたらすデメリットは?

デメリットももちろんあります。
プログラムに変更がない場合、いままで、情報を保持する為の が 32bit で収まっていたのですが、それが 64bit に拡張されるのです。
これは、箱は大きくなったので、場所はとるけど、実際に中に入れている情報は今までと変わらないということです。

メモリは多く使うけど、今までとやっていることは変わらないのです。

その為、これに関しての対策としては、必ず開発者が対応しなければなりません。
64bitカーネルの OS が 32bit 用にコンパイルされたアプリケーションを駆動することでは、今までの OS では可能でしたが、 iPhone がどのように切り分けているのかはまだ不明です。

iPhone 5s のイベントでは、 Xcode でリビルドするだけだと言っていましたが、本当にそレだけとは考えにくいです。。

主に Objective-C だけでコードを書いている様な場合には確かに、何か問題をラップするような仕組みが組み込めるかもしれません。
しかし、私の様に、ユーティリティ系のアプリを作っていると、C言語のライブラリを使いたい場合があります。

その場合は、オープンソースC言語用ライブラリをポーティングし、Xcode でビルドします。
iPhoneに含まれるデフォルトのライブラリの種類で、よくハマりましたが、32bitから64bitへの移行では、コンパイルはうまくいっても、動かすことが困難という問題に直面しそうです。。
怖い。。。
まだまだ、オープンソースライブラリのなかでも 64bit に対応していないものは少なく無いと思います。


アプリ開発者はどうすれば良いのか?

単刀直入に言えば、 Objective-C のみを使い続けていれば問題有りません。
今まで、 iPhone アプリ開発に関することで、 Apple が開発者を見放したことは無いと思います。
iOSのアップデートの際には常に新OSへのアプリ対応はリビルドのみで良かったと思います。
Retina対応でアイコンが必要になったのはありますが。)
今回の 64bit 対応についても Objective-C によるアプリケーションはリビルドだけで完了という意味でしょう。。

私みたいに、 C言語のライブラリを使用していると、苦労しますよ。。
すでに、動かないような気はしてます。
なので、密かにスクラッチで作りなおす構想はありますが。。

今、不安なのは iPhoneAndroid アプリを両方作れるようなフレームワークがありますよね。
このあたりもいずれ対応されるでしょうが、はじめのうちはなかなか動かないのではないかと、心配ではあります。

Unity などは JavaScript との事なのですが、バイナリを作る部分はどうなっているのでしょう。。
気になるところです。。


64bit CPU A7 を最大限に活かすプログラミング

やはり、これも Objective-C のみを使うことです。
特殊なことが必要ない限り、純粋なObjective-Cソースコードを書くことをおすすめします。
Apple が提供するフレームワークを使用する限り、間違いはないでしょう。
最大限に Apple が提供する機能を使えるでしょう。

しかし、私はやはり これを守らないでしょう

Appleフレームワークだけではできないこともたくさんあります。

Objective-C 以外で書かなければならない時が私にはあります。

きっと、問題もでるでしょう。
しかし、多くな開発者が挑戦することだと思います。
問題解決には多くの時間はとられないと思います。

これも iPhone アプリ開発の面白いところでもあります。
ロスコンパイルという、パソコン上で、別アーキテクチャのアプリケーションをコンパイルするというスタイルの iPhone アプリ開発ですが、シミュレータだと OK だけど、実機では動かないなんていうのは、私はしょっちゅうあります。

私が、 iPhone アプリ開発で感じる面白さは、この問題の解決に有るかもしれません。
うまく動いたら OK で、そのままリリースしていないで、自分だけ使っているなんてものもあります。
まあ、リリースする自信もないのですが。。

限られたリソースで、縛られたフレームワークの中で、試行錯誤することの面白さはあると思います。
本当に自由でなんでもできるものというのは、それはそれでいいのかもしれませんが、それならば、その システムじゃなくてもいいじゃないかと思ってしまいます。

iPhone はこんな縛りがあるから、こんな制限があるからというのも 逆に楽しいのです。
64bit 化で制限は増えるような気がしています。
(私のような異質の開発者にとって)
でも、これもより iPhone を好きになる理由です。代替案を探せばいいのだと思います。

前向きに 64bit 化に向かって行きたいと思います。