LEFログ:学習記録ノート

leflog: 学習の記録をどんどんアップしていきます

『並行プログラミング入門』読書会、第42回に参加しました!

www.oreilly.co.jp

『並行プログラミング入門 ―Rust、C、アセンブリによる実装からのアプローチ』

『並行プログラミング』読書会とは?

mobmob.connpass.com

『並行プログラミング入門』読書会 #42 - connpass

こちらの読書会に参加させて頂きました!

ちょうど42回目の開催だったので、SF好きとしては運命のようなものを感じ、思い切って参加してみました。

主催者の方(おーひらさん)が以前じぶんのリーダブルコード輪読会にあそびに来てくださったので、またおーひらさんとお話ししてみたいというのも動機づけになりました。

結論

C言語とRust、というより低レイヤに関する自分の知識が無さすぎて、もっと基礎から学習しようと思いました。

どのあたりを学習したの?

『並行プログラミング入門』をやっていく会

2023/06/29(木) の回です。

なぜ内容を理解できなかったのか?(自戒)

  • まったく予習をしていなかった
  • そもそも本を持っていないまま参加した(無謀)
  • C言語やRustなどの低レイヤに関する知識がほとんど無かった
  • 計算機科学に関する知識不足
  • ノードやHeap、スタック(ロックフリースタック)、構造体、RustのBox、CAS、LL/SC……というか根本的なメモリやポインタやアドレスに関する無知

逆に分かったことは?

ABA問題に関する概念的なイメージと理解。

ABA問題 - Wikipedia

ABA問題(英: ABA problem)とは、マルチスレッドプログラミングにおいて同期化の過程で発生する問題であり、ある記憶域を二回読み出し、二回の読み出しが同じ値であることを「変更がない」とみなすことにしたとき、二回の読み出しの間に別のスレッドが値を変更し、他の作業を行った後また元の値に戻すと、最初のスレッドが誤って「変更がなかった」とみなしてしまうというものである。

つまり、マルチスレッドで動かしているときは、最終的に同じ値になっていたとしても、途中でおこなわれた変更をきちんと認識できるような仕組みにしている必要がある。

手元に書籍がないので確認できませんが、『並行プログラミング』内に図解された箇所があって、そのおかげで概念的なイメージを持つことができました。

(メモリ解放後にアドレスにHeadが向いてしまうことによって生じる問題?)

この状態を改善するため(内容を理解するため)に何をするべきか?

具体的な方法論

並行処理、そしてGo言語を理解するためには、読書会でオススメいただいた本を読む必要がありそう📚

https://zenn.dev/link/comments/4391b63fa80d3c

教えて頂いた皆様、ありがとうございました!

このErlangの本は名著であることも知れて良かったです✨

感想

自分が井の中の蛙であることを自覚しました。正直、自作サービスである『引用箱』をリリースしてから現状にちょっと満足しちゃってる自分がいました。

最近ブラウザやNode.jsのTypeScript、NextjsとSupabaseの学習をしていて、高レイヤばかりに触れていたので、その差異に驚きました。

じぶんのWeb開発に関する知識というのは、コンピュータという広大な領域の中の1つのジャンルにしか過ぎなくて、もっと低レイヤな領域に関しては自分は何も分かっていなかったんだな、ということが肌感覚で理解できて、自分の無知に関して少し落ち込むと同時に、これからも学習することはまだまだ多くあることを心の底から理解しました(久々に「ヤベッ1割も分からん!」状態でした)。すごく謙虚な気持ちになれたのと同時に、いま居る所から少しずつ 少しずつ堅実に進んでいくしかないと気持ちを新たにしました。

とりあえず、いま目の前にある課題をこなすことに集中したほうが良さそう、と直感的に感じました。

それから、本日の読書会ではおーひらさんはご不在だったのですが、輪読会は問題なく進行していて、その仕組みづくりに感心しました。

改めて、読書会でお話してくださった皆様、ありがとうございました!🙌