Compare commits

..

3 Commits

Author SHA1 Message Date
0705bc4e6f add new article 2023-06-21 07:36:18 +09:00
62c3f06d55 fix category 2023-06-21 07:35:08 +09:00
8cc3f099c0 fix typo 2023-06-21 07:32:18 +09:00
8 changed files with 151 additions and 10 deletions

View File

@ -0,0 +1,42 @@
---
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`でビルド,テストした後に,オプションを変えてビルドし直し,同じテストを実行しなければならない

View File

@ -0,0 +1,102 @@
---
title: dart言語
tags: [note, info-tech, development, programming-language]
---
## 概要
- Google製プログラミング言語
- [flutter](note/info-tech/flutter.md)のための言語
- 日本語資料少なめ
- オブジェクト指向
## 特徴
- undefined behaviorは無い
- Null safety
- 型名に?を付ければNull許容型になる
- Null許容型に対してはNullチェックをしないとコンパイラがキレる
- 整数値以外は参照型
- GCmark & 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();
}
```

View File

@ -1,6 +1,6 @@
--- ---
title: ArchLinuxのインストール title: ArchLinuxのインストール
tags: [note, info-tech, linux] tags: [note, info-tech, linux, howto]
--- ---
## 概要 ## 概要

View File

@ -26,7 +26,4 @@ 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)

View File

@ -1,6 +1,6 @@
--- ---
title: Pleroma title: Pleroma
tags: [note, info-tech, software, web, sns, fediverse] tags: [note, info-tech, web]
--- ---
## 概要 ## 概要

View File

@ -1,6 +1,6 @@
--- ---
title: ObsidianとQuartzによるセカンドブレインデジタルガーデンの構築 title: ObsidianとQuartzによるセカンドブレインデジタルガーデンの構築
tags: [note, info-tech, web] tags: [note, info-tech, web, tool, howto]
--- ---
## 概要 ## 概要

View File

@ -4,7 +4,7 @@ tags: [note, study, statistics]
--- ---
## 概要 ## 概要
- 結論に複数の[検定](note/study/statistics/hypothesis-test.md)の結果が影響している時,その結論は検定の多重性問題を孕んでいる可能性がある - 結論に複数の[検定](note/study/statistics/hypothesis-test.md)の結果が影響している時,その結論は検定の多重性問題を孕んでいる可能性がある
- 問題を回避するためにはHolm法などで有意水準を下げる必要があるが完璧ではない - 問題を回避するためにはHolm法などで有意水準を下げる必要があるが完璧ではない
## 不確実な情報による結論の不確実性 ## 不確実な情報による結論の不確実性

View File

@ -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つに分けられる
- パラメトリック検定: 母集団の分布になんらかの仮定が必要な検定 - パラメトリック検定: 母集団の分布になんらかの仮定が必要な検定
- ノンパラメトリック検定: それ以外の検定 - ノンパラメトリック検定: それ以外の検定
- パラメトリック検定をしたいがために多重検定を使うぐらいならば,ノンパラメトリック検定を使うべき - パラメトリック検定をしたいがために多重検定を使うぐらいならば,ノンパラメトリック検定を使うべき