
USPS(米国郵便公社)が切手印日付システムの変更を発表しました。
## Japanese Translation: > **概要:** > USPSは最終規則(FR Doc. 2025‑20740)を発行し、国内郵便マニュアルに「セクション 608.11 —『切手印と郵便保有』」を追加しました。この規則では、切手印の定義が正式に示され、該当する印記がリストアップされています。切手印は印付け日でUSPSがその物件を保有していることを確認しますが、必ずしもアイテムの最初の受理日と同一ではありません。USPSは通常業務で全ての郵便に切手印を貼らないため、切手印が欠落していても、その物件が未処理だったとは限りません。機械による自動切手印は、施設内で最初に行われた自動処理操作の日付(「date of the first automated processing operation」)を表示し、投函日ではなく、地域輸送最適化(RTO)や路線ベースのサービス基準により受理日より遅くなることがあります。切手印は小売ユニットからの輸送後やカレンダー日がまたがる場合に付けられることが多いため、郵送日を示す信頼できる指標ではありません。同一日の切手印を確保するには、小売窓口で手動(ローカル)切手印を依頼できます。小売窓口で料金を支払うと「Postage Validation Imprint(PVI)」が付与され、受理日が記録されます。また、郵便証明書、登録メール、または認定メールは提示日を裏付ける領収書として機能します。この規則の影響は税務申告において重要です。IRC §7502 は、文書が期限までに物理的に届けられなかった場合に、提出の適時性を判断する際に切手印の日付を使用しています。
![**Zig における静的割り当て**
Zig のコンパイル時メモリ管理を使えば、実行時ではなくコンパイル時にストレージを確保できます。データ構造のサイズが事前に分かっている場合やヒープ割り当てを避けたいときに便利です。
### 重要概念
- **コンパイル時定数**
`const` や `comptime` の値を使い、コンパイラがコンパイル中に評価できるサイズを記述します。
- **固定長配列**
リテラルサイズで配列を宣言します。
```zig
const buf = [_]u8{0} ** 128; // 128 バイト、すべてゼロ初期化
```
- **静的フィールドを持つ構造体**
固定長配列やその他コンパイル時に決まる型を含む構造体を定義します。
### 例
```zig
const std = @import("std");
// 静的サイズのバッファを持つ構造体
pub const Message = struct {
id: u32,
payload: [256]u8, // 256 バイト、コンパイル時に確保
};
// 静的割り当てを使う関数
fn process(msg: *Message) void {
// ヒープ割り当ては不要;msg はスタック上またはグローバルに存在
std.debug.print("ID: {d}\n", .{msg.id});
}
pub fn main() !void {
var msg = Message{
.id = 42,
.payload = [_]u8{0} ** 256, // すべてのバイトをゼロで初期化
};
process(&msg);
}
```
### 利点
- **決定的なメモリ使用量** – サイズはコンパイル時に分かる
- **実行時割り当てオーバーヘッドがゼロ** – ヒープアロケータ呼び出しなし
- **安全性** – コンパイラが境界と寿命を検証できる
### 使うべき場面
- 固定長バッファ(例:ネットワークパケット、ファイルヘッダー)
- 短時間しか存続しない小規模補助データ構造
- 性能や決定的な動作が重要な状況
---
コンパイル時定数・固定配列・構造体定義を活用することで、Zig は最小限のボイラープレートで最大の安全性を保ちつつメモリを静的に割り当てることができます。](/_next/image?url=%2Fscreenshots%2F2025-12-30%2F1767047772973.webp&w=3840&q=75)

















