mirror of
https://github.com/falsycat/ar.falsy.cat.git
synced 2025-04-22 00:01:53 +00:00
Compare commits
No commits in common. "0705bc4e6f8b3fa744d04c2e785a987a2b70ea60" and "e5e9a644c7ef56c9f0ff1b32841bf0a9956fc7c0" have entirely different histories.
0705bc4e6f
...
e5e9a644c7
@ -1,42 +0,0 @@
|
|||||||
---
|
|
||||||
title: C/C++のsanitizerの使い方
|
|
||||||
tags: [note, info-tech, development, programming-language, howto]
|
|
||||||
---
|
|
||||||
|
|
||||||
## 概要
|
|
||||||
- バグを検知するコードを埋め込むための,sanitizerと呼ばれる機能がある
|
|
||||||
- このページではsanitizerの使い方を説明する
|
|
||||||
|
|
||||||
## 使い方
|
|
||||||
|
|
||||||
### コンパイル時にsanitizerを埋め込む
|
|
||||||
- 種類ごとにオプションが異なる
|
|
||||||
- XXXにはSanitizer名をカンマ区切りで羅列する
|
|
||||||
- 代表的なSanitizer名については後述
|
|
||||||
|
|
||||||
```bash
|
|
||||||
g++ -fsanitizer=XXX a.cc
|
|
||||||
gcc -fsanitizer=XXX a.c
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 代表的なSanitizer
|
|
||||||
- [ここ](https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html)で`-fsanitizer=`を検索すると一覧が見れる
|
|
||||||
- `thread`は`address`や`undefined`と同居できない
|
|
||||||
|
|
||||||
|名前|説明|
|
|
||||||
|:--|:--|
|
|
||||||
|`address`|[Address Sanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer)|
|
|
||||||
|`undefined`|[Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html)|
|
|
||||||
|`thread`|[Thread Sanitizer](https://github.com/google/sanitizers/wiki#threadsanitizer)|
|
|
||||||
|
|
||||||
### 実行時にsanitizerの挙動を指定する
|
|
||||||
- sanitizerが埋め込まれたバイナリに対して,実行時に,sanitizerの挙動を環境変数で指定することができる
|
|
||||||
- 詳細は各sanitizerの説明ページを参照
|
|
||||||
|
|
||||||
## 所感
|
|
||||||
- `thread`が強すぎる
|
|
||||||
- `thread`は実際に[Nf7](https://git.falsy.cat/nf7/nf7)のデバッグで使ってる
|
|
||||||
- sanitizerがなければ気づけなかったcondition raceがかなりあった
|
|
||||||
- 格好つけてロックフリーで書いたせい
|
|
||||||
- `thread`が`address`や`undefined`と一緒に使えないのが痛い
|
|
||||||
- どちらともを使うには,`thread`でビルド,テストした後に,オプションを変えてビルドし直し,同じテストを実行しなければならない
|
|
@ -1,102 +0,0 @@
|
|||||||
---
|
|
||||||
title: dart言語
|
|
||||||
tags: [note, info-tech, development, programming-language]
|
|
||||||
---
|
|
||||||
|
|
||||||
## 概要
|
|
||||||
- Google製プログラミング言語
|
|
||||||
- [flutter](note/info-tech/flutter.md)のための言語
|
|
||||||
- 日本語資料少なめ
|
|
||||||
- オブジェクト指向
|
|
||||||
|
|
||||||
## 特徴
|
|
||||||
- undefined behaviorは無い
|
|
||||||
- Null safety
|
|
||||||
- 型名に?を付ければNull許容型になる
|
|
||||||
- Null許容型に対してはNullチェックをしないとコンパイラがキレる
|
|
||||||
- 整数値以外は参照型
|
|
||||||
- GC(mark & sweep)搭載
|
|
||||||
- デストラクタは無さそう,そもそもmark & sweepでデストラクタは信頼できない
|
|
||||||
- コンストラクタが書きやすい
|
|
||||||
- わざわざメンバ変数と同じ名前の引数を書いて,代入して,,,ということをしなくてもいい
|
|
||||||
- 静的解析が強め
|
|
||||||
|
|
||||||
## 文法
|
|
||||||
- 大体は既存のやつと同じ
|
|
||||||
- 文末セミコロン必須
|
|
||||||
- 関数呼び出しの実引数リストでもケツカンマ許容
|
|
||||||
|
|
||||||
### 変数修飾子
|
|
||||||
- 型が自明な場合,型名は省略できる
|
|
||||||
- 省略できる場合は省略することが推奨される
|
|
||||||
|
|
||||||
```dart
|
|
||||||
// コンパイル時定数
|
|
||||||
const int x = 0;
|
|
||||||
const x = 0;
|
|
||||||
|
|
||||||
// 再代入不可能変数
|
|
||||||
final int x = 0;
|
|
||||||
final x = 0;
|
|
||||||
|
|
||||||
// 再代入可能変数
|
|
||||||
var int x = 0;
|
|
||||||
var x = 0;
|
|
||||||
|
|
||||||
// 遅延初期化変数
|
|
||||||
late int x;
|
|
||||||
late final int x;
|
|
||||||
```
|
|
||||||
|
|
||||||
#### final: 再代入不可能変数
|
|
||||||
- 値型の変数に対しては,値の変更を禁止する
|
|
||||||
- 参照型の変数に対しては,参照先の変更のみを禁止する
|
|
||||||
- dartでは,参照先のオブジェクトの変更を禁止することはできない
|
|
||||||
|
|
||||||
#### late: 遅延初期化
|
|
||||||
- 変数の初期化を遅延させることができる
|
|
||||||
- 実質的にはNull safetyの無いNull許容型
|
|
||||||
- `late final`修飾子によって複数回の代入をコンパイルエラーにできる
|
|
||||||
- ただし静的解析の精度は微妙なので,絶対に2回目の代入ができなくなるわけではない
|
|
||||||
|
|
||||||
### Null safety
|
|
||||||
- Null許容型に対しては,Nullを扱いやすくするための演算子が使える
|
|
||||||
- 関数の中で,変数に対して一度nullチェックをした場合,以降,その変数はNull許容型でないものとして扱える
|
|
||||||
```dart
|
|
||||||
(T? x) {
|
|
||||||
x ?? T(); // x が null ならば 0 それ以外ならば T()
|
|
||||||
x?.method(); // x が null ならば methodを呼ばずnullを返す それ以外ならば methodを呼ぶ
|
|
||||||
x!.method(); // x が nullでない ことを前提として methodを呼ぶ(実行時にnullだった場合runtime error)
|
|
||||||
};
|
|
||||||
(T? x) {
|
|
||||||
if (x == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
x.method(); // x!.method(); とする必要がない
|
|
||||||
};
|
|
||||||
(T? x) {
|
|
||||||
x.method(); // Nullチェックしてないのでコンパイルエラー
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
### コンストラクタ
|
|
||||||
- C++と比べてかなり書きやすい
|
|
||||||
|
|
||||||
```dart
|
|
||||||
class A {
|
|
||||||
final int x;
|
|
||||||
final int y;
|
|
||||||
final int z;
|
|
||||||
|
|
||||||
A(this.x, this.y, this.z);
|
|
||||||
A(this.x, {required this.y, this.z = 1});
|
|
||||||
A.empty() :
|
|
||||||
this.x = 0, this.y = 0, this.z = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
final a1 = A(0, 1, 2);
|
|
||||||
final a2 = A(0, y: 1);
|
|
||||||
final a3 = A.empty();
|
|
||||||
}
|
|
||||||
```
|
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: ArchLinuxのインストール
|
title: ArchLinuxのインストール
|
||||||
tags: [note, info-tech, linux, howto]
|
tags: [note, info-tech, linux]
|
||||||
---
|
---
|
||||||
|
|
||||||
## 概要
|
## 概要
|
||||||
|
@ -27,3 +27,6 @@ tags: [note, info-tech, tool]
|
|||||||
## 所感
|
## 所感
|
||||||
- ar.falsy.catの記事書くのに使っている
|
- ar.falsy.catの記事書くのに使っている
|
||||||
- WebDAVなどのファイルサーバー上にあるVaultを,全体をダウンロードせずに開けるようになれば素晴らしい
|
- WebDAVなどのファイルサーバー上にあるVaultを,全体をダウンロードせずに開けるようになれば素晴らしい
|
||||||
|
|
||||||
|
## 関連
|
||||||
|
- [Vaultをweb公開する](note/info-tech/publish-obsidian-by-quartz.md)
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: Pleroma
|
title: Pleroma
|
||||||
tags: [note, info-tech, web]
|
tags: [note, info-tech, software, web, sns, fediverse]
|
||||||
---
|
---
|
||||||
|
|
||||||
## 概要
|
## 概要
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: ObsidianとQuartzによるセカンドブレインデジタルガーデンの構築
|
title: ObsidianとQuartzによるセカンドブレインデジタルガーデンの構築
|
||||||
tags: [note, info-tech, web, tool, howto]
|
tags: [note, info-tech, web]
|
||||||
---
|
---
|
||||||
|
|
||||||
## 概要
|
## 概要
|
||||||
|
@ -4,7 +4,7 @@ tags: [note, study, statistics]
|
|||||||
---
|
---
|
||||||
|
|
||||||
## 概要
|
## 概要
|
||||||
- 結論に複数の[仮説検定](note/study/statistics/hypothesis-test.md)の結果が影響している時,その結論は検定の多重性問題を孕んでいる可能性がある
|
- 結論に複数の[仮設検定](note/study/statistics/hypothesis-test.md)の結果が影響している時,その結論は検定の多重性問題を孕んでいる可能性がある
|
||||||
- 問題を回避するためには,Holm法などで有意水準を下げる必要があるが,完璧ではない
|
- 問題を回避するためには,Holm法などで有意水準を下げる必要があるが,完璧ではない
|
||||||
|
|
||||||
## 不確実な情報による結論の不確実性
|
## 不確実な情報による結論の不確実性
|
||||||
|
@ -4,7 +4,7 @@ tags: [note, study, statistics]
|
|||||||
---
|
---
|
||||||
|
|
||||||
## 概要
|
## 概要
|
||||||
- [仮説検定](note/study/statistics/hypothesis-test.md)におけるパラメトリック検定とは,母集団のサンプルに対する検定のうち,母集団の分布を事前に仮定する検定である
|
- [仮設検定](note/study/statistics/hypothesis-test.md)におけるパラメトリック検定とは,母集団のサンプルに対する検定のうち,母集団の分布を事前に仮定する検定である
|
||||||
- 母集団のサンプルに対する検定のうち,パラメトリック検定でないものはノンパラメトリック検定である
|
- 母集団のサンプルに対する検定のうち,パラメトリック検定でないものはノンパラメトリック検定である
|
||||||
|
|
||||||
## パラメトリック検定
|
## パラメトリック検定
|
||||||
@ -30,7 +30,7 @@ tags: [note, study, statistics]
|
|||||||
- そもそもコンピュータ使えば計算コストは無視できる
|
- そもそもコンピュータ使えば計算コストは無視できる
|
||||||
|
|
||||||
## まとめ
|
## まとめ
|
||||||
- 仮説検定は2つに分けられる
|
- 仮設検定は2つに分けられる
|
||||||
- パラメトリック検定: 母集団の分布になんらかの仮定が必要な検定
|
- パラメトリック検定: 母集団の分布になんらかの仮定が必要な検定
|
||||||
- ノンパラメトリック検定: それ以外の検定
|
- ノンパラメトリック検定: それ以外の検定
|
||||||
- パラメトリック検定をしたいがために多重検定を使うぐらいならば,ノンパラメトリック検定を使うべき
|
- パラメトリック検定をしたいがために多重検定を使うぐらいならば,ノンパラメトリック検定を使うべき
|
Loading…
x
Reference in New Issue
Block a user