- Unison คือ ภาษาโปรแกรมเชิงฟังก์ชัน ที่สร้างสถาปัตยกรรมใหม่ทั้งระบบสำหรับการจัดเก็บโค้ด การจัดการเวอร์ชัน และการดีพลอย โดยอิงกับแนวคิดการระบุโค้ดจาก เนื้อหา (Hash) ไม่ใช่ชื่อ
- โค้ดทั้งหมดไม่ได้ถูกเก็บเป็นไฟล์ข้อความ แต่เก็บอยู่ใน codebase (DB) ทำให้ชื่อเป็นเพียงป้ายกำกับ และช่วยให้ปัญหาอย่าง ชื่อซ้ำ/ไฟล์ชนกัน และความขัดแย้งจากการรีแฟกเตอร์ หายไปในระดับโครงสร้าง
- ผ่าน UCM (Unison Codebase Manager) ผู้ใช้สามารถ เพิ่ม·ลบ·ย้าย·เปลี่ยนชื่อ·ทดสอบ·รัน definition ได้ และยังมี ระบบนิเวศเครื่องมือสำหรับการทำงานร่วมกัน ที่เชื่อมกับ LSP, UCM Desktop และ Unison Share
- นอกจากฟีเจอร์ภาษาอย่าง ระบบ effect บนพื้นฐานของ Abilities, delayed computations และ structural pattern matching แล้ว ยังขยายไปสู่โมเดลแบบรวมศูนย์ที่ให้กำหนดทั้ง application logic และการดีพลอยขึ้นคลาวด์ (Cloud/BYOC) ภายในโปรแกรมเดียวกันได้
- ด้วยโครงสร้างแบบ hash-based ทำให้คุณสมบัติอย่าง การตัดการคอมไพล์ซ้ำ การลดความขัดแย้งของเวอร์ชัน และการค้นหา static reference กลายเป็นคุณสมบัติพื้นฐาน พร้อมมอบ ประสบการณ์การพัฒนาแบบกระจายที่สอดคล้องกัน ผ่านระบบ Share, Cloud, Projects และ Branch
ภาพรวมของภาษา Unison
- จัดการ definition ด้วยโครงสร้าง content-addressable code ทำให้แม้จะใช้ชื่อเดียวกัน แต่ถ้าเนื้อหาต่างกันก็ถือเป็น definition คนละตัวอย่างสมบูรณ์
- ไม่ต้องคอมไพล์ใหม่ ลดการชนกันจากการพัฒนา API และคงความเสถียรของการอ้างอิงได้อย่างสมบูรณ์
- codebase ถูกเก็บเป็น DB บน SQLite โดยโค้ด ชื่อ และเอกสารถูกจัดเก็บเป็นข้อมูลทั้งหมด
- สำรวจโครงสร้างได้ด้วยคำสั่ง UCM เช่น
ls, view
- ไฟล์ข้อความเป็นเพียงอินเทอร์เฟซสำหรับการแก้ไขเท่านั้น โดย แหล่งข้อมูลจริงหนึ่งเดียวของซอร์สคือ DB
- แนวคิดอย่างการชนกันของชื่อ การ merge ไฟล์ และการจัดการโครงสร้างรีโพ จึงถูกลดความสำคัญลงจนกลายเป็นเรื่องล้าสมัย
ความสามารถของภาษา
- Abilities: กลไกควบคุม effect อย่าง IO, Exception ผ่านระบบชนิดข้อมูล
- Structural pattern matching: แยกโครงสร้างของ type เพื่อสร้าง control flow
- Delayed computations: แสดงการประเมินผลแบบไม่เคร่งครัดอย่างชัดเจน
- มี static type ที่แข็งแรง + การอนุมานชนิดข้อมูลที่หลากหลาย + Kind-checking
สภาพแวดล้อมการพัฒนาและ toolchain
- UCM (Unison Codebase Manager)
- สร้าง·ลบ·เปลี่ยนชื่อ·ทดสอบ·รัน definition
- ฝัง version control แบบคล้าย Git เช่น project, branch, clone, merge ไว้ในตัวภาษา
- UCM Desktop
- สำรวจโครงสร้าง codebase, ย้ายไปยัง definition แบบคลิกได้, แสดงผลเอกสาร
- รองรับ LSP
- ใช้งานฟังก์ชันแบบ IDE ได้กับเอดิเตอร์ยอดนิยมส่วนใหญ่
- Unison Share
- ศูนย์กลางโค้ด: โฮสต์โปรเจ็กต์, ค้นหา, รีวิว, ร่วมพัฒนา (=Pull Request), ค้นหาแบบอิง type
- เพราะทุก definition อิงกับ hash จึง อ้างอิงและกระโดดไปยังปลายทางได้เหมือนไฮเปอร์ลิงก์เสมอ
โมเดลการดีพลอย: Unison Cloud & BYOC
- ใช้ภาษาเดียวกันเขียนได้ทั้ง application logic + นิยามโครงสร้างพื้นฐาน แล้วดีพลอยได้ทันที
- สร้างระบบกระจายได้ด้วย “โค้ด” เพียงอย่างเดียว โดยไม่ต้องใช้ YAML, Helm หรือข้อกำหนด RPC ที่ซับซ้อน
- ด้วย BYOC (Bring Your Own Cloud) จึงสามารถรัน Cloud stack บนโครงสร้างพื้นฐานคอนเทนเนอร์ของตนเองได้
- มีทั้ง storage ที่ปลอดภัยทางชนิดข้อมูล อย่าง OrderedTable, การรองรับ Daemon และระบบ orchestration อัตโนมัติ
ตัวอย่าง: Guessing Game
- ตัวอย่าง CLI แบบง่ายที่ใช้ Abilities (IO, Exception)
- แสดงการผสานกันอย่างเป็นธรรมชาติขององค์ประกอบภาษา เช่น Random, console IO, pattern matching และ delayed computations
ระบบนิเวศและชุมชน
- รองรับ การร่วมพัฒนา·การรีวิว·บัญชีองค์กร ผ่าน Share
- ค้นหาทั้ง ecosystem แบบอิง type และมี MCP server สำหรับ AI agent
- กำลังพัฒนา C FFI อย่างต่อเนื่อง
- ขยายฟีเจอร์เพิ่มประสิทธิภาพการทำงานร่วมกัน เช่นตัวดู diff สไตล์ Git และคำอธิบายประกอบ branch
ประวัติสำคัญ (สรุป)
- 2018: ก่อตั้ง Unison Computing
- 2019: เปิดตัว alpha รุ่นแรก
- 2021: เปลี่ยน codebase เป็น SQLite (ขนาดเล็กลง 100x)
- 2021: เปิดตัว Unison Share
- 2022~2024: LSP, Projects, Kind-checking, Pull Request, Cloud GA
- 2025: Desktop App, การเพิ่มประสิทธิภาพ runtime ขนาดใหญ่, MCP server, รองรับ BYOC
- พ.ย. 2025: เปิดตัว Unison 1.0 อย่างเป็นทางการ
FAQ
- ทำไมต้องเป็นภาษาใหม่?
- โมเดลโค้ดแบบ hash-based แทบ ไม่สามารถย้ายไปติดตั้งเป็นส่วนเสริมในภาษาที่มีอยู่เดิมได้
- เพราะแนวทางการเก็บโค้ด การจัดการเวอร์ชัน การดีพลอย และการทำงานร่วมกัน ล้วนต่อยอดมาจากแนวคิดนี้โดยตรง จึงจำเป็นต้อง ออกแบบเป็นภาษาใหม่ตั้งแต่ต้น
- กรณีใช้งานจริงล่ะ?
- ระบบ Unison Cloud ทั้งหมด เขียนและใช้งานด้วย Unison เอง
- มีเวิร์กโฟลว์ระดับเชิงพาณิชย์สำหรับการทำงานร่วมกันในองค์กร/ทีม และการพัฒนาแอปพลิเคชันแบบกระจาย
- ข้อกังวลเรื่อง vendor lock-in: เป็นภาษาโอเพนซอร์ส ดีพลอยได้อย่างอิสระด้วย Docker เป็นต้น และรองรับ BYOC
- รูปแบบการทำงานร่วมกัน: รองรับองค์กร, ticket, code review, PR ฯลฯ และจะเกิดความขัดแย้งเฉพาะในระดับ definition เท่านั้น
- การจัดการเวอร์ชัน: มีระบบ project, branch, push, pull, merge ของตัวเองโดยไม่ต้องใช้ Git
- ไม่มีข้อจำกัดด้าน IDE: มี LSP server ให้ใช้กับเอดิเตอร์ได้หลากหลาย
- การเชื่อมต่อกับภาษาอื่น: กำลังพัฒนา C FFI
- การเข้าถึง codebase ที่ไม่มีไฟล์: สำรวจโครงสร้างได้ผ่านคำสั่ง CLI (UCM) หรือแอป Desktop
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฉันติดตาม Unison มานานมาก ตั้งแต่สมัยบล็อกส่วนตัวของ Paul ก็เกิน 10 ปีแล้ว การออก 1.0 ครั้งนี้ถือเป็นหมุดหมายใหญ่มาก แต่พูดตรงๆ ก็แอบผิดหวังนิดหน่อย
ฉันชอบภาษาโปรแกรมมากและเห็นการเติบโตของภาษาอย่าง Rust, Go, Zig มาตลอด แต่รู้สึกว่า Unison ยังขาด แรงขยายของระบบนิเวศ เมื่อเทียบกับระดับความสมบูรณ์ของมัน
คิดว่าสาเหตุหลักคือโมเดลธุรกิจที่ออกแบบให้ ผูกกับคลาวด์ เป็นส่วนใหญ่ แม้จะมีตัวเลือก BYOC แต่ก็ยังไม่พอ มันให้ความรู้สึกว่าอะไรบางอย่างยังไม่ลงตัว
โปรเจกต์ Share เป็นโอเพนซอร์ส และ GitHub เองก็มีการพึ่งพาเชิงปฏิบัติเหมือนกันแต่ก็ยังได้รับความนิยมอยู่
ไม่ได้จะปฏิเสธประเด็นพวกนี้นะ แต่อยากให้คนได้ลองใช้เองและสัมผัสว่าแนวคิดบางอย่างสามารถช่วยงานออกแบบภาษาอื่นๆ ได้
แต่สื่อการเรียนรู้ส่วนใหญ่ตั้งสมมติฐานว่าต้องใช้โครงสร้างพื้นฐานคลาวด์ ทำให้ทางไปต่อในสภาพแวดล้อมออฟไลน์ตันหมด
อาจจะมีแนวทางแบบ Unison อยู่ก็ได้ แต่ เลเยอร์การตลาด กำลังบดบังเส้นทางนั้นอยู่
ถ้ามีผู้ใช้ที่ยอมจ่าย ก็จะมีแรงจูงใจให้เทคโนโลยียังคงอยู่บนฐานที่สมจริงและใช้งานได้จริง
ถ้าไม่มีองค์ประกอบเชิงพาณิชย์ ก็คงให้ความรู้สึกเหมือนเป็นแค่ esolang อีกตัวหนึ่ง ตอนนี้ฉันตั้งใจจะลองเอาไปใช้ในโปรเจกต์ส่วนตัว
ในเอกสารมีพูดถึง Unison Share ซึ่งก็โฮสต์อยู่บน unison-lang.org เช่นกัน
แม้จะมีตัวเลือก BYOC แต่ก็ยังต้องมีบัญชี unison.cloud และสมัครสมาชิกอยู่ดี อยากให้เรื่องพวกนี้ระบุให้ชัดในมาร์เก็ตติ้งและเอกสาร
สวัสดีครับ ผมเป็นหนึ่งใน ผู้ร่วมสร้าง ภาษา Unison ถ้ามีอะไรสงสัยถามได้ทุกเรื่อง
Unison เป็นหนึ่งในภาษาแรกๆ ที่ชู algebraic effects (Abilities) เป็นฟีเจอร์หลัก
จำได้ว่าช่วงแรกๆ ยังไม่แน่ใจว่าฟีเจอร์นี้จะได้รับการยอมรับดีแค่ไหน เลยอยากรู้ว่าตอนนี้พอใจไหม
อยากฟังด้วยว่าระบบเอฟเฟกต์เข้ากับส่วนอื่นของภาษาได้ดีหรือเปล่า ชอบไวยากรณ์ไหม และมีเรื่องน่าสนใจอะไรเกี่ยวกับการทำงานภายในบ้าง
เอกสารที่เกี่ยวข้อง: Unison Abilities
เก็บแค่แฮชของนิพจน์กับค่า “passed” หรือสามารถคำนวณ แฮชของค่าทั้งหมด ได้ด้วย
ถ้าเป็นอย่างหลัง ก็ดูเหมือนจะต่อยอดแนวคิด การบิลด์ที่ทำซ้ำได้ แบบ Nix หรือ Trustix ได้
คงเป็นไปได้ว่าตอนนี้การแคชจัดการเฉพาะนิพจน์ที่ bind ไว้ แต่ก็ดูเหมือนอาจทำหน้าที่เป็นสะพานเชื่อมสู่โลกภายนอกตอนรันไทม์ได้ด้วย
แต่ตอนนี้ยังให้ความรู้สึกเหมือนเป็นโซลูชันที่กำลังหาปัญหาอยู่
อยากรู้ว่าภาษานี้ทำมาเพื่อใคร และนอกจาก Unison Cloud แล้ว มีที่ไหนใช้งานจริงในโปรดักชันบ้างไหม
ตอนแรกนึกว่าเป็นภาษาอยู่บน BEAM แต่จริงๆ รันบน VM ของตัวเอง
เมื่อเทียบกับภาษาในตระกูล BEAM แล้ว เรื่อง fault tolerance ต่างกันอย่างไร และมีกรณีใช้งานแบบไหนที่ Unison เหมาะกว่าบ้าง
มันเรียกฐานข้อมูลภายนอก หรือสร้างขึ้นด้วย Unison เอง
เมื่อดูร่วมกับ abstraction ของ Database แล้ว เป็นการผสมที่น่าสนใจมาก แต่ทำความเข้าใจแนวคิดทั้งหมดได้ไม่ง่ายเลย
ฉันมองว่า Unison เป็นหนึ่งในภาษาที่น่าสนใจที่สุด
ฉันเชื่อว่า algebraic effects จะเป็นแนวคิดสำคัญของคนรุ่นถัดไป
นอกจากนี้ Unison ยังมีไอเดียเจ๋งๆ อีกมาก
ส่วนตัวคิดว่าน่าจะเหมาะกับ การพัฒนาเกมม็อด ด้วย
เพราะต้องรันโค้ดที่ไม่น่าเชื่อถือได้บนฝั่งไคลเอนต์ และ ระบบ ability ของ Unison น่าจะทำให้สร้างสภาพแวดล้อม sandbox ได้ง่าย
อีกทั้งยังอาจมีประโยชน์กับการทำ ECS(Entity Component System) ด้วย
ถ้าสามารถอนุมานความสามารถที่ฟังก์ชันต้องใช้ได้ ก็อาจรับประกันความปลอดภัยในการรันแบบขนานได้โดยอัตโนมัติ
บน Cloud จะใช้ IO ability โดยตรงไม่ได้ และจะอนุญาตเฉพาะสิ่งอย่าง Http ability ที่ควบคุมอย่างปลอดภัยแทน
แบบนี้ผู้ใช้ก็จะเข้าถึงระบบไฟล์ไม่ได้
ผมเองก็กำลังคิดจะใช้ฟีเจอร์นี้กับการพัฒนาเกมเหมือนกัน
ผู้ใช้อื่นอาจมีส่วนช่วยเกมได้ด้วยการทำ ability เป็น native service
ลิงก์อ้างอิง: Unison Cloud, โค้ด validateSandboxed, ตัวอย่าง ECS
ตอนเห็นโปรเจกต์นี้ครั้งแรก ฉันคิดว่า “อีก 5 ปีข้างหน้าจะเป็นยังไงนะ” แล้วเวลาก็ผ่านไปเท่านั้นจริงๆ
ดีใจมากที่ตอนนี้ได้เห็น การออก 1.0
การทำให้ ภาษาที่หัวก้าวหน้าแบบนี้ ใช้ได้จริงในสภาพแวดล้อมอุตสาหกรรมถือเป็นความสำเร็จที่น่าทึ่ง ยินดีด้วย
ฉันคิดว่าระบบแบบ Unison คือ อนาคตของการประมวลผล
แต่ไม่รู้ว่าอนาคตนั้นจะมาถึงเมื่อไร
ความงามของระบบแบบนี้คือโครงสร้างพื้นฐาน ข้อมูล และชั้นบริการถูกรวมอยู่ในระบบเดียวกัน
บางทีอาจเป็นฐานที่ดีกว่าสำหรับ AI coding agents ก็ได้
แต่รู้สึกว่าแทนที่จะใช้โมเดล VC น่าจะเหมาะกับ การพัฒนาอิสระอย่างยั่งยืน มากกว่า
ทีมที่ทำโปรเจกต์ระยะยาวแบบนี้ต่อเนื่องได้นี่สุดยอดจริงๆ
ฉันจำวันที่ Rúnar บอกว่าจะเริ่ม Unison ได้
ตอนนั้นคิดว่าเป็นโปรเจกต์ที่จะเปิดพาราไดม์ใหม่แบบเต็มตัว และพอเห็นการออก 1.0 ตอนนี้ก็ภูมิใจมากจริงๆ
หวังว่าสักวัน Unison จะกลายเป็น ภาษาหลัก ของฉัน
อยากให้บนเว็บไซต์ Unison มี benchmark
ถ้ารู้ลักษณะด้านประสิทธิภาพก็จะพอเดาได้ว่าเหมาะกับงานแบบไหน
ต่อให้เป็นแค่ตัวเลขง่ายๆ อย่าง การเปรียบเทียบความเร็วในการจัดการคำขอ กับ Django, Express.js, ASP.NET ก็ยังดี
ไอเดียน่าสนใจนะ แต่ก็หวังว่าจะมีเป้าหมายรันไทม์นอกเหนือจากเว็บด้วย
สำหรับฉันแล้ว การลองภาษาใหม่กับอะไรอย่าง เครื่องมือ CLI มักง่ายกว่าการใช้กับเว็บโปรเจกต์ขนาดใหญ่
ฉันอ้างอิง บทความรีวิว Unison ที่โพสต์ในปี 2023 ด้วย ซึ่งช่วยได้มากทีเดียว
ไอเดียน่าสนใจ แต่ Unison เป็นโครงสร้างแบบ all-in-one ที่ต้องรับทั้ง ภาษา + การจัดการซอร์ส + โฮสติ้ง พร้อมกัน
ถ้าไม่ชอบส่วนใดส่วนหนึ่งของสแตก ก็จะใช้ทั้งหมดได้ยาก
เพราะงั้นไอเดียแบบนี้น่าจะเผยแพร่ในวงกว้างได้ยากถ้าจะให้คนรับไปตรงๆ
คุณภาพของเครื่องมือ ของภาษานั้นสูงมาก และยังรวมเข้ากับระบบเดิมได้ด้วย
ตัวอย่างเช่น Unison Cloud เขียนด้วย Unison เป็นส่วนใหญ่ แต่บางส่วนก็ใช้ Haskell
การพูดคุยที่เกี่ยวข้อง: เธรด HN 1, เธรด HN 2
ฉันคิดว่าการออกแบบหลายเทคโนโลยีให้ทำงานร่วมกันได้อย่างเป็นธรรมชาตินั้นมีคุณค่ามาก