10 คะแนน โดย GN⁺ 2025-06-30 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • ในการประชุม TC39 ครั้งที่ 108 ล่าสุด มี ข้อเสนอ 9 รายการ ที่จะขับเคลื่อนอนาคตของ JavaScript ซึ่งมีความคืบหน้าในแต่ละขั้นของการกำหนดมาตรฐาน
  • ใน Stage 4 (อนุมัติขั้นสุดท้าย) มีฟีเจอร์อย่าง using, Array.fromAsync, Error.isError ที่ช่วยเพิ่มทั้งประสิทธิภาพการพัฒนาและความปลอดภัย
  • ใน Stage 3~1 กำลังมีการหารือข้อเสนอฟีเจอร์ที่มีประโยชน์หลากหลาย เช่น immutable ArrayBuffer, seeded random, clamp, การปรับปรุง NumberFormat และฟังก์ชัน Random
  • Deno มีบทบาทเชิงรุกในการนำมาตรฐานล่าสุดมาใช้และทดลอง และบางฟีเจอร์ก็ใช้งานได้แล้วใน Deno และเบราว์เซอร์รุ่นใหม่
  • การหารือด้านมาตรฐานจะยังดำเนินต่อไป และคาดว่า ecosystem ของ JavaScript จะพัฒนาไปในทิศทางที่ปลอดภัยและกระชับมากยิ่งขึ้น

แนวโน้มการกำหนดมาตรฐานล่าสุดของ TC39 และฟีเจอร์สำคัญใหม่ของ JavaScript

Stage 4: ฟีเจอร์ที่เตรียมถูกรับรองอย่างเป็นทางการ

การจัดการทรัพยากรแบบชัดเจน (using)

  • คำสั่ง using ช่วยรับประกันว่าระบบจะจัดการล้างทรัพยากรโดยอัตโนมัติเมื่ออ็อบเจ็กต์ทรัพยากร เช่น ไฟล์หรือ network socket หมดอายุการใช้งาน
  • โครงสร้างนี้ได้แรงบันดาลใจจาก C# และ Python โดยให้อ็อบเจ็กต์ implement เมธอด [Symbol.dispose]() หรือ [Symbol.asyncDispose]() เพื่อให้ถูกเรียกเมื่อจบบล็อก
  • แม้เกิดข้อยกเว้นก็ยังมีการล้างอัตโนมัติ ช่วยลดความเสี่ยงของ resource leak เช่น file handle
  • รองรับแล้วใน Chrome 134, Firefox 134, Deno v2.3 เป็นต้น และใน Deno สามารถนำไปใช้กับไฟล์หรือ socket ในงานจริงได้ทันที

Array.fromAsync

  • เป็นเมธอดมาตรฐานที่ใช้ แปลง asynchronous iterable ให้เป็น array และคืนค่าเป็น Promise
  • สามารถรวบรวมค่าจาก async generator แบบลำดับต่อเนื่อง และได้ผลลัพธ์สุดท้ายเป็น array ผ่าน Promise
  • รูปแบบการใช้งานคล้ายกับ Array.from แบบ synchronous เดิม และรองรับ mapping function กับ thisArg
  • รองรับแล้วในเบราว์เซอร์หลักทั้งหมด, Node v22 และ Deno v1.38 ขึ้นไป

Error.isError

  • เป็นฟังก์ชัน built-in ที่ช่วยตรวจสอบได้ง่ายว่าค่าหนึ่งเป็น อ็อบเจ็กต์ Error จริง หรือไม่
  • ทำงานได้อย่างเชื่อถือได้แม้ในกรณีซับซ้อน เช่น cross-realm หรือ error subclass
  • ช่วยเพิ่มความน่าเชื่อถือในการพัฒนา polyfill และไลบรารี

Stage 3: ArrayBuffer แบบ immutable

Immutable ArrayBuffer

  • มีแผนจะเพิ่มเมธอด transferToImmutable(), sliceToImmutable() เพื่อรองรับการทำ ArrayBuffer ให้เป็น immutable
  • buffer แบบ immutable เมื่อสร้างแล้วจะไม่สามารถแก้ไขหรือแยกออกได้ ช่วยให้แชร์ข้าม thread และ worker ได้อย่างปลอดภัยและเพิ่มประสิทธิภาพ
  • ใน Deno และสภาพแวดล้อมอื่น ๆ สามารถนำไปใช้ประมวลผลข้อมูลไบนารีได้อย่างมีประสิทธิภาพโดยไม่ต้องคัดลอกโดยไม่จำเป็น

Stage 2: ฟีเจอร์ข้อเสนอใหม่

Random.Seeded

  • เป็น PRNG แบบอิง seed (Random.Seeded(seed)) ที่สามารถสร้างลำดับเลขสุ่มเดิมซ้ำได้ระหว่างการรันแต่ละครั้ง
  • มีประโยชน์ในงานที่ต้องการ reproducibility เช่น เกมและการจำลองสถานการณ์
  • ต่างจาก Math.random() เดิม โดยรองรับความสามารถขั้นสูง เช่น การกำหนด seed และการคัดลอกสถานะ

Number.prototype.clamp

  • เป็น เมธอดจำกัดช่วงตัวเลข ที่ปรับค่าให้อยู่ภายในช่วงต่ำสุดถึงสูงสุดที่กำหนดโดยอัตโนมัติ
  • ใช้แทนรูปแบบ Math.min(Math.max(x, min), max) เดิมได้อย่างสั้นและชัดเจนกว่า

Stage 1: ข้อเสนอที่อยู่ในช่วงหารือเริ่มต้น

Keep Trailing Zeros

  • เป็นออปชันใหม่ของ Intl.NumberFormat ที่ช่วยควบคุมการ คงไว้หรือลบ 0 ท้ายทศนิยม ได้อย่างละเอียด
  • ช่วยเพิ่มความยืดหยุ่นในการแสดงผล UI เช่น จำนวนเงินหรือเลขทศนิยมคงที่

Comparisons

  • มีเป้าหมายในการทำมาตรฐานสำหรับ การแสดงค่าที่เป็นมิตรต่อมนุษย์ และ การแสดง diff คล้ายกับ util.inspect ของ Node.js
  • ช่วยสร้างความสม่ำเสมอใน test framework, console output และงานลักษณะใกล้เคียงกัน

Random Functions

  • เสนอการเพิ่ม namespace Random ใหม่ เพื่อรวมฟังก์ชันเกี่ยวกับการสุ่ม เช่น random, sampling, shuffle ให้ใช้งานได้อย่างปลอดภัยและกระชับ
  • ช่วยป้องกันข้อผิดพลาดแบบ off-by-one และรองรับรูปแบบการเก็บรวบรวมหรือ sampling ที่หลากหลายอย่างเป็นธรรมชาติ

อนาคตของ Deno และ ecosystem ของ JavaScript

  • Deno เข้าร่วมการหารือด้านมาตรฐานอย่างแข็งขัน และนำฟีเจอร์ใหม่ล่าสุดมาปรับใช้ในงานจริงอย่างรวดเร็ว
  • ตัวอย่างเช่น async context propagation, OpenTelemetry แบบ built-in และรูปแบบการจัดการทรัพยากรใหม่
  • คาดว่าจะมีการหารือด้านมาตรฐานต่อเนื่องในการประชุม TC39 ครั้งถัดไปหลังเดือนกันยายน
  • นักพัฒนา JavaScript จะได้ใช้งานสภาพแวดล้อมภาษาที่ทรงพลัง ปลอดภัย และสะดวกยิ่งขึ้นในอนาคต

3 ความคิดเห็น

 
carnoxen 2025-07-03

await operations proposal

อันนี้เมื่อไหร่...

 
dohyun682 2025-06-30

การจับคู่แพตเทิร์นน่าจะถูกเพิ่มเข้ามาเมื่อไหร่กันนะ

 
click 2025-06-30

มี signals อยู่ใน stage 1 แต่ดูเหมือนว่ายังอีกไกลกว่าจะเปิดตัวอย่างเป็นทางการ