過去数週間、RustでTLVエンコーダを勉強してきた。型・長さ・値の形式として、古いリーダーを壊さずに成長できるようにデータを詰めるための最も古い定番のやり方だ。Duskのために考えたら、理由がすとんと腑に落ちた。@Dusk のようなチェーンは、通信路上でメッセージをノンストップで運び、ピア同士がゴシップし合い、契約を呼び出し、ウォレットを起動させ、同期を取る。どれも、これから2年後に誰かが新しいフィールドを追加しても生き残れるフォーマットが必要だ。
Rustは面倒な部分をほとんど退屈にしてくれる。それが狙いそのもの。範囲チェックだ。読み取りが4GBだと主張する長さバイトを信用しない。
ゴミの入力でパニックするパーサは、招待されていない無作為なバイトが紛れ込むネットワーク上では実行できないパーサだ。私は素の &\u0026[u8] スライスを使って、実際に必要になるまでコピーを避け、型バイトにはenumを頼る。そうすれば、忘れた場合でもコンパイラが抜け漏れを検出してくれる。
見た目の醜いバイトを押し込むコードはスキップしないで。まずそれを書いて、そして偏執的に書く。それ以外のものはすべて、それが嘘をつかないことに依存している。#dusk
$DUSK
Rustは面倒な部分をほとんど退屈にしてくれる。それが狙いそのもの。範囲チェックだ。読み取りが4GBだと主張する長さバイトを信用しない。
ゴミの入力でパニックするパーサは、招待されていない無作為なバイトが紛れ込むネットワーク上では実行できないパーサだ。私は素の &\u0026[u8] スライスを使って、実際に必要になるまでコピーを避け、型バイトにはenumを頼る。そうすれば、忘れた場合でもコンパイラが抜け漏れを検出してくれる。
見た目の醜いバイトを押し込むコードはスキップしないで。まずそれを書いて、そして偏執的に書く。それ以外のものはすべて、それが嘘をつかないことに依存している。#dusk
$DUSK