![### なぜ Rust からアセンブリを呼び出すと、C からの呼び出しよりも遅くなることがあるか
手書きで作成したアセンブリルーチンを **C** から呼び出す場合、コンパイラは次のように最適化できます。
1. **プレーンで保護されていない呼び出しを生成** – 関数には Rust のランタイムオーバーヘッドがありません。
2. **呼び出し元のレジスタを保持** – 呼び出し規約(例:`__cdecl` や `__stdcall`)に従い、保護すべきレジスタと破壊されるレジスタを区別します。
3. **安全性チェックを行わない** – C はデフォルトで「unsafe」とみなすため、追加の検証が発生しません。
一方で同じアセンブリルーチンを **Rust** から呼び出すと、以下のような微妙な差異がオーバーヘッドを招くことがあります。
| 観点 | Rust 呼び出し | C 呼び出し |
|------|----------------|------------|
| **呼び出し規約** | デフォルトでは `extern "C"` がシステム ABI と一致しますが、`#[no_mangle]` を明示せずに使用すると、コンパイラが名前マングリングやシンボル解決を処理する小さなラッパーを追加することがあります。 | 直接 ABI を使用し、ラッパーは不要です。 |
| **ABI の不一致** | Rust の関数シグネチャがアセンブリの期待するパラメータ(呼び出し規約・スタック整列・レジスタ使用)と合わない場合、コンパイラはスタック/整列を調整したり、引数を別順序で渡すコードを挿入します。 | C コンパイラは呼び出しのレイアウトを正確に知っています。 |
| **安全性ラッパー** | Rust は `extern "C"` 境界を跨ぐ際に追加の安全チェック(例:NULL ポインタの検査、関数ポインタが NULL でないことの確認)を生成する場合があります。これらは微小ですがマイクロベンチマークでは影響します。 | C にはそのようなチェックはありません。 |
| **インライン化と最適化** | アセンブリルーチン自体はインライン化できないため、Rust は通常の呼び出し命令を発行します。周囲の Rust コードが高度に最適化(例:ヘルパー関数の積極的なインライン化)されていると、呼び出しオーバーヘッドが目立ちます。 | C コンパイラは小さなラッパーをインライン化したり、一部チェックを削除してオーバーヘッドを減らすことがあります。 |
| **リンカ / シンボル解決** | Rust のリンカーは、`#[link(name = "...")]` で正しく宣言されていない `extern` シンボルに対し追加のリロケーションエントリを生成する場合があり、一部プラットフォームでは実行時に微小な検索コストが発生します。 | C リンカーは通常、余分な間接参照なしでシンボルを直接解決します。 |
#### 測定可能な遅延の典型的原因
1. **呼び出し規約の不一致** – 例:Rust が `extern "C"` を使用しているが、アセンブリは `__stdcall`(またはその逆)を期待している。
2. **スタック整列のズレ** – アセンブリルーチンが 16 バイト整列を前提としているのに、Rust の呼び出し側で 8 バイトのまま残っていると、コンパイラはスタック調整コードを挿入します。
3. **名前マングリング / シンボル検索** – `#[no_mangle]` を忘れると追加の名前解決ステップが発生し、別関数が呼び出される可能性があります。
4. **引数渡しの違い** – Rust がレジスタで引数を渡す一方、アセンブリはスタックを期待している(または逆)と、余分な移動命令が生成されます。
#### それらを比較可能にする方法
```rust
#[no_mangle]
pub extern "C" fn my_asm_fn(arg1: i32, arg2: i64) -> i32 {
// C の呼び出し規約に従ったインラインアセンブリ。
unsafe { asm!("...", in("rdi") arg1, in("rsi") arg2, out("eax") ret); }
}
```
- **`extern "C"` を明示的に宣言** して、Rust が C コードと同じ ABI を使用するようにします。
- **`#[no_mangle]` を使う** ことで名前マングリングを防ぎます。
- **引数の順序・型を正確に合わせる** ことでアセンブリ側の期待と一致させます。
- **スタック整列を保証する**(必要なら `#[inline(always)]` を付けたり、手動で整列処理を入れたりします)。
これらが揃えば、Rust の呼び出しオーバーヘッドはほぼ C と同等になり、ベンチマーク上で差異が見えなくなるはずです。もしまだ違いが残る場合は、生成されたアセンブリをプロファイルして、余分な前処理/後処理コードが出力されていないか確認してください。](/_next/image?url=%2Fscreenshots%2F2025-12-30%2F1767047840260.webp&w=3840&q=75)

