12月2日の学び(プログラミング言語の分類)
型推論
- 周囲の文脈から型を推論すること
- 変数に対する型の記載がなくなるため簡潔に記載ができる(ここ重要!)
静的型付け
動的型付け
型安全
- 型チェックを行うことにより(文法的には正しくても意味をもたない配列範囲外の処理参照など)動作未定義の処理が存在しないことを保証する
- 代償として静的型付けでは型を指定するという煩雑さが存在する
例外処理
- 定義:プログラムの上位の処理から呼び出されている下位の処理で継続不能、または継続すれば支障をきたす異常事態に陥ったとき、制御を呼び出し元の上位の処理に返し安全な状態になるよう回復処理 − 目的:上に記載の通り「異常事態発生の場合安全な状態に回復する」のが最大の目的(ようは回復したい!!)
- 言語レベルで組み込みの例外処理を持たないC言語などでは、戻り値で(非負や非NULL)などでチェックする
- 上の場合はデメリットが存在する①. そもそも戻り値は無視できる②. 具体的なエラー情報が不明③. 戻り値チェックの記述が煩雑
- 例外処理は言語側にないといろいろ困るよね!というのが結論
例外安全
- 実行中に失敗してもメモリ不足や不正な出力などを引き起こさないこと。例外安全には最低限から実行に失敗しないことの保証まで複数のレベルが存在。 okn-yu.hatenablog.com
例外中立
- 発生した例外を握りつぶさないこと
11月30日の学び(セッション①)
- セッションは端末と関連している概念らしい。
- やっぱり自前のLinux環境がないと辛い。
セッション
- セッションはセッションIDという値を共有するプロセスの集まりである
- 1つのプロセスグループ内のプロセスは同じ値のセッションIDを共有する
- つまりセッションとプロセスグループで二階層のプロセス階層が形成できる
セッションの生成
- 新たなセッションの生成はプロセスが setsid(2) を呼び出すことで行う
- セッションを新しく生成したプロセスはセッションリーダとなる
セッションID
- 各セッションにはセッションリーダが1つ存在する
- セッションIDはセッションリーダーのプロセスIDとなる
セションと制御端末
− 各セッションは一つの制御端末(ttyやpts)と紐付いている - セッションリーダーが最初に端末をオープンした際に制御端末は設定される
qiita.com yktwww.hatenablog.com d.hatena.ne.jp プロセスグループ - Wikipedia
11月29日の学び(プロセスグループ)
リペアレンティング
- Linux/Unixでは親プロセスが死ぬと子プロセスは「孤児プロセス」として取り扱われる
- 孤児となってしまったプロセスは即座にinitプロセスの配下に紐付けられ生き続けることができる
- この動作をリペアレンティングと呼び、カーネルによって行われる
プロセスグループ
- プロセスグループとはLinux/Unixにおけるプロセス管理の仕組みであり、複数のプロセスを束ねた集合のこと
- プロセスをforkして子プロセスを作成した場合、親、子プロセスは同一プロセスグループに所属
- 子がさらに子をforkしてもこれらはすべて同一の親にぶら下がる一つのグループとして扱われる
- パイプでつないだプロセス同士は同じプロセスグループに所属
次回予告
セッショングループに関して勉強する予定
11月26日の学び(trapコマンド)
trapコマンド
- 実行中のプロセスに対して送出されたシグナルを補足し、予め指定していた処理を実行するコマンド
- 使い方としてはシェルスクリプト内部にtrap処理を記載し、実行中のシェルスクリプトに外部からシグナルを送信した際の動作を指定できる
trap 'コマンド' シグナルリスト
次回予告
shellscript.sunone.me ↑明日いろいろなシグナルの送信&トラップで遊んでみる