ClionでRustをBPが止められるようにする
前回CLionでRustがビルドする方法に関して紹介しました。
こちら手元だと、ビルドはできるがBPが止められないといった状態でした。 その原因に関しての備忘録です。
現象
BPを張り、デバッグ実行することでこのようなポップアップが出てBPが止まりませんでした。
表示されたポップアップのConfigureを押すと File -> Settings -> Build, Execution, Deployment -> Toolchains でCygwinが選択されており、そちらでエラーが出ていました。
解決方法
結論から言うとCygwinとは別に存在していたVisualStudioをデフォルトとすることで動作しました。
その他
当初はCygwinのバージョンが古いことに起因する問題かと思い、 Cygwinのインストーラからcygwin_dev等cygwinキーワードに引っかかった3つを更新してみましたが、 どのパッケージも正常にインストールが完了することができませんでした。 ミラーやアンインストールなどを試しましたがエラーが出てしまうので、 これは何か他の問題が起こっているのかもしれません。
ClionでRustをビルドする
- はじめに
- JetBrains CLionについて
- 1.Rustのインストール
- 2.JetBrains CLionのインストール
- 3.Rust用Pluginのインストール
- 4.新規プロジェクトの作成
- 参考
はじめに
少しずつ話題になりつつある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し、インストールします。
インストーラを起動するとコマンドプロンプトが立ち上がります。 最初にいくつかの選択肢が表示されますが、カスタマイズしたいなどなければEnterを押すことでデフォルトのまま進行します。
インストール完了後下記のようにコマンドプロンプト等で 下記のようにコマンドを実行して、バージョンが帰ってくれば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』を選択しインストールします。 インストールしてしばらくするとエディタを再起動するか聞かれるので再起動しておきます。
4.新規プロジェクトの作成
プラグインインストール後再起動できたら適当なプロジェクトを作ります。 File -> New Projectを選択し、Otherの項目の『Rust』を選択します。
プロジェクト作成後こんな感じになっていればOKです。
ビルドを実行し、Hello,Worldという出力が確認できれば完了です。
参考
配列要素コピー速度比較検証(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を使うとメモリ破壊したときに頭を抱えることになりそうなので、 複雑な処理の部分では避けたりネックになる部分に絞って使用するのがよさそうです。
参考 検証に使用したソース
git log の際に <E3>~と文字化けする際の対処
毎度コマンドを忘れて調べなおすので備忘録として。
使っているターミナル(SourceTreeとかForkとか)で下記コマンドを実行。
git config --global core.pager "LESSCHARSET=utf-8 less"
prd,stg用のサブドメインを設定する
突然ドメインで環境を分けたい気持ちになったので、
取得したドメインを使ってstg,prd環境を分けてみたいと思います。
ここでは取得したドメインは『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等小さい目の値にしておくといいでしょう。
設定して少ししたら設定した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が期待通り帰ってくれば設定完了です。