PR การเขียน Bun ใหม่ด้วย Rust ถูกรวมแล้ว
(github.com/oven-sh)- PR #30412 เป็นการเปลี่ยนแปลงสำหรับ การเขียน Bun ใหม่ด้วย Rust และถูก merge จากสาขา
claude/phase-a-portเข้าmainเมื่อวันที่ 14 พฤษภาคม 2026 - ขนาดของการเปลี่ยนแปลงแสดงไว้ที่ 6,755 commits, 2,188 ไฟล์, และ
+1,009,257/-4,024บรรทัด - Jarred-Sumner ระบุว่าจะมี บทความบล็อก ที่มีรายละเอียดเพิ่มเติมออกมาในเร็ว ๆ นี้
- มีการอธิบายว่าการเปลี่ยนแปลงนี้ผ่าน test suite เดิมของ Bun บนทุกแพลตฟอร์ม และแก้ memory leak หลายจุดรวมถึงการทดสอบที่ไม่เสถียร
- ระบุว่าขนาดไบนารี ลดลง 3MB~8MB และผล benchmark อยู่ในช่วงที่เป็นกลางหรือเร็วขึ้น
- เหตุผลที่สำคัญที่สุดคือ ทีมจะสามารถจับและป้องกัน memory bug ที่ใช้เวลาในการพัฒนาและดีบักมาหลายปีได้ด้วยเครื่องมือช่วยจากคอมไพเลอร์
- มีการอธิบายว่า codebase โดยรวมแทบจะเหมือนเดิม และ สถาปัตยกรรมกับโครงสร้างข้อมูล ก็ยังคงไว้เช่นเดิม
- Bun ยังคงใช้ไลบรารีจากภายนอกน้อยมาก และระบุชัดว่าไม่ได้ใช้ async Rust
- ผู้ใช้สามารถทดลองการเปลี่ยนแปลงนี้ได้ด้วย
bun upgrade --canary - Jarred-Sumner ขอให้รายงาน issue หากพบปัญหา และระบุว่าอาจล็อกเธรดหากการสนทนาร้อนแรงเกินไป
- ก่อนจะเข้าสู่เวอร์ชันที่ไม่ใช่ canary ยังเหลือ งานปรับแต่งประสิทธิภาพ ที่ต้องทำ
- ยังเหลืองานเก็บกวาดโค้ด ซึ่งจะดำเนินการต่อในชุด PR ถัดไป
4 ความคิดเห็น
ว้าว PR ขนาดล้านบรรทัดถูก merge แล้ว จาก Zig ไป Rust แบบย้ายทีเดียวเลยนะ ก่อนหน้านี้ยังพูดอยู่เลยว่าไม่รู้ว่าจะ merge ได้ไหม~~ แต่แค่สัปดาห์เดียวก็เปลี่ยนภาษาของโค้ดที่ทำงานได้ดีอยู่แล้วในทีเดียวเลย 555 รู้สึกเหมือนกำลังมีอะไรระดับหมุดหมายเกิดขึ้นเพราะการเขียนโค้ดแบบมี AI assist.
จริงเหรอ ก่อนหน้านี้ก็บอกว่าแค่ทดสอบเฉยๆ และมีโอกาสสูงว่าจะไม่ใช้
พอ Zig ไม่ทำให้ ก็ข้ามไปรัสต์ทันทีแบบกล้ามาก 555
ความเห็นจาก Hacker News
ถ้าในการประกาศบอกว่าการรีไรต์ใช้เวลาแค่ 1 สัปดาห์ ก็อดสงสัยไม่ได้ว่าต้องใช้เวลานานแค่ไหนในการเตรียมไฟล์คู่มืออย่างละเอียดมากนี้สำหรับแมปสำนวนของ Zig ไปเป็นสำนวนของ Rust: https://github.com/oven-sh/bun/commit/46d3bc29f270fa881dd573...
แถมถ้าดูส่วน
Pointers & ownershipกับCollectionsก็เหมือนว่าโค้ดเบสของ Bun ได้ใช้ internal smart pointer types อยู่แล้วเพื่อให้แมปกับของฝั่ง Rust แบบ 1:1 ได้ และก็มี Rust crate ชื่อbun_collectionsอยู่แล้วด้วยการรีไรต์นี้ดูเหมือนจะเตรียมการกันมานานแล้ว และน่าจะเป็นสิ่งที่ทีม Bun เสนอไว้ระหว่างการเจรจาซื้อกิจการกับ Anthropic
เงินที่เกี่ยวข้องมันมากเกินไป จึงมีแรงจูงใจชัดเจนที่จะฝัง หน้าม้าโฆษณา ไว้ในชุมชน และบางส่วนก็แค่ติดอยู่ในตรรกะแบบแบ่งฝักแบ่งฝ่าย
ในเมื่อ Anthropic เป็นเจ้าของ Bun แล้ว ก็ยิ่งมีแรงจูงใจมากพอที่จะทำให้งานนี้ดูง่ายกว่าความเป็นจริง
ขนาดของเอาต์พุตมันใหญ่มากจนดูเหมือนมีผลคูณอยู่ตรงนี้
แต่ก็ยังสงสัยว่าการสร้างกฎพวกนี้ต้องอาศัยความรู้ฝังลึกมากแค่ไหน และไฟล์นี้ถูกปรับปรุงวนซ้ำมากน้อยแค่ไหน
เช่น อยากรู้ว่ากฎพวกนี้มีสัดส่วนเท่าไรที่มาจากเคสล้มเหลวที่เจอระหว่างรอบการแปล
using internal smart pointer types that map 1-to-1 to Rust equivalentsนั้น smart pointer ไม่ได้เป็นสิ่งที่ Rust เป็นคนคิดค้นถ้าคุณเขียนโค้ดในภาษาอื่นที่มี pointer คุณก็โมเดลชนิดแบบเดียวกันนี้ไว้ในหัวอยู่แล้ว
แล้วที่บอกว่า Rust crate
bun_collectionsมีอยู่ก่อนแล้วก็ไม่จริงมันเป็นแค่ส่วนหนึ่งของ PR ในโค้ดเบส ไม่ได้มีอยู่ก่อนหน้านี้
มันจะง่ายมากที่จะลดความสงสัยและเพิ่มบรรยากาศก่อน IPO ถ้าเปิดเผยงานเบื้องหลังที่จำเป็นต่อการผลัก AI ให้ไปถึงจุดนั้นเป็นรีโปแยก และให้ทุกคนทำซ้ำผลลัพธ์ได้
ท้ายที่สุด สิ่งที่ลูกค้าอยากได้ก็คือโค้ด 1 ล้านบรรทัดที่ใช้งานได้ใน “7 วัน” ไม่ใช่หรือ
ทุกคนจะได้ลองทำซ้ำในเวิร์กโฟลว์ของตัวเอง และตัวชี้วัดการใช้งาน Anthropic ก็จะสูงขึ้นด้วย
ถ้ามันเป็นผลลัพธ์ที่เจ๋งจริง ก็น่าจะออกเป็นโพสต์บล็อกพร้อมลิงก์และคำแนะนำไปแล้ว
ก็เป็นไปได้ว่า ณ ตอนนี้โพสต์บล็อกนั้นกำลังเขียนอยู่ และผมอาจคิดผิดก็ได้
นั่นคือแก่นของทฤษฎีสมคบคิดหรือ
bun_collectionsเองก็ดูไม่ได้เก่ากว่าคู่มือการพอร์ตไปมากนัก+1009257 -4024สินะ แปลว่าตอนนี้ Bun มี โค้ด Rust เกิน 1 ล้านบรรทัด แล้วมันเริ่มเข้าใกล้ขนาดของตัวคอมไพเลอร์ Rust เอง
แต่ BunJS โดยมากก็เป็น wrapper ของ JavaScript interpreter กับการ reimplement ไลบรารี NodeJS ซึ่งก็แทบจะเป็น wrapper ของ Rust standard library อีกที
BunJS ดูเหมือนกำลังกลายเป็นนกคีรีบูนในเหมืองสำหรับเรื่อง การจัดการความซับซ้อนของซอฟต์แวร์ ในยุค LLM
mostly a JavaScript interpreter wrapperไม่ค่อยแม่นเท่าไรBun เป็นทั้ง JavaScript และ CSS transpiler (parser) แบบมีแบตเตอรี่มาครบ, minifier, bundler, package manager แบบ npm, test runner แบบ Jest และยังมี runtime API อย่างไคลเอนต์ Postgres, MySQL, Redis ที่ฝังมาในตัวด้วย
ดังนั้นจำนวนโค้ดเยอะมากจึงเป็นเรื่องธรรมดา
Bun ใช้ JavaScriptCore เป็น JS engine ดังนั้นตัว Bun เองไม่ได้ หรืออย่างน้อยก็ไม่ควรจะต้อง ทำการ parse, interpret หรือ JIT JavaScript
แก้ไข: ผมอ่านผิดไป เขาบอกว่า “JavaScript interpreter wrapper” งั้นก็ถือว่าพูดถูก
+ข้างหน้าหรือมีปัจจัยอื่นด้วย แต่บนมือถือ จำนวนบรรทัดที่เปลี่ยน จะถูกขีดเส้นใต้และกดเพื่อโทรออกได้ถ้าเป็นเพราะขนาด diff จริงก็ค่อนข้างขำดี
ดังนั้นผลลัพธ์จากการรีไรต์ออกมาเป็น LOC ใกล้เคียงกันจึงไม่ใช่เรื่องแปลก
ผลของ
$ rg 'unsafe [{]' src/ | wc -lคือ 10428 และผลของ$ rg 'unsafe [{]' src/ -l | wc -lคือ 736แยกตามภาษาได้เป็น Rust 1443 ไฟล์ 929213 บรรทัด, Zig 1298 ไฟล์ 711112 บรรทัด, TypeScript 2604 ไฟล์ 654684 บรรทัด, JavaScript 4370 ไฟล์ 364928 บรรทัด, C 111 ไฟล์ 305123 บรรทัด, C++ 586 ไฟล์ 262475 บรรทัด, C Header 779 ไฟล์ 100979 บรรทัด
แล้วใน Zig จะค้นหา โค้ดที่ไม่ปลอดภัย ยังไงล่ะ
หรือว่าต้องสมมติว่ามันอยู่ทุกที่อยู่แล้ว
unsafeอยู่ มันก็ดูไม่เหมือนการรีไรต์ที่ดีเท่าไรถ้าเกือบครึ่งหนึ่งของโค้ดยังเป็น unsafe อยู่ แบบนั้นการรีไรต์เป็น Rust จะมี ความหมาย อะไร
ของที่บ้านมี:
10428ตอนนี้เรายังเขียนโพสต์บล็อกเกี่ยวกับเรื่องนี้อยู่ และจะมาแชร์รายละเอียดเพิ่มเติม
ถ้าอยากรู้พื้นหลัง ลองไล่ดูรายการแก้บั๊กในโน้ตรีลีสของ Bun v1.3.14 และรุ่นก่อนๆ
Rust ไม่ได้แก้ทุกอย่างให้หมด ปัญหาที่เกิดจากการ hold reference นานเกินไปจนรั่ว หรือทุกปัญหาเรื่อง reentrancy ข้ามขอบเขต JS ก็ยังเป็นความรับผิดชอบของเราอยู่
แต่รายการนั้นจำนวนไม่น้อยเป็นปัญหา use-after-free, double-free หรือการลืม free ในเส้นทาง error ซึ่งสิ่งเหล่านี้จะกลายเป็น compile error หรือเปลี่ยนเป็นการ cleanup อัตโนมัติ
I work on Bun and this is my branchThis whole thread is an overreaction. 302 comments about code that does not work. We haven’t committed to rewriting. There’s a very high chance all this code gets thrown out completely.หรือจริงๆ แล้วมันอาจไม่ใช่การโอเวอร์รีแอ็กต์?
[0]: https://news.ycombinator.com/item?id=48019226
อยากรู้ว่ามีแผนจะรันไบนารี Zig กับ Rust แบบคู่ขนานบนแอปจริงที่หลากหลายเพื่อคัดบั๊กออก หรือถ้าเป็นไปได้จะทำ shadow execution ในโปรดักชันไหม
พอจะให้ตัวเลขคร่าวๆ ได้ไหม
และอยากรู้ด้วยว่ามีแผนที่เป็นรูปธรรมอะไรบ้างในการปล่อยรีลีสนี้โดยไม่ทำให้เวิร์กโฟลว์ของผู้ใช้พัง
ราว 9 วันก่อน Jarred เขียนไว้ว่ายังไม่แน่เลยว่าจะ merge มันหรือเปล่า และบอกว่าคนอื่นโอเวอร์รีแอ็กต์
ช่างประชดดี
ลองนึกภาพสิว่า Linus บอกว่าจะไม่รีไรต์ Linux kernel แล้ววันหนึ่งตื่นมาพบว่าเขา merge การรีไรต์ทั้งก้อนเป็น Rust ที่มีเครื่องช่วยเขียน จะเกิดเรื่องวุ่นวายขนาดไหน
ก็คงต้องหาทางทำให้ ค่าโทเคน ที่ใช้ไปดูสมเหตุสมผลอยู่แล้ว
ว้าว ต่อจากนี้คงน่าดูมาก
ดูไม่มีทางเลยว่าโค้ดนี้จะได้รับการรีวิว แต่บางทีเราอาจเข้าสู่ ยุคหลังมนุษย์ ที่เชื่อถือให้โมเดลเขียนและรีวิวโค้ดได้แล้วก็ได้
มันเหมือน Gastown แต่เกิดขึ้นกับโปรเจกต์ที่ดังยิ่งกว่ามาก
น่าสนใจว่าโปรเจกต์นี้จะเพิ่มฟีเจอร์ใหม่ต่อจากนี้ยังไง หรือจะเพิ่มได้ไหม
มีใครรู้ไหมว่า Anthropic ใช้ Bun อย่างไรแน่
มันเป็นส่วนหนึ่งของ Claude Code หรือเปล่า
ผมเริ่มกังวลกับการใช้ Bun มากทีเดียว แต่ไม่แน่ใจว่าความกังวลนั้นควรลามไปถึงการใช้ Claude ด้วยแค่ไหน
ถ้าคุณเชื่อถือ ชุดทดสอบ ไม่ได้ว่าจะจับการแปลภาษาอัตโนมัติแบบนี้ได้ งั้นแต่แรกคุณก็ไม่ควรเชื่อถือชุดทดสอบนั้นเลย :)
ที่จริงผมค่อนข้างตื่นเต้นกับการทดลองแปลอัตโนมัติ แต่ก็กลัวว่าจะมี ปัญหาความเข้ากันได้ย้อนหลัง เยอะ
เริ่มไล่ดูคอมมิตแล้ว เหมือนกำลังแก้ปัญหา “เทสต์ไม่ผ่าน” ด้วยการเปลี่ยนตัวเทสต์เองเป็นหลัก
งานจริงที่จะทำให้มันทำงานได้อย่างถูกต้องกับโปรแกรมที่ถูกปล่อยใช้งานไปแล้ว เพิ่งจะเริ่มต้นเท่านั้น
อย่างน้อยก็นับว่าโชคดีที่ชุมชน JS ฝั่งเซิร์ฟเวอร์ดูจะคุ้นชินกับการพังบ่อยๆ ไปแล้วด้วยเหตุผลบางอย่าง
แต่ถ้ามันใช้งานได้จริงโดยไม่มีปัญหาใหญ่ ก็ถือว่าน่าทึ่งมาก
GPT/Codex ดูซื่อตรงกว่าในแง่นี้
ผมยังสงสัยกับการรีไรต์ทั้งก้อนนี้ และ Jarred Sumner ก็มีผู้ติดตามในอินเทอร์เน็ตเยอะมากจนมันให้ความรู้สึกเหมือนโฆษณา
ยอดเยี่ยมเลย! แค่ใส่
sleep(1)แบบสุ่มลงในเทสต์ก็พอ ไม่ต้องห่วง ทุกอย่างจะโอเค!โปรเจกต์ Bun ที่ผมใช้อยู่ไม่กี่ตัวคงจะย้ายไปอย่างอื่น
ผมไม่ไว้ใจธรรมาภิบาลที่ยอมให้เกิด การเปลี่ยนแปลงแบบหุนหันพลันแล่น แบบนี้
ตั้งแต่แรกมันเขียนมาดีอยู่แล้ว เลยไม่ต้องรีไรต์ใหม่
อีกด้านหนึ่งก็สนใจว่าจะผ่าน บททดสอบด้วยไฟ นี้ไปยังไง และในระยะยาวก็ดูเหมือนว่าสุดท้ายปัญหาต่างๆ คงจะถูกแก้ได้
มีเธรดหนึ่งที่น่าศึกษาในเชิงการเรียนรู้ เป็นเธรดเมื่อสัปดาห์ก่อนที่ Jarred ถอยออกจากการตัดสินใจ merge อีกครั้ง และมีเหล่าทหารราบจำนวนมากโจมตีคนที่ทำนายว่ามันจะถูก merge ในไม่ช้า:
https://news.ycombinator.com/item?id=48073680
มองย้อนกลับไปตอนนี้ คำพูดนั้นดูไม่ค่อยทนทานนักใช่ไหม?
ถ้าสิ่งนี้ผิดพลาดแม้แต่นิดเดียว ก็จะโดนล้อแบบพ่อค้ายาเสพติดที่เสพของตัวเองไปอีกยาวแบบไม่จบไม่สิ้นและค่อนข้างมืดมน
เคยอ่าน paper ของ Mythos ไหม? การทำให้เป็นมนุษย์นี่หนักมาก
อาจเป็นแค่การเรียกความสนใจราคาถูก แต่ถ้าพวกเขาเชื่อจริงๆ ว่า LLM มีสำนึก... โอ้โห