Babel Coder

ECMAScript คืออะไร? มารู้จักกระบวนการออกมาตรฐานทางภาษาที่สัมพันธ์กับ JavaScript

beginner

รู้จัก ES6 หรือ ES2015 กันไหม? ร้อยละ 99.99 ไม่มีใครไม่รู้จัก แต่พอถามลึกไปอีกว่ารู้ไหม ES ย่อมาจาก ECMAScript นะ ผมเดาว่ารอบนี้คงมีคนรู้เหลือแค่ 80% เอาใหม่เราเปลี่ยนคำถาม รู้หรือไม่ ECMAScript และ ES2015 ไม่ใช่ JavaScript นะ? อย่าพึ่งขมวดคิ้วแล้วตั้งคำถามว่า “มั่วป่าวนาย” กับผมนะครับ เราลองไปรู้จัก ECMA, ECMAScript, ECMA262 และที่มาที่ไปของการออกฟีเจอร์ทางภาษาให้กับ JavaScript ผ่านบทความนี้กัน

ว่าด้วยองค์กรไม่แสวงหาผลกำไรนามว่า ECMA

กาลครั้งหนึ่งนานมาแล้ว บริษัทยักษ์ใหญ่ต่างๆมักผลิตสินค้าคอมพิวเตอร์ตามแบบฉบับของตนเอง อุปกรณ์นำข้อมูลเข้าเช่น ตัวอ่าน Floppy Disk อาจไม่จำเป็นต้องเหมือนกัน ทำงานต่างกันก็ได้ ก็เราผูกขาดลูกค้าให้ใช้งานอยู่แค่ผลิตภัณฑ์ของเราหนิ ทางด้านภาษาโปรแกรมก็เช่นกัน ฉันจะพัฒนาภาษาไปในแนวทางไหนก็ได้ขอให้อุปกรณ์ของฉันเข้าใจก็พอ

เพราะโลกมันแคบ การแลกเปลี่ยนข้อมูลระหว่างผลิตภัณฑ์จากแต่ละบริษัทจึงสำคัญ เช่น บริษัทเอจะผลิตมาตรฐานการแลกเปลี่ยนข้อมูลชื่อ jupiter ไม่ได้ และบริษัทบีก็ไม่ควรสร้างการแลกเปลี่ยนข้อมูลชื่อ jurassic เป็นของตนเอง เพราะเครื่องคอมพิวเตอร์หรืออุปกรณ์อิเล็กทรอนิกส์ของบริษัทอื่นอาจไม่เข้าใจ จึงควรมีมาตรฐานกลางเช่น JSON ไว้ใช้แลกเปลี่ยนข้อมูล

des Machines Bull, บริษัท IBM World Trade Europe Corporation และ International Computers and Tabulators Limited ยักษ์ใหญ่ด้านการประมวลผลข้อมูลแห่งทวีปยุโรป เป็นหัวหอกส่งจดหมายอัญเชิญสารพัดบริษัทด้านคอมพิวเตอร์มาร่วมสังคายนาเพื่อกำหนดมาตรฐานด้านการจัดการข้อมูล เทคโนโลยีการสื่อสาร และการใช้งานอิเล็กทรอนิกส์ ที่เมืองบรัสเซลส์ เกิดเป็นองค์กรไม่แสวงหากำไรภายใต้ชื่อ European Computer Manufacturers Association หรือรู้จักกันในนาม ECMA

ไปๆมาๆเหล่าคณะกรรมการของ ECMA ได้เข้าไปมีส่วนร่วมในองค์กรระดับโลกหลายๆแห่ง เช่น JTC 1 ทำให้ตัว ECMA เริ่มตรัสรู้ว่า เออเนอะเราเริ่มโตเป็นองค์กรระดับโลกแล้ว เลิกซะเถอะไอ้คำจำกัดความว่า European เรามาเปลี่ยนชื่อให้ดูกิ๊บเก๋ขึ้นเป็น Ecma International - European association for standardizing information and communication systems (เรียกสั้นๆว่า Ecma International) คือคุณพี่เปลี่ยนชื่อไปไม่เกรงใจสกิลยาวไปไม่อ่านของผมเลยนะครับ ปัดโถ่!

เมื่อ ECMA ถือกำเนิดขึ้น บริษัททางคอมพิวเตอร์ต่างๆก็เริ่มส่งข้อเสนอไปให้ ECMA ช่วยออกมาตรฐานให้ ตัวอย่างการกำหนดมาตรฐานที่เด่นๆของ ECMA เช่น

  • ECMA-119 มาตรฐานสำหรับ CD-ROM ด้านโครงสร้างการจัดเก็บไฟล์
  • ECMA-334 กำหนดสเปคของภาษา C#
  • ECMA-372 สเปคของภาษา C++/CLI (แถวนี้มีใครเคยใช้ไหมหนิ)
  • ECMA-404 JSON สุดที่รักกำหนดด้วยมาตรฐานตัวนี้
  • อื่นๆ

พวกนาย เราคือ ECMAScript ไง

หนึ่งในมาตรฐานของ ECMA ที่สุดจะป็อบปูล่าคือ ECMA-262 หรือที่เรารู้จักกันโคตรดีในชื่อ ECMAScript (ย่อว่า ES) ที่กำหนดมาตรฐานของภาษาสคิปต์แบบกลางๆเอาไว้ คำว่ากำหนดแบบกลางๆหมายถึง ECMAScript กำหนดว่าตัวมันเองสามารถทำอะไรได้บ้างในเชิงนามธรรม อารมณ์เหมือน AIS ออกมาบอกว่ามือถือที่พวกข้าวางขายนั้นโทรออกได้ ส่วนวิธีที่จะทำให้โทรออกได้นั้น ทั้ง iPhone, Samsung, Sony หรือ LG ต้องไปทำให้โทรออกได้เอง ECMAScript ก็เช่นกัน แค่กำหนดว่าทำอะไรได้บ้าง แต่ไม่ได้บอกไว้ว่าต้องอิมพลีเม้นท์หรือทำให้เป็นจริงอย่างไร

เมื่อมาตรฐาน ECMAScript กำหนดไว้แค่ภาพกว้างๆ จึงต้องมีภาษาที่มาพัฒนาตามรากฐานของ ECMAScript เพื่อทำฝันให้เป็นจริง ภาษาเหล่านั้นได้แก่ JScript, ActionScript และ JavaScript

ECMAScript นั้นได้รับการดูแลอย่างทะนุถนอม คอยออกมาตรฐานใหม่ๆและปรับปรุงอย่างสม่ำเสมอโดยทีม TC39 ที่มีมนุษย์เก้าอี้ (chairman, ก็ประธานนั่นแหละ!) เป็น Mr. J. Neumann (Google/Microsoft/Mozilla)

กลับมาตอบคำถามของเรากันครับ จากข้อมูลข้างบนจึงได้ว่า JavaScript นั้นเป็นภาษาที่พัฒนาตามมาตรฐานของ ECMAScript นั่นเอง คำว่า พัฒนาตาม หมายความว่า ECMAScript นิยามภาษาว่าต้องเป็นอย่างไร JavaScript ก็ทำตามเช่นนั้น แต่ JavaScript ก็มีความคิดเป็นของตัวเองด้วยนะ จึงสามารถเพิ่มความสามารถอื่นๆที่ ECMAScript ไม่ได้นิยามไว้ได้ด้วย เช่น DOM API

ECMAScript กับการกำหนดมาตรฐานทางภาษา

ตอนนี้เว็บบราวเซอร์ทั้งหลายในสากลโลกสนับสนุน ES5 หมดแล้ว แต่ไม่ใช่สำหรับ ES2015 ที่เป็นมาตรฐานใหม่ ในอนาคตอันใกล้นี้ ES7 ก็กำลังจะถือกำเนิด คำถามคือ ECMA มีกฎเกณฑ์อย่างไรในการกำหนดความสามารถทางภาษา? เรามาดูขั้นตอนในการออกมาตรฐานของทีม TC39 กัน

ขั้นตอนออกมาตรฐานตามวาระของ ECMAScript

การออกฟีเจอร์หรือมาตรฐานใหม่ให้กับ ECMAScript ก็เหมือนการออกร่างรัฐธรรมนูญที่ต้องมีหลายวาระ ใน ECMAScript นั้นกำหนดให้มี 4 วาระ (stage) ดังนี้

  • stage 0 (Strawman) เป็นวาระในการเสนอสเปคใหม่ให้กับภาษา
  • stage 1 (Proposal) เป็นวาระของการถกประเด็นว่าปัญหาจาก stage 0 ที่เข้ามานั้นควรออกแบบวิธีแก้ปัญหายังไง ในระยะนี้ยังเป็นแค่การออกแบบในเชิงภาพรวม
  • stage 2 (Draft) เริ่มมีสเปคและ API แบบทางการแล้ว ถ้าบอกว่าเป็นขั้นตอนของการทดลองน่าจะถูกต้องกว่า
  • stage 3 (Candidate) เป็นช่วงเวลาที่ไข่กำลังจะฟักออกเป็นตัว เรียกว่าวิธีแก้ปัญหาที่คุยกันนั้นตกผลึกแล้ว ยินดีน้อมรับฟีดแบคหรือผลตอบรับจากผู้ใช้งาน (เรียกว่าหนูทดลองหรือเหยื่อคงจะเหมาะสมกว่า) ช่วงนี้บรรดาแก๊งค์ผู้ออกฟีเจอร์จะเริ่มทำสิ่งที่เรียกว่า test262 เป็นเทสที่เอาไว้ทดสอบฟีเจอร์นั้นๆ
  • stage 4 (Finished) จบสิ้นกระบวนการ รอภาษาเป้าหมายเช่น JavaScript เอาไปใส่ของตนเอง ตอนนี้ฟีเจอร์ใหม่นี้ก็ออกสู่สังคมเป็นมาตรฐานแห่ง ECMA-262 แล้ว

ศึกษาขั้นตอนของ TC39 มีประโยชน์อย่างไร?

ตามที่ได้กล่าวไว้ข้างต้นว่าขณะนี้ ES2015 และ ES7 ยังไม่สนับสนุนในทุกๆบราวเซอร์ เราจึงต้องอาศัยตัวกลางมาแปลงโค๊ดที่เราเขียนด้วย ES2015 ให้เป็น ES5 ที่บราวเซอร์ในจักรวาลนี้ทุกตัวเข้าใจ หนึ่งในเครื่องมือยอดนิยมนี้คือ Babel

แต่ถ้าเราต้องการใช้ฟีเจอร์ใหม่ๆใน ECMAScript ที่ยังไม่ออกเป็นมาตรฐานหละ เช่น ต้องการใช้ static property ในคลาสที่ตอนนี้มีสถานะเป็น stage1 ดังนี้

class Article {
  static statuses = ['published', 'upcoming']
}

ง่ายๆครับ เราก็แค่ตั้งค่าให้ Babel ประยุกต์ stage1 กับโค๊ดของเราด้วยการตั้งค่าใน .babelrc ดังนี้

{
  "presets": ["stage-1"]
}

เพียงเท่านี้เราก็สามารถใช้ของที่อยู่ใน stage1 (ที่ Babel สนับสนุน) ได้แล้ว เห็นไหมครับความรู้ของเราประยุกต์ใช้กับเรื่องที่คิดว่าไม่น่าจะเกี่ยวเลยก็ได้ เพื่อนๆที่สนใจว่าตอนนี้ฟีเจอร์ไหนอยู่ในสถานะอะไรบ้างแล้ว อัญเชิญไปอ่านที่ ecma262 ครับ

เอกสารอ้างอิง

Ecma International. Retrieved May, 28, 2016, from https://en.wikipedia.org/wiki/Ecma_International

History of Ecma. Retrieved May, 28, 2016, from http://www.ecma-international.org/memento/history.htm

tc39. Status, process, and documents for ECMA262. Retrieved May, 28, 2016, from https://github.com/tc39/ecma262

The TC39 Process. Retrieved May, 28, 2016, from https://tc39.github.io/process-document/


แสดงความคิดเห็นของคุณ


No any discussions