ますたーさん
聞き流しプログラミング言語学習
生成AIが作成した汎用的なプログラミング言語の知識を、聞き流しで学習するための音声コンテンツです。個人学習用として作成しています。音声:VOICEVOX(青山龍星)
Where to listen?
Podcasts in the app Replaio Radio Coming soonPodcasts are coming to the app soon. Install now and be the first to see a whole new take on podcasts
Episodes
Rust 021 Box - ヒープに置く箱 03.05.2026 11:24
第21章へようこそ。 今日のテーマは「Box」です。 前章でスタックとヒープという2つの領域を扱いました。 スタックは関数呼び出しに合わせて伸び縮みし、サイズがコンパイル時に決まるあたいを置く領域。 ヒープは関数の生存期間と独立に確保解放され、サイズが実行時に決まるあたいを置く領域。 StringやVecはこの2つの領域にまたがる型でした。 スタック側にポインタと長さと容量の3つを持ち、ヒープ側に実データを持つ。 ではSt...
Rust 020 スタックとヒープ - 2つのメモリ領域 02.05.2026 17:31
第20章へようこそ。 今日のテーマは「スタックとヒープ」です。 ここまでの章で「スタック上のポインタ」「ヒープ上のデータ」という言葉を何度か使ってきました。 所有権の章ではStringの代入時にスタック上の情報が渡されると話し、文字列の章ではヒープにバイト列が置かれると話した。 これらの説明は、すべてスタックとヒープという2つの領域があることを前提にしていた。 今日はその2つの領域そのものを扱います。 2つの領域...
Rust 019 UTF-8の世界 - 文字とバイト 01.05.2026 8:58
第19章へようこそ。 今日のテーマは「UTF-8」です。 Stringも文字列スライスも、中身はUTF-8でエンコードされたバイト列でした。 ここまでの章で何度か触れてきましたが、深く踏み込んでいなかった。 文字列を扱うとき、「文字」と「バイト」の間にずれがあることが、さまざまな場面で現れる。 長さの意味、インデックスの禁止、イテレートの方法、絵文字の扱い。 これらすべての根にあるのがUTF-8の性質です。 今日はその性質を見...
Rust 018 文字列の変換 - 所有と借用を行き来する 30.04.2026 9:02
第18章へようこそ。 今日のテーマは「文字列の変換」です。 前の2章で、文字列が2つの型に分かれることを見ました。 所有するStringと、借りる文字列スライス。 2つの型がある以上、その間を行き来する必要が生じます。 文字列スライスからStringを作る場面。Stringから文字列スライスを取り出す場面。 この2方向の変換は、形は似ていますが中身はまったく違う。 片方はヒープ割当てを伴う重い操作、もう片方は参照を組み立てるだ...
Rust 017 &str入門 - 借りる文字列 29.04.2026 8:42
第17章へようこそ。 今日のテーマは「文字列スライス」です。 前章でStringを扱いました。ヒープに持つ所有権付きの可変長文字列です。 文字列のもう一方の型が、今日の主役、文字列スライス。 借りている文字列、参照としての文字列です。 表記は&str。str単体ではほぼ使われず、参照の形でだけ現れる。 所有を持たず、読み取り専用で、サイズも固定されている。 Stringと対になる存在として理解します。
Rust 016 String入門 - 所有する文字列 28.04.2026 8:45
第16章へようこそ。 今日のテーマは「String」です。 多くのプログラミング言語では、文字列は1つの型で扱われる。 しかしRustでは、文字列を2つの型に分けている。 所有する文字列と、借りている文字列。 所有する方がString。借りる方が文字列スライスと呼ばれる別の型。 この2つの区別は、所有権と借用の区別を文字列にも持ち込んだ結果です。 今日はStringを見ていきます。 ヒープに持つ所有権付きの、可変長文字列です。
Rust 015 ライフタイム省略と’static - 書かなくてよい場合 27.04.2026 8:56
第15章へようこそ。 今日のテーマは「ライフタイム省略と'static」です。 前の2章でライフタイム注釈の書き方を学びました。 しかし、実際のRustコードを見ると、ライフタイム注釈が書かれている関数は意外と少ない。 参照を受け取って参照を返す関数でも、注釈なしで書かれていることが多い。 これは、コンパイラが自動的に注釈を補っているからです。 この補完の仕組みをライフタイム省略規則と呼ぶ。 もう1つ、今日扱うのは...
Rust 014 関数と構造体のライフタイム - 注釈を書く 26.04.2026 9:25
第14章へようこそ。 今日のテーマは「関数と構造体のライフタイム」です。 前章でライフタイムの概念を学びました。 参照には有効期間があり、それが型システムの一部として扱われる。 今日は、ライフタイム注釈を実際に書く場面を見ていきます。 関数が参照を受け取って参照を返すとき。 構造体が参照をフィールドに持つとき。 メソッドを定義するとき。 それぞれで注釈がどう書かれ、何を意味するかを見ていきます。
Rust 013 ライフタイム - 参照の有効期間 25.04.2026 8:14
第13章へようこそ。 今日のテーマは「ライフタイム」です。 第1章で所有権と借用を学びました。 値の所有者は常に1つ。参照を作ることで値を借りられる。 借りている間、元の値は動かせない。 しかし、第1章では触れなかった問いがあります。 参照はいつまで有効なのか。 参照が指している先の値が消えたら、参照はどうなるのか。 この問いに答える仕組みが、ライフタイムです。 ライフタイムは、参照の有効期間を型システムの一部...
Rust 012 関連型 - トレイトが型を持つとき 24.04.2026 7:56
第12章へようこそ。 今日のテーマは「関連型」です。 第4章でイテレータを学んだとき、Itemという言葉が出てきました。 イテレータが返す要素の型。整数のイテレータなら整数。文字列のイテレータなら文字列。 このItemは、Iteratorトレイトの中で定義された型です。 トレイトの中に型が定義されている。これが関連型。 関連型は、第10章の型パラメータと似た役割を持つように見える。 どちらも「後から決まる型」を表現する。 し...
Rust 011 トレイト境界 - ジェネリクスに条件を付ける 23.04.2026 8:32
第11章へようこそ。 今日のテーマは「トレイト境界」です。 前章で、制約のない型パラメータTにはほとんど何もできないと話しました。 Tがどんな型かわからない以上、比較も表示も複製もできない。 第8章でトレイトを学びました。 トレイトは「このメソッド群を持つこと」という契約を定義する仕組みでした。 トレイト境界は、この2つを結びつけます。 「Tはこのトレイトを実装している」という条件を型パラメータに付ける。 ジェ...
Rust 010 ジェネリクス - 型を引数にする 22.04.2026 7:11
第10章へようこそ。 今日のテーマは「ジェネリクス」です。 ここまでの章で、すでにジェネリクスに何度も出会っています。 第2章のOption型。第3章のResult型。第4章のイテレータが返すVec。 これらはすべて、型パラメータを持つジェネリックな型です。 しかし、「型パラメータを持つ」とはどういうことか。 なぜ型をパラメータにする必要があるのか。 コンパイラはジェネリックなコードをどう処理するのか。 今日はこの仕組みを正...
Rust 009 エラー処理 - エラー型を設計する 21.04.2026 11:39
第9章へようこそ。 今日のテーマは「エラー型の設計」です。 第3章でResult型を学びました。 関数が失敗しうるとき、戻り値をResult型にする。Okに成功時のあたいが入り、Errにエラー情報が入る。 ?演算子で、エラーを呼び出し元に伝播できる。 しかし、第3章では触れなかったことがあります。 Errの中に入れるエラー型を、どう設計するのか。 ファイルの読み込みは入出力エラーを返す。文字列のパースはパースエラーを返す。 1つ...
Rust 008 トレイト - 型と振る舞いを分離する 20.04.2026 11:50
第8章へようこそ。 今日のテーマは「トレイト」です。 第6章で構造体とenumを扱いました。 構造体はデータの形を定義し、implブロックでメソッドを付けた。 しかし、あのメソッドは特定の構造体にしか使えない。 構造体Aに定義したメソッドは、構造体Bには使えない。 ここで疑問が生まれます。 異なる型が同じ操作を持つことを、どう表現するのか。 たとえば、文字列として表示するという操作は、整数にも浮動小数点数にも構造体に...
Rust 007 パターンマッチ - 値の構造で分岐する 19.04.2026 10:41
第7章へようこそ。 今日のテーマはパターンマッチです。 第2章のOptionでmatchを使ってSomeとNoneに分岐しました。 第3章のResultでもmatchでOkとErrに分岐しました。 第6章のenumでも、バリアントの判定にmatchを使うと説明しました。 これまで道具として使ってきたmatchの背後には、「パターン」という仕組みがあります。 パターンとは、あたいの構造を記述する式です。 matchは値とパターンを照合し、一致したパターンに対応す...
Rust 006 StructとEnum - データに形を与える 18.04.2026 13:09
第6章へようこそ。 今日のテーマはstructとenum、つまり構造体と列挙型、です。 ここまでの章で、i32やString、boolといった型を使ってきました。 これらはRustが最初から用意している型です。 しかし実際のプログラムでは、これだけでは足りない。 ユーザーの名前と年齢とメールアドレスを1つにまとめて扱いたい。 処理の結果が「成功」「タイムアウト」「認証失敗」のどれかであることを型で表したい。 structとenumは、プログラ...
Rust 005 クロージャ - 環境を捕獲する関数 17.04.2026 16:41
第5章へようこそ。 今日のテーマは「クロージャ」です。 第4章のイテレータで、mapやfilterに小さな関数を渡しました。 あの小さな関数の正体がクロージャです。 クロージャと普通の関数の違いは1つです。 クロージャは、自分が定義された場所の周囲にある変数を捕まえて、自分の中で使える。 関数にはこれができない。 この「周囲の変数を捕まえる」という一点が、クロージャの性質のすべてを決めます。 捕獲は所有権の仕組みと直...
Rust 004 イテレータ - 流れとして処理する 16.04.2026 13:28
第4章へようこそ。 今日のテーマは「イテレータ」です。 複数の要素を順番に処理する。 これはあらゆるプログラムで現れる基本的な操作です。 配列の要素を1つずつ見る。リストを変換する。条件に合うものだけを集める。 Rustでは、こういった処理をイテレータで書く。 イテレータは、データを「流れ」として扱う仕組みです。 map、filter、collectといったメソッドをドットで繋いで、流れに対する処理を連鎖させる。 書き慣れてい...
Rust 003 Result - 失敗を型で表現する 15.04.2026 8:43
第3章へようこそ。 今日のテーマは「Result型」です。 第2章で、の不在をOption型で表現することを学びました。 Nullの代わりに、不在を型として明示する仕組み。 Result型はOptionと似た構造を持つが、表現するものが違う。 Optionは「あるかないか」。 Resultは「成功したか失敗したか、そして失敗ならその理由」。 ファイルの読み込み、ネットワーク通信、文字列のパース。 これらは失敗する可能性のある処理です。 Rustでは、...
Rust 002 Option - 値の不在を型で表現する 14.04.2026 8:20
第2章へようこそ。 今日のテーマは「Option型」です。 多くの言語には、nullがある。 値が存在しないことを表す特別な印。 しかしnullは、プログラミングの歴史において最も多くのバグを生み出してきた概念の一つ。 nullを発明した本人が「10億ドルの間違い」と呼んでいる。 Rustにはnullがない。 代わりに、値が存在しないかもしれないことを型で表現する。 それがOption型です。
Rust 001 所有権 - Rustの心臓部 13.04.2026 9:34
第1章へようこそ。 今日のテーマは「所有権」です。 Rustにおいて、すべてのデータには所有者がいる。 所有者は常に1人。この規則が、Rustの根幹を支えている。 所有権はメモリ管理の仕組みであり、型の設計に影響し、関数の引数の渡し方を決める。 この先の章で学ぶ借用、ライフタイム、ムーブ、クローン。 これらはすべて、所有権から派生した概念です。 まず所有権とは何か、なぜ存在するのかを見ていきます。
Rust 140 メモリの統合 - すべてはメモリに帰る 12.04.2026 11:36
第140章へようこそ。 第139章で、asyncタスクの境界において、 所有権、型、ライフタイム、Sendが同時に問われることを見ました。 別々の制約ではなく、メモリの安全を守る1つの構造の異なる面であると。 今日のテーマは「メモリの統合」です。 第126章からここまで、メモリの姿を追ってきました。 バイト列。アドレス。スタック。ヒープ。アライメント。パディング。 判別子。vtable。ファットポインタ。ステートマシン。 これら...
Rust 139 メモリ境界 - asyncと所有権が交差するとき 11.04.2026 9:38
第139章へようこそ。 第138章で、async関数がenumに変換されることを見ました。 中断のたびに判別子とデータが書き換わり、再開のたびに読み出される。 Futureの状態はヒープ上のenumに保持される。 今日のテーマは「メモリ境界」です。 そのenumの中に何を入れられるか、という問いに向き合います。 async関数の中で使う変数は、awaitをまたげばenumのフィールドになる。 しかし、すべての値がenumに入れるわけではない。 タスク...
Rust 138 asyncの内部構造 - ステートマシンがメモリに刻まれるとき 10.04.2026 11:15
第138章へようこそ。 第137章で、vtableの構造を見ました。 トレイトオブジェクトが型を消去しても、vtableのメタデータが正しい解放を保証する。 今日のテーマは「メモリ状態機械」です。asyncの内部構造を見ます。 第49章でasync/awaitを学びました。 第50章でFutureトレイトを学びました。 async関数はステートマシンに変換される。各awaitが状態の境界になる。 あのとき、ステートマシンの姿は抽象的に語りました。 今日は、メ...
Rust 137 メモリ上の仮想表 - ブイテーブルの構造 09.04.2026 10:28
第137章へようこそ。 第136章で、enumとメモリの関係を見ました。 判別子がバリアントを識別し、ニッチ最適化がビットパターンの隙間を活用する。 型のメモリ表現が、コンパイラの知識によって最適化される姿でした。 今日のテーマは「メモリ上の仮想表」です。vtableの構造を見ます。 第129章で、トレイトオブジェクトのファットポインタを学びました。 データへのポインタとvtableへのポインタ。合計16バイト。 vtableとは仮想メ...
Similar podcasts
Replaio is not a podcast publisher; show names, artwork and audio belong to their authors and are distributed through public RSS feeds.