ClionでRustをBPが止められるようにする

前回CLionでRustがビルドする方法に関して紹介しました。

こちら手元だと、ビルドはできるがBPが止められないといった状態でした。 その原因に関しての備忘録です。

現象

BPを張り、デバッグ実行することでこのようなポップアップが出てBPが止まりませんでした。

f:id:vex-field:20210307185428p:plain

表示されたポップアップのConfigureを押すと File -> Settings -> Build, Execution, Deployment -> Toolchains でCygwinが選択されており、そちらでエラーが出ていました。 f:id:vex-field:20210307185652p:plain

解決方法

結論から言うとCygwinとは別に存在していたVisualStudioをデフォルトとすることで動作しました。 f:id:vex-field:20210307190012p:plain

その他

当初はCygwinのバージョンが古いことに起因する問題かと思い、 Cygwinインストーラからcygwin_dev等cygwinキーワードに引っかかった3つを更新してみましたが、 どのパッケージも正常にインストールが完了することができませんでした。 ミラーやアンインストールなどを試しましたがエラーが出てしまうので、 これは何か他の問題が起こっているのかもしれません。

ClionでRustをビルドする

はじめに

少しずつ話題になりつつあるRustについて簡単に触ってみます。

普段使用しているのはVisualStudioなのでそちらで使用できるのが望ましいですが、 現状軽く探しても見つからなかったので、偶々ライセンスを持っていたJetBrainsのCLionで試してみようと思い至りました。

ということで今回はJetBrainsのCLionというIDEを使用してRustをビルドするところまで試してみます。

CLionを持っていない人はVSCode等でもインテリセンスやデバッガ等を使用できるかと思います。(未検証)

JetBrains CLionについて

JetBrainsは割と有名なIDEを作っている会社です。 各言語や環境ごとにIDEがあり、その一つにC/C++用としてCLionがあります。 超有名どころで行くと無料のAndroidStudioやInteliJはこのJetBrainsが開発しています。

お値段も年間1万円位で、全部入りでも3万弱と手を出しやすい値段ですね。 www.jetbrains.com

余談ですが、php等のWeb系であればphpStorm、C#であればRiderなどもおすすめです。 RiderはUnityでも使用できるようなので使っている企業もあるかもしれませんね。

1.Rustのインストール

rustupコマンドでもインストールできるようですが、 折角インストーラが用意されているようなのでそちらを使用してみます。 こちらからインストーラをDLし、インストールします。 f:id:vex-field:20210307180300p:plain

インストーラを起動するとコマンドプロンプトが立ち上がります。 最初にいくつかの選択肢が表示されますが、カスタマイズしたいなどなければEnterを押すことでデフォルトのまま進行します。 f:id:vex-field:20210307181124p:plain

インストール完了後下記のようにコマンドプロンプト等で 下記のようにコマンドを実行して、バージョンが帰ってくればOKです。

User>rustc --version
rustc 1.50.0 (cb75ad5db 2021-02-10)

2.JetBrains CLionのインストール

こちらからDLすることができます。 既にライセンスを持っている方はJetBrainsToolBoxというのがあるのでそちらからインストールするのが楽でおすすめです。 CLionが起動できたらOKです。

3.Rust用Pluginのインストール

File -> Settings -> Plugin を開きMarketplaceから『Rust』を選択しインストールします。 インストールしてしばらくするとエディタを再起動するか聞かれるので再起動しておきます。 f:id:vex-field:20210307182941p:plain

4.新規プロジェクトの作成

プラグインインストール後再起動できたら適当なプロジェクトを作ります。 File -> New Projectを選択し、Otherの項目の『Rust』を選択します。 f:id:vex-field:20210307184843p:plain

プロジェクト作成後こんな感じになっていればOKです。 f:id:vex-field:20210307184941p:plain

ビルドを実行し、Hello,Worldという出力が確認できれば完了です。 f:id:vex-field:20210307183305p:plain

参考

Rust — CLion インストール - The Rust Programming Language 日本語版

配列要素コピー速度比較検証(c++)

はじめに

ここ最近比較的C++のコードを書く機会が多く、 メモリコピーの際にどの書き方が早いのか実際どうなるか試したことがなかったで検証してみました。

参考になれば幸いです。

検証

検証環境

  • OS: Windows10 Pro 2004
  • CPU: Ryzen3950X
  • メモリ: 64GB

検証内容

ゲーム系でfloat型3値のVector3を扱うことが多いので、 こちらのデータを1000万個のコピーする速度を見ました。

配列のnewなどは面倒だったのでvectorで事前に配列のデータはある状態となっています。

またこの界隈でよく聞くforループの際のi++よりも++iが早い、というのも合わせて試してみようと思います。

検証結果

vector
i++
vector
++i
pointer
i++
pointer
++i
loop ref
i++
loop ref
++i
memcpy
Debug 765.7022 779.0071 50.7569 44.6103 273.6087 277.0462 7.9078
Release 15.3483 14.8346 14.1941 15.1834 15.0048 15.4803 8.2762

Debugの状態だとポインタを使った参照を使うことで非常に高速化されました。 これはおそらくvectorのデバッグチェック処理を挟まないために高速化されたんでしょうね。

Releaseにすると全体的に同じ程度の実行速度という結果となりました。 驚きなのはmemcpyはDebug,Releaseともにほぼ処理時間が同じということです。 ※Releaseの方が遅く見えるのは誤差です。 memcpyってこんなに優秀だったんですね...。

またi++,++iに関しては結果からは有意な差がでませんでした。 1000万回程度じゃ大した差にならないのか、それともキャッシュの問題で差が平均化されてしまったのか...。

結論

Debug,Releaseともにmemcpyが最も高速

個人的には何でもかんでもmemcpyを使うとメモリ破壊したときに頭を抱えることになりそうなので、 複雑な処理の部分では避けたりネックになる部分に絞って使用するのがよさそうです。

参考 検証に使用したソース

prd,stg用のサブドメインを設定する

突然ドメインで環境を分けたい気持ちになったので、

取得したドメインを使ってstg,prd環境を分けてみたいと思います。

 

今回ドメインAWSのRoute53で取りました。

ここでは取得したドメインは『example.com』とします。
このドメインを下記のようにつながるようにしたいと思います。
stg環境: stg.example.com
prd環境: example.com

 

https://note.com/dafujii/n/n352e3d07dcfd
こちらを参考にするとRoute53では2種類の設定方法があるようです。

 

1.既にあるホストゾーンのレコードセットに追加する
2.新しくホストゾーンを作ってそちらのレコードセットに追加する

 

後者のほうはのホストゾーンを作るほうはどうやらその分お金がかかるようなので、

今回は前者のほうで進めます。

 

事前に接続用のコンテナを立ち上げておきます。

 

AWSの管理画面を開いてRoute53 -> ホストゾーンを開きます。

ここに下記のように設定Aレコードを設定します。

SSではTTLは大きい値になっていますが最初は300等小さい目の値にしておくといいでしょう。

f:id:vex-field:20200613014104p:plain

 

設定して少ししたら設定したIPが取れるかテストします。

C:\Users\User>ping www.example.com
www.example.com [stg環境用のアドレス]に ping を送信しています 32 バイトのデータ: C:\Users\User>ping www.stg.example.com
www.stg.example.com [stg環境用のアドレス]に ping を送信しています 32 バイトのデータ:

IPが期待通り帰ってくれば設定完了です。