SSブログ

C++20の新機能Rangesを使ってみたい!(2) [ソフトウェア/PC関係]

C++ Rangesの話の続き。であるが,Rangesの機能の話を続ける前に,試してみる環境の話をしたい。記事のタイトルも「Rangesを使ってみたい」だったわけで。プログラミング言語の機能なのだから,実際にプログラムを動かしながらやっていきたいところだ。

C++ Builderの記事でも書いたが昔は無料で試せるC++コンパイラなどまずなかったが,今や最先端の処理系を基本的に無料で試すことができる。ありがたい時代になったものだ。今世界的に代表的なC++コンパイラといえばMicrosoftのVisual C++,GNUのg++,そして様々な会社が関わって開発されているClangの3つといってよいだろう。各陣営(という言い方が適当かはわからないが)標準化に対するスタンスは微妙に違うようだが,新しい標準への対応や提案段階の機能の試験的実装などが早いのは確かである。なので,新しい機能を実際に試してみようと思ったら,まずこれら3つの処理系をチェックしてみると良い。しかもWindows環境では3つのどれも無料で使用可能である。VC++の場合は,個人利用や小規模な企業などライセンス条項の使用権に該当すればVisual StudioのCommunity Editionを無料で利用できる。無料バージョンとは言え,製品版のProffessional Editionと機能的にほぼ同等なので,C++を試してみる分には何ら不足はないはずだ。 g++とClangについては,基本的にはLinux環境向けに開発されているオープンソースのソフトウェアである。が現行のWindowsではどちらも利用可能になっている。その方法は2通りある。1つはcygwinというLinux互換ツール環境を使う方法で,もう一つはWSLというWindows上でLinuxを動作させる仕組みを使うことである(詳しい人にはDockerを使ったり,Hyper-Vのような仮想化環境を使うなどの選択肢もあるがここでは触れない)。どちらも標準インストールのWindowsには含まれていないので,自力でインストールする必要がある。インストール方法についてはInternet上にいくらでも解説しているサイトを見つけることができるのでここでは割愛する。

cygwinもWSLもインストールしただけではg++もClangもインストールされていない可能性があるので必要に応じて追加パッケージのインストールが必要となる。例えばcygwinでは標準ではg++がインストールされないので,cygwinのインストール時に使用したセットアップ・プログラムを再度起動して,パッケージ選択画面で,「View」を「Full」に変更してから「Search」欄に「g++」と入力して検索する。検索結果の中に「gcc-g++」というパッケージが見つかると思うので,マウスでダブル・クリックすると「New」列の表示が「skip」からバージョン番号に変わる。現時点では選択できるg++のバージョンはいくつかあるのだが特に理由がない限り最新バージョンを選んでおけばよいだろう。私の環境では11.2がインストールされている。Clangの場合はcygwinではあまり新しいバージョンのパッケージは用意されていなくて。私の環境では8.0.1となっている。これで良ければg++と同様のやり方でパッケージをインストールできる。

WSLの場合,Linuxのディストリビューションと同じものが動作すると考えて良いので,Linux用に開発されているソフトウェアは最新版が利用できると考えて良い。私の環境では好みでubuntuを使用しているので,ubuntuを例にとって説明する。WSL2で配布されているubuntuにはいくつかのバージョンが有り,少し前までは20.0.4が最新であった。このバージョンならwslコマンドでインストールできる。ただ,こいつは少し古いので,配布されているソフトウェア・パッケージのバージョンが最新ではない場合がある。もちろん,自分でソース・コードからビルドすれば最新バージョンを使うことは可能だが色々と面倒くさい場合がある。私の調べたところubuntu20.0.4でふつうにaptコマンドでインストールできるのはg++が9.3.0であった。しかしテスト版のパッケージを配布しているサイトを登録するとg++11をインストールできた。手順についてはこちらのサイトを参照されたい(英語だが,特に難しいことは書いてない。テスト版パッケージの利用は自己責任なので悪しからず。) Clangに至ってはubuntu 20.0.4のインストール直後にはパッケージすら見つからなかった。だが,以下のコマンドで,リストをアップデートしてから再度試したらたらインストールできた。バージョンは10.0であった。

user@hostname ~/cpp
$ sudo apt update

....(出力は省略)...

もっと新しいバージョンを使いたい場合は,Clangの公式サイトからpre-built版をダウンロードできる。ダウンロードしたアーカイブ・ファイルを展開しまるごと/usr/localにコピーすれば使えるようになる。現時点の最新版はバージョン14である。

user@hostname ~/cpp
$ tar xf clang+llvm-14.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz

user@hostname ~/cpp
$ cd clang*

user@hostname ~/cpp/clang+llvm-14.0.0-x86_64-linux-gnu-ubuntu-18.04
$ sudo cp -R * /usr/local/

ubuntu 20.0.4のところで「少し前までは最新」と含みをもたせた書き方をしたが,実は今週になって22.0.4が利用可能になり,WSL2版も用意されたのだ。まだwslコマンドではインストールできないようだが,「ストア」アプリからはインストール可能になっている。最新版だけあって,g++も11.2,Clangも14.0をインストールできる。現状これを使うのが一番お手軽である。

とこれで有力な3大処理系が揃ったことになる。これはなんとも贅沢な環境だ。問題はRangesのサポート状況だが,こちらのページにC++の各改訂版の新機能の処理系別のサポート状況がまとめられている。Ranges は「c++ 20 library features」の表の中段くらいに「The One Ranges Proposal」として載っている。これによるとg++はバージョン10で一部サポート,Clangはバージョン13で一部サポート,VC++はバージョン19.29でサポート(*が付いてるが)となっており,どの処理系でもまだ完全サポートには至っていないことを窺わせる。最新の機能なので仕方ないとも言えるし,C++20に取り込まれたRangesがまだ不完全と言われていることも関係しているかも知れない。そんな訳で実際どのくらいまで使えるものかは,実験してみるしかない。次回はその辺りを書きたい。


nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。