Elm กลับมาออก 0.19.2 หลังเงียบเกือบ 7 ปี พร้อมโรดแมปเดินหน้าสู่เวอร์ชัน 1.0
Elm ภาษาสาย functional ที่คอมไพล์ออกมาเป็น JavaScript เพิ่งออกเวอร์ชัน 0.19.2 หลังเงียบหายไปเกือบ 7 ปีจนหลายคนคิดว่าตายแล้ว ตัวอัปเดตเป็นแค่แพตช์เล็ก ๆ แต่สิ่งที่น่าสนใจกว่าคือผู้สร้างประกาศโรดแมปเดินหน้าสู่เวอร์ชัน 1.0

Elm ภาษาโปรแกรมสาย frontend (ฝั่งหน้าเว็บที่ผู้ใช้มองเห็น) ที่เขียนแล้วคอมไพล์ออกมาเป็น JavaScript เพิ่งปล่อยเวอร์ชัน 0.19.2 เมื่อ 6 กรกฎาคม 2026 ข่าวนี้ฟังดูเหมือนอัปเดตธรรมดา ถ้าไม่นับว่าก่อนหน้านี้ Elm แทบไม่มีเวอร์ชันใหม่ออกมาเลยเกือบ 7 ปี จนหลายคนในวงการทำเว็บแซวกันไปแล้วว่าโปรเจกต์นี้คงตายสนิท
แต่ 0.19.2 ไม่ได้โผล่มาเงียบ ๆ เพราะ Evan Czaplicki คนที่สร้าง Elm ขึ้นมาเอง ประกาศพร้อมกันว่าเขาสะสมงานปรับปรุงคอมไพเลอร์ (โปรแกรมที่แปลงโค้ดที่เราเขียนให้กลายเป็นภาษาที่เบราว์เซอร์รันได้) ไว้เยอะมาก และวางแผนจะทยอยปล่อยเป็นเวอร์ชันย่อย ๆ โดยไม่ทำของเดิมพัง เพื่อพา Elm เดินหน้าไปเรื่อย ๆ จนถึงเวอร์ชัน 1.0 การกลับมาครั้งนี้จึงไม่ใช่แค่เลขเวอร์ชันขยับ แต่เป็นสัญญาณว่าคนสร้างยังไม่ทิ้งมัน
เรื่องใหญ่ไม่ใช่ตัวเวอร์ชัน แต่คือคนที่กลับมา

สิ่งที่น่าจับตาจริง ๆ ไม่ใช่ของใหม่ในตัว 0.19.2 แต่คือประกาศที่ Evan ปล่อยออกมาพร้อมกัน เขาบอกว่าตอนนี้มีไอเดียปรับปรุงคอมไพเลอร์สะสมไว้เต็มไปหมด และแผนไปให้ถึงเวอร์ชัน 1.0 ก็คือค่อย ๆ ใส่ไอเดียเหล่านั้นเข้าไปทีละนิดในเวอร์ชันเล็ก ๆ ที่ไม่ทำโค้ดเดิมของใครพัง ตามที่เขาเขียนอธิบายไว้ในโพสต์ประกาศบน elm-lang.org
ไอเดียหลายอย่างที่ว่านี้ไม่ได้เกิดจากการนั่งคิดเปล่า ๆ แต่ต่อยอดมาจากงานอีกชิ้นที่เขาทำอยู่ นั่นคือคอมไพเลอร์ด้านฐานข้อมูลชื่อ Acadia ซึ่งตอนนี้ยังอยู่ในช่วง private alpha (ทดสอบวงปิดกับคนกลุ่มเล็ก) และเขาตั้งใจจะเปิดให้คนทั่วไปใช้ได้ภายในปีนี้
ของที่จะทยอยตามมาก็มีทั้งสองแบบ บางอย่างเป็นเรื่องความเร็วล้วน ๆ อย่างตัวแพตช์รอบนี้ ส่วนบางอย่างเป็นฟีเจอร์ที่ผู้ใช้เห็นได้ชัดกว่า เช่น type (ชนิดข้อมูล) แบบ equatable และ hashable แต่ต้องเน้นให้ชัดว่าของกลุ่มหลังนี้ยังเป็นแค่แผนในอนาคต ยังไม่ได้อยู่ใน 0.19.2 และเวอร์ชัน 1.0 ก็ยังไม่มา
ทำไมแฟน Elm ถึงไม่ยอมทิ้งมัน

Elm เป็นภาษาสาย functional (เขียนโปรแกรมโดยยึดฟังก์ชันเป็นหลัก และค่าต่าง ๆ เปลี่ยนแปลงไม่ได้) ที่ออกแบบมาเพื่อทำหน้าเว็บโดยเฉพาะ จุดที่ทำให้มันมีแฟนเหนียวแน่นทั้งที่ยัง niche (ใช้กันอยู่ในกลุ่มเล็ก ๆ) ไม่ได้อยู่ที่ความหวือหวา แต่อยู่ที่ประสบการณ์ตอนเขียนจริง
จุดขายที่ Elm ชูมาตลอดคือคำว่า "No Runtime Exceptions" หรือแทบไม่มีข้อผิดพลาดที่โผล่มาตอนโปรแกรมทำงานจริงต่อหน้าผู้ใช้ เพราะระบบ type ของมันไล่ตรวจจับเคสที่หลุดตั้งแต่ตอนคอมไพล์ ตัวอย่างที่มันหยิบมาเล่าเองคือบริษัท NoRedInk ที่ใช้ Elm มาราว 4 ปี เขียนโค้ดไปกว่า 300,000 บรรทัด แต่แทบไม่เคยต้องมานั่งไล่แก้ error แปลก ๆ ตอนที่ปล่อยให้ผู้ใช้จริงใช้งานเลย
อีกเรื่องที่ Elm ขึ้นชื่อคือข้อความ error จากคอมไพเลอร์ที่อ่านรู้เรื่อง เวลาเขียนผิดมันไม่ได้พ่นโค้ดสีแดงงง ๆ ออกมา แต่ชี้ตรงจุดที่พลาดพร้อมบอกวิธีแก้ให้เป็นภาษาคน จนแนวคิดนี้กลายเป็นแรงบันดาลใจให้ภาษาและเครื่องมือรุ่นหลังหันมาทำข้อความ error ให้เป็นมิตรตามไปด้วย
แล้วยังมี The Elm Architecture ซึ่งเป็นแบบแผนการวางโครงสร้างแอปที่ Elm โชว์ไว้บนหน้าแรก มันแยกงานออกเป็นฟังก์ชันหลักไม่กี่ตัว คือ init, update, subscriptions และ view แนวคิดการจัดการสถานะของแอป (state management) แบบนี้ยังส่งอิทธิพลต่อวิธีคิดฝั่ง React (เครื่องมือทำหน้าเว็บยอดนิยมในโลก JavaScript) ในเวลาต่อมาด้วย
ถ้าดูที่ผลลัพธ์ ไฟล์ที่ Elm คอมไพล์ออกมาก็มีขนาดเล็ก จากกราฟเทียบขนาดบนหน้าแรกของมันเอง แอปตัวอย่างเดียวกันเมื่อบีบอัดแล้ว ฝั่ง Elm อยู่ราว 29kb ขณะที่ React อยู่ที่ 77kb และ Vue (อีกหนึ่งเฟรมเวิร์กทำเว็บยอดนิยม) ขึ้นไปถึง 100kb อีกจุดคือระบบ type ตรวจจับการเปลี่ยนแปลงใน API (ช่องทางที่โค้ดอื่นเรียกใช้แพ็กเกจ) ได้เอง Elm เลยบังคับให้ทุกแพ็กเกจใช้ semantic versioning (ระบบเลขเวอร์ชันที่บอกได้ว่าอัปแล้วโค้ดจะพังไหม) อย่างเป๊ะ ๆ ผลคือเมื่ออัปเวอร์ชันย่อยแล้วก็มั่นใจได้ว่าจะไม่มีอะไรพังให้ต้องตกใจทีหลัง
แล้ว 0.19.2 มีอะไรจริง ๆ
ถ้าถามว่าตัวเวอร์ชัน 0.19.2 เองมีอะไร คำตอบตรง ๆ คือมันเป็นแค่แพตช์เล็ก ๆ ที่ไม่แตะโครงสร้างภาษาเลย สิ่งที่เปลี่ยนคือ parser (ส่วนที่อ่านโครงสร้างโค้ดของเรา) ได้รับการปรับให้จองหน่วยความจำน้อยลง พอทำงานเบาลง เครื่องเลยแปลโค้ดได้ไวขึ้น
Evan วัดผลกับโค้ดขนาดใหญ่ของเขาเองที่มีราว 850,000 บรรทัด แล้วพบว่าโดยรวมเร็วขึ้นประมาณ 7% ส่วนโปรเจกต์ที่มี 351 โมดูล เร็วขึ้นถึง 1.9 เท่า จากเดิมใช้เวลา 4.981 วินาที เหลือ 2.595 วินาที ถ้าให้เห็นภาพชัดกว่านั้น การคอมไพล์โค้ด 850,000 บรรทัดจากศูนย์ใช้เวลา 5.7 วินาที ส่วนการสั่งบิลด์ซ้ำเฉพาะส่วนที่แก้ใช้เวลาต่ำกว่า 350 มิลลิวินาที
แต่ต้องบอกตามตรงว่าตัวเลขพวกนี้ผู้สร้างเป็นคนวัดเอง และจะเห็นผลก็ต่อเมื่อโปรเจกต์ใหญ่จริง ถ้าเป็นโปรแกรมเล็ก ๆ แทบไม่รู้สึกถึงความต่าง
ข้อดีของการเป็นแพตช์คืออัปง่ายมาก แค่เปลี่ยนเลขเวอร์ชันใน elm.json ให้เป็น "0.19.2" แล้วโหลดตัวติดตั้งใหม่มาใช้ ก็เอาไปใช้กับโปรเจกต์เดิมได้เลยโดยไม่ต้องแก้โค้ดสักบรรทัด ถึงตรงนี้ Evan ยังแซวตัวเองแบบติดตลกว่า พอโปรแกรมเสียเวลาไปกับการเก็บกวาดหน่วยความจำน้อยลง มันก็เร็วขึ้นเอง เป็นเรื่องที่ฟังดูธรรมดาจนน่าขำว่าทำไมเพิ่งจะมาคิดได้
สัญญาณดี แต่ยังต้องดูกันยาว ๆ
ทั้งหมดนี้ไม่ได้แปลว่า Elm กำลังจะกลายเป็นกระแสหลัก ความจริงคือมันยังเป็นภาษาเฉพาะกลุ่มที่อยู่ในสถานะก่อน 1.0 มานานมาก ระบบนิเวศทั้งไลบรารี เครื่องมือ และคนในตลาดยังเล็กกว่า React หรือ Vue อยู่หลายเท่า ถ้าอยากเรียกใช้โค้ด JavaScript เดิม ก็ต้องคุยผ่านช่องทางที่ Elm กำหนดไว้เท่านั้น (ที่เรียกว่า ports) เอามาปนกันได้อิสระเหมือนเฟรมเวิร์ก JavaScript ทั่วไปไม่ได้
ตัว 0.19.2 เองก็เป็นแค่แพตช์เล็ก ไม่ใช่การกลับมาพร้อมกองฟีเจอร์ใหม่ ส่วนเรื่องใหญ่อย่าง type แบบ equatable กับ hashable หรือเวอร์ชัน 1.0 ก็ยังเป็นแค่แผน การกลับมาครั้งนี้จึงเป็นสัญญาณที่น่าดีใจสำหรับคนที่รอ มากกว่าจะเป็นหลักฐานว่าใคร ๆ กำลังแห่กันมาใช้ ถึงอย่างนั้น repo (คลังเก็บโค้ด) ของ elm/compiler บน GitHub ก็ยังมีดาวอยู่ราว 7,800 ดวง เป็นร่องรอยเล็ก ๆ ว่ายังมีคนเฝ้ามองอยู่ไม่น้อย
สำหรับคนที่เพิ่งได้ยินชื่อแล้วอยากลองของจริง เริ่มได้ที่เว็บทางการของ Elm ที่มีทั้งตัวติดตั้งสำหรับ Mac, Windows และ Linux ให้โหลด ถ้าอยากเรียนตั้งแต่พื้นฐานว่าเขียนหน้าเว็บด้วยภาษานี้ยังไง Elm Guide คือจุดตั้งต้นที่ครบที่สุด ส่วนใครที่มีโปรเจกต์ Elm เดิมอยู่แล้ว แค่แก้เลขเวอร์ชันใน elm.json เป็น "0.19.2" ก็ได้ของใหม่ทันที
เรื่องน่าคิดของการกลับมารอบนี้ไม่ได้อยู่ที่ตัวเลข 7% หรือ 1.9 เท่า แต่อยู่ที่วิธีที่มันเดินต่อ ภาษาที่หลายคนคิดว่าตายไปแล้วกลับมีคนสร้างที่ยอมพามันเดินต่อทีละก้าวเล็ก ๆ โดยไม่ทำของเดิมพัง แทนที่จะทุ่มออกทีเดียวให้ดูยิ่งใหญ่ และบางที "ยังไม่ตาย" ที่หนักแน่นที่สุด อาจไม่ใช่การกลับมาพร้อมของใหม่เพียบ แต่คือการมีคนพร้อมพามันเดินต่อทีละนิดจนถึงปลายทาง
ที่มา:
- Faster Builds · Elm 0.19.2 (Evan Czaplicki) จาก elm-lang.org
- Release 0.19.2 · elm/compiler จาก GitHub
- Elm · เว็บทางการ จาก elm-lang.org



