# Rust 1.100 ออกแล้ว 12 พ.ย. 2026 never type เสถียรหลัง 10 ปี พร้อม Allocator API

> Rust 1.100 ออก 12 พ.ย. 2026 ทำ never type เสถียรหลังพยายาม 5 ครั้งใน 10 ปี เปิด Allocator API ส่วนแกนกลาง เพิ่ม DropGuard และให้ Cargo เตือน dependency

- ประเภท: ข่าว · หมวด: Software
- เผยแพร่: 2026-11-14T02:12:00.000Z · อัปเดต: 2026-11-14T02:12:00.000Z
- โดย: กองบรรณาธิการ THAI DATA, THAI DATA IT BUSINESS ENTERPRISE
- ที่มา: https://thaidata.co.th/software/rust-1-100-never-type-allocator-api-stable/

## สรุปประเด็นสำคัญ

- ทีม Rust ประกาศ **Rust 1.100.0** เมื่อ **12 พฤศจิกายน 2026** อัปเดตได้ด้วยคำสั่ง `rustup update stable`
- **never type** (เขียนเป็น `!`) เสถียรแล้ว หลัง **10 ปี** และการพยายามทำให้เสถียรที่ล้มเหลว **5 ครั้ง** ทีม Rust ต้องเปลี่ยน never type fallback จาก `()` เป็น `!` ในเอดิชัน 2015, 2018 และ 2021 ซึ่งเป็นการเปลี่ยนที่อาจกระทบโค้ดบางกรณี
- ส่วนแกนกลางของ **Allocator API** เสถียรแล้ว ผู้เขียนไลบรารีกำหนดตัวจัดสรรหน่วยความจำเองได้ ใช้ร่วมกับ `Vec` และ `Box` ในตอนนี้
- มี **DropGuard** ให้รันโค้ดเมื่อออกจากฟังก์ชันทุกทาง และ `conjure_zst` เป็นวิธีมาตรฐานสร้างค่าชนิดขนาดศูนย์แบบ unsafe
- **Cargo** เตือน dependency ที่ไม่ได้ใช้ (`cargo::unused_dependencies`) จัดโครงสร้าง build-dir ใหม่เพื่อลดการชนกันของแคช และรองรับ `min-publish-age` ขั้นต่ำ **3 วัน** ตามตัวอย่างของทีม Rust

Rust 1.100 ออกเมื่อ 12 พฤศจิกายน 2026 ตามประกาศของทีม Rust จุดเด่นคือ never type (เขียนเป็น `!`) ซึ่งเสถียรแล้วหลังผ่านมา 10 ปีและความพยายามที่ล้มเหลว 5 ครั้ง นอกจากนี้ Rust 1.100 ยังทำส่วนแกนกลางของ Allocator API ให้เสถียร เพิ่ม `DropGuard` และ `conjure_zst` และให้ Cargo เตือน dependency ที่ไม่ได้ใช้ ผู้ที่ใช้ rustup อัปเดตด้วย `rustup update stable`

## Rust 1.100 ทำให้ never type เสถียรหลัง 10 ปี

![ประกาศ Announcing Rust 1.100.0 บน Rust Blog](https://thaidata-co-th.s3.ap-southeast-1.amazonaws.com/thaidata.co.th/images/articles/rust-1-100-never-type-allocator-api-stable/rust-blog-1-100.webp?v=0aa946a5) _(ภาพ: Rust Blog (ภาพหน้าจอ))_

never type เขียนเป็น `!` เป็นชนิดของการคำนวณที่ไม่มีวันจบด้วยค่า เช่น `return`, `break` และ `std::process::exit` ที่ตัดการไหลของโปรแกรม ก่อนหน้านี้ผู้เขียนโค้ดใช้พฤติกรรมนี้ได้แต่เรียกชื่อชนิดในบางตำแหน่งไม่ได้ Rust 1.100 อนุญาตให้ระบุ `!` ได้ทุกที่ เช่น `Result<T, !>` ซึ่งทีม Rust ระบุว่าทำให้งานตามโครงการเป้าหมายนี้เสร็จสมบูรณ์

อีกผลหนึ่งคือ `Infallible` ถูกเปลี่ยนให้เป็นชื่อแทนของ never type ทำให้ API เก่าที่ใช้ `Infallible` ใช้ร่วมกับ `!` ได้ ทีม Rust ยอมรับว่าการทำเช่นนี้ต้องมี breaking change หนึ่งเรื่อง คือเปลี่ยน never type fallback จาก `()` เป็น `!` ในเอดิชันก่อน 2024 (2015, 2018 และ 2021) เหมือนที่เอดิชัน 2024 ทำไปแล้ว ทีมเตือนล่วงหน้าผ่าน future-compatibility warning และออกแพตช์ให้ crate สาธารณะที่ได้รับผลกระทบ ผู้ที่เจอ dependency ล้มเหลวจากเรื่องนี้ควรอัปเดต dependency นั้นก่อน เพราะอาจมีรุ่นที่แก้แล้ว

## Allocator API และ DropGuard ใน Rust 1.100

Rust 1.100 ทำให้ส่วนแกนกลางของ `allocator_api` เสถียร ผ่าน trait `Allocator` ที่เพิ่งเสถียร ผู้เขียนไลบรารีกำหนดตัวจัดสรรหน่วยความจำของตนเองได้และใช้กับ `Vec` และ `Box` ในตอนนี้ ทีม Rust ระบุว่านี่เป็นรากฐานของโครงการเป้าหมาย Allocators 1.0 และยังต้องขยายการใช้งานกับคอลเล็กชันและตัวชี้ชนิดอื่นอีกมาก

`core::mem::DropGuard` เป็นชนิดช่วยที่รันโค้ดเมื่อออกจากขอบเขต ไม่ว่าจะ return ใช้ `?` หรือ panic ผู้ใช้เรียก `DropGuard::dismiss` เพื่อยกเลิกการรันได้ เหมาะกับงานแบบ all-or-nothing ที่ต้องย้อนค่า ตัวอย่างของทีม Rust คือตัวแยกวิเคราะห์ที่ย้อน `Vec` กลับถ้าตัวเลขตัวใดแปลงไม่ได้

ส่วน `std::mem::conjure_zst` เป็นฟังก์ชัน unsafe ที่เป็นวิธีมาตรฐานในการสร้างค่าชนิดขนาดศูนย์ แทนการ transmute `()` หรือใช้ `MaybeUninit::uninit().assume_init()` ทีม Rust ยกตัวอย่าง `Python<'py>` ของ PyO3 ที่เป็นโทเค็นขนาดศูนย์แทนการถือ GIL ของ Python ซึ่งเป็นสาเหตุที่ฟังก์ชันนี้ต้องเป็น unsafe

## Cargo ใน Rust 1.100 เตือน dependency ที่ไม่ได้ใช้

![หน้า release notes ของ Rust Version 1.100.0 บนเอกสารของโครงการ Rust](https://thaidata-co-th.s3.ap-southeast-1.amazonaws.com/thaidata.co.th/images/articles/rust-1-100-never-type-allocator-api-stable/rust-release-notes-1-100.webp?v=783deae7) _(ภาพ: The Rust Project (ภาพหน้าจอ))_

Cargo ใน Rust 1.100 มีการเปลี่ยน 3 เรื่อง

- **รายงาน dependency ที่ไม่ได้ใช้** Cargo ขึ้นคำเตือน `cargo::unused_dependencies` เช่นเมื่อ `tracing-subscriber` อยู่ใน `Cargo.toml` แต่ไม่มีโค้ดใช้ คำเตือนจะปรากฏเมื่อบิลด์ครบทุกเป้าหมายที่อาจใช้ dependency นั้น เช่น `cargo check --bin foo` จะไม่แสดงเพราะอาจมี bin อื่นใช้ และไม่แสดงสำหรับ dev-dependencies
- **ลดการชนกันของแคชใน build-dir** โครงสร้างใหม่จัดตามขั้นตอนบิลด์แทนชนิดไฟล์ และย้ายแฮชของการตั้งค่าไปอยู่ที่โฟลเดอร์แม่ ช่วยเมื่อแชร์ build-dir ข้าม git worktree ทีม Rust เตือนว่ากระบวนการบิลด์หรือเทสต์ที่มีวิธีเลี่ยงปัญหาเดิมอาจต้องปรับตาม
- **`min-publish-age`** ตั้งใน `.cargo/config.toml` ให้ Cargo ข้ามรุ่นที่เพิ่งเผยแพร่ไม่ถึงเวลาที่กำหนด ตัวอย่างของทีม Rust คือ `global-min-publish-age = "3 days"` เรื่องนี้มีบทความของเราอธิบายแยกต่างหากที่ [Cargo cooldown คืออะไร](/software/cargo-cooldown-rust-1-100-min-publish-age/)

## การรองรับแพลตฟอร์มและสิ่งอื่นที่เปลี่ยนใน Rust 1.100

หน้า release notes ระบุว่า `wasm32-wasip3` ได้เลื่อนเป็น Tier 2 ส่วน `i686-pc-windows-gnu` เป็น Tier 2 แบบไม่มีเครื่องมือโฮสต์ และมีเป้าหมาย Tier 3 ใหม่คือ `powerpc64-sony-ps3` ฝั่งภาษา มีการเสถียร `extern "custom"` และเสถียร `-Cprofile-sample-use` ที่คอมไพเลอร์ รายชื่อ API ที่เสถียรยาวหลายสิบรายการรวมถึง `Box::take`, `Box::map`, `Rc::map`, `Arc::map`, `bool::toggle` และ `UnsafeCell::replace`

## ทีมพัฒนาควรทำอะไรกับ Rust 1.100

ทีมที่ใช้ Rust ควรอัปเดตในสภาพแวดล้อมทดสอบก่อน รัน `cargo build` ทั้ง workspace และดูคำเตือนใหม่ โดยเฉพาะ dependency ที่ไม่ได้ใช้ ซึ่งลบแล้วลดเวลาบิลด์ได้ ทีมที่ใช้เอดิชัน 2021 หรือเก่ากว่าควรดูว่ามี dependency ใดล้มเหลวจากการเปลี่ยน never type fallback และอัปเดตเป็นรุ่นล่าสุด ผู้ที่แชร์ build-dir ใน CI หรือหลาย worktree ควรตรวจสคริปต์ที่อ้างโครงสร้างโฟลเดอร์เดิมและดู cargo#17287 ตามที่ทีม Rust แนะนำ ส่วนทีมที่ใช้ `min-publish-age` ควรจำไว้ว่า `cargo install` ไม่ใช้ค่านี้ และรุ่นที่ไม่มีข้อมูล pubtime ในดัชนีจะไม่ถูกชะลอ

## บริการของ THAI DATA CLOUD ที่เกี่ยวข้อง

ทีมที่ย้ายระบบหลังบ้านมาใช้ Rust มักต้องมีเซิร์ฟเวอร์สำหรับบิลด์ ทดสอบ และรันบริการที่ปรับสเปกได้ตามงาน [Cloud VPS App Plus](https://thaidata.cloud/cloud-vps-app-plus/) ของ THAI DATA CLOUD มี OS และแอปพร้อมติดตั้งกว่า 20 Images ทั้ง WordPress, Docker และ cPanel และอัปเกรดสเปกได้ตลอดเมื่องานโตขึ้น (THAI DATA CLOUD เป็นผู้ดำเนินงานเว็บไซต์นี้)

ติดตามข่าวนักพัฒนาและซอฟต์แวร์ได้ที่[หมวดซอฟต์แวร์](/software/)

## คำถามที่พบบ่อย

### Rust 1.100 ออกเมื่อไร และอัปเดตอย่างไร?

ทีม Rust ประกาศ Rust 1.100.0 เมื่อ 12 พฤศจิกายน 2026 ผู้ที่ติดตั้งผ่าน rustup อัปเดตด้วยคำสั่ง rustup update stable ส่วนผู้ที่ยังไม่มี rustup ติดตั้งได้จากหน้าเว็บของโครงการ Rust 1.100 มีรายละเอียดเต็มในหน้า release notes

### never type ใน Rust 1.100 คืออะไร?

never type เขียนเป็น ! คือชนิดของการคำนวณที่ไม่มีวันได้ค่า เช่น return, break หรือ std::process::exit Rust 1.100 อนุญาตให้ระบุชนิดนี้ได้ทุกที่ เช่น Result<T, !> หลังใช้เวลาราว 10 ปีและพยายามทำให้เสถียรมา 5 ครั้งที่ไม่สำเร็จ

### Rust 1.100 มีการเปลี่ยนที่ทำให้โค้ดเดิมพังไหม?

มีหนึ่งกรณีที่ทีม Rust ระบุว่าเป็น breaking change คือ never type fallback เปลี่ยนจาก () เป็น ! ในเอดิชัน 2015, 2018 และ 2021 ทีม Rust ว่าควร unnoticeable เป็นส่วนใหญ่ แต่กระทบโค้ดบางกรณี เช่น ตอนละเลยผลของฟังก์ชันที่คืนพารามิเตอร์ generic ถ้า dependency ใดมีปัญหาให้อัปเดตก่อน

### Allocator API ใน Rust 1.100 ใช้ทำอะไร?

Rust 1.100 ทำให้ trait Allocator และส่วนแกนกลางของ Allocator API เสถียร ผู้เขียนไลบรารีกำหนดตัวจัดสรรหน่วยความจำของตัวเองแล้วใช้กับ Vec และ Box ได้ ทีม Rust ระบุว่าการขยายไปยังคอลเล็กชันและตัวชี้ชนิดอื่นจะตามมา

### Cargo ใน Rust 1.100 เปลี่ยนอะไรบ้าง?

Cargo เตือน dependency ที่ไม่ได้ใช้ด้วย cargo::unused_dependencies จัดโครงสร้าง build-dir ใหม่โดยใช้แฮชของการตั้งค่าบิลด์ทุกโฟลเดอร์ และเสถียร min-publish-age ที่ให้ข้ามรุ่นแพ็กเกจที่เพิ่งออกไม่ถึงเวลาที่กำหนด


## แหล่งอ้างอิง

- [Announcing Rust 1.100.0](https://blog.rust-lang.org/2026/11/12/Rust-1.100.0/) — Rust Blog
- [Rust release notes: Version 1.100.0 (2026-11-12)](https://doc.rust-lang.org/stable/releases.html) — The Rust Project
