- เป็นภาษาแบบคอมไพล์ชนิดระบุแบบคงที่ที่เขียนด้วยคีย์เวิร์ดภาษาเกาหลี และสร้างเนทีฟไบนารีผ่าน LLVM IR
- มีทั้งคอมไพเลอร์และอินเทอร์พรีเตอร์ที่พัฒนาด้วย Rust พร้อมรองรับการ build, run, REPL และ LSP ผ่าน CLI
hgl
- คีย์เวิร์ดทั้งหมดเป็นภาษาเกาหลี เช่น
함수, 만약, 반복, 변수 และยังสามารถกำหนดชื่อตัวแปรกับชื่อฟังก์ชันเป็นภาษาเกาหลีได้
- มีความสามารถใช้งานจริงในตัว เช่น ไฟล์ I/O, JSON, HTTP, เรกิวลาร์เอ็กซ์เพรสชัน, วันที่/เวลา, system call และมีตัวอย่าง 18 รายการ
- นำโครงสร้างเชิงวิทยาศาสตร์และการแพร่หลายทางวัฒนธรรมของอักษรฮันกึลมาสร้างเป็นภาษาโปรแกรม จนถูกจับตามองในฐานะความพยายามใหม่ที่ผสานการเรียนภาษาเกาหลีกับการเขียนโค้ด
ภาพรวมภาษา Han
- Han คือภาษาแบบคอมไพล์ชนิดระบุแบบคงที่ที่เขียนด้วยคีย์เวิร์ดภาษาเกาหลี และสร้างเนทีฟไบนารีผ่าน LLVM IR
- รวมทั้งชุดเครื่องมือคอมไพเลอร์และtree-walking interpreter ที่เขียนด้วย Rust
- สามารถใช้คำสั่ง
hgl เพื่อรันอินเทอร์พรีเตอร์, build, REPL และเปิดใช้งานเซิร์ฟเวอร์ LSP ได้
- คีย์เวิร์ดทั้งหมดประกอบด้วยอักษรฮันกึล เช่น
함수, 만약, 반복, 변수, 출력 เป็นต้น
- นำระบบตัวอักษรเชิงวิทยาศาสตร์ของฮันกึลมาสร้างเป็นภาษาโปรแกรม โดยมีเป้าหมายเพื่อผสานความงามทางภาษากับความแม่นยำทางเทคนิค
ฟีเจอร์หลัก
- รองรับคีย์เวิร์ดและ identifier ภาษาเกาหลี: สามารถตั้งชื่อตัวแปร ชื่อฟังก์ชัน และชื่อ struct เป็นภาษาเกาหลีได้
- ระบบชนิดข้อมูลแบบคงที่: มีชนิดข้อมูลพื้นฐาน 5 แบบ ได้แก่
정수, 실수, 문자열, 불, 없음
- โหมดคอมไพล์และอินเทอร์พรีเตอร์: LLVM IR → clang → สร้างไบนารี หรือรันทันที
- REPL และเซิร์ฟเวอร์ LSP: รองรับการทำงานแบบโต้ตอบและ code completion ผ่านคำสั่ง
hgl repl, hgl lsp
- ความสามารถในตัว
- อาร์เรย์, struct, closure, pattern matching, exception handling, generics
- ไฟล์ I/O, JSON, HTTP, เรกิวลาร์เอ็กซ์เพรสชัน, วันที่/เวลา, system call
- format string, hash map, ฟังก์ชันคณิตศาสตร์ในตัว
- มีโปรแกรมตัวอย่าง 18 รายการ: เช่น Hello World, การเรียก HTTP API เป็นต้น
การติดตั้งและการรัน
- องค์ประกอบที่จำเป็น: Rust(1.70+), clang
- ขั้นตอนการติดตั้ง
- มีส่วนขยาย VS Code: รองรับ syntax highlighting และ LSP
- คำสั่ง CLI
hgl interpret <file.hgl> — รันอินเทอร์พรีเตอร์
hgl build <file.hgl> — คอมไพล์เป็นเนทีฟไบนารี
hgl run <file.hgl> — คอมไพล์แล้วรันทันที
hgl repl — โหมดโต้ตอบ
hgl lsp — รันเซิร์ฟเวอร์ LSP
สถานะการพัฒนาในปัจจุบัน
- ฟีเจอร์ที่ใช้งานได้สมบูรณ์
- ชนิดข้อมูล, control flow, ฟังก์ชัน, สตริง, อาร์เรย์, hash map, struct, การจัดการข้อผิดพลาด, การตรวจสอบชนิดข้อมูล
- JSON, HTTP, เรกิวลาร์เอ็กซ์เพรสชัน, วันที่/เวลา, ระบบ, ไฟล์ I/O, ฟังก์ชันคณิตศาสตร์, โมดูล, generics
- ฟีเจอร์ที่พัฒนาแล้วบางส่วน
- ระหว่าง
hgl build การสร้างโค้ดสำหรับ closure, สตริง และเมธอดของอาร์เรย์ยังไม่เสร็จสมบูรณ์
- ฟีเจอร์ที่ยังไม่รองรับ
- ความปลอดภัยของ Null (ไม่มีชนิด
Option), การประมวลผลแบบอะซิงก์/ขนาน, garbage collection, tail recursion optimization
ฮันกึลกับการเขียนโปรแกรม
- ฮันกึลคือระบบตัวอักษรเชิงวิทยาศาสตร์ที่แสดงโครงสร้างทางสัทศาสตร์ในรูปแบบภาพ ซึ่งพระเจ้าเซจงมหาราชทรงประดิษฐ์ขึ้นในปี 1443
- Han สะท้อนความชัดเจนเชิงโครงสร้างของฮันกึลลงในไวยากรณ์ของภาษา
- ปัจจุบันมีผู้เรียนภาษาเกาหลีมากกว่า 16 ล้านคนทั่วโลก และ Han มอบเครื่องมือเรียนฮันกึลผ่านการเขียนโค้ด
- ตัวอย่างคีย์เวิร์ด
함수(function), 만약(if), 반복(for), 반환(return), 변수(variable), 출력(print) เป็นต้น
การออกแบบและโครงสร้าง
- ไปป์ไลน์คอมไพเลอร์ที่ใช้ Rust
- Lexer → Parser → AST → Interpreter / CodeGen → LLVM IR → clang → Binary
- โครงสร้างโปรเจกต์
src/ — โค้ดหลักของคอมไพเลอร์และอินเทอร์พรีเตอร์
editors/vscode/ — ส่วนขยาย VS Code
- มี
examples/, spec/, tests/ รวมอยู่ด้วย
- เหตุผลของการออกแบบ
- ใช้การสร้าง IR แบบข้อความแทน LLVM C API เพื่อให้การ build เรียบง่ายขึ้น
- อินเทอร์พรีเตอร์เน้นการรันที่รวดเร็ว ส่วนคอมไพเลอร์เน้นประสิทธิภาพ
- pattern matching และ memory safety ของ Rust เหมาะกับการพัฒนาภาษาโปรแกรม
การทดสอบและไลเซนส์
- ใช้
cargo test เพื่อรันทดสอบ 46 รายการ (unit 41 รายการ, integration 5 รายการ)
- เผยแพร่ภายใต้ไลเซนส์ MIT
ความสำคัญทางวัฒนธรรม
- Han คือภาษาเชิงทดลองที่ผสานความงามของฮันกึลกับความแม่นยำของการเขียนโปรแกรม
- นำเสนอแนวทางใหม่ที่ลบเส้นแบ่งระหว่างภาษาและโค้ดให้ทั้งผู้เรียนภาษาเกาหลีและนักพัฒนา
12 ความคิดเห็น
ขอบคุณครับ ได้ข้อมูลที่เป็นประโยชน์มาก GeekNews ที่คัดเลือกข่าวสำคัญมาให้ เป็นความสุขในการแวะเข้ามาทุกวัน สำหรับผมเองซึ่งกำลังพัฒนาภาษาโปรแกรมภาษาเกาหลีอยู่ในตอนนี้ ก็รู้สึกเชิงบวกอย่างมากที่ได้เห็นความพยายามแบบนี้ดำเนินต่อไป
ในมุมของคนที่ใช้ชีวิตอยู่ต่างประเทศมานานและเฝ้ามองการเปลี่ยนแปลงของเกาหลีมาโดยตลอด ผมรู้สึกเสียดายเสมอกับปรากฏการณ์ที่ภาษาอังกฤษแทรกซึมเข้าไปมากเกินไปในชีวิตประจำวันและในภาคอุตสาหกรรมโดยรวม ไม่ว่าจะเป็นภาษาถิ่นแบบ Pangyo คำเรียกชื่ออพาร์ตเมนต์ที่เข้าใจยาก เมนูประหลาดอย่าง MSGR หรือป้ายร้านค้าที่เต็มไปด้วยภาษาอังกฤษ ล้วนดูเหมือนกำลังบั่นทอนพลังการเติบโตตามธรรมชาติของภาษาของเรา แม้ว่าการศึกษาตั้งแต่เนิ่น ๆ จะทำให้กำแพงภาษาอังกฤษต่ำลง แต่ความเป็นธรรมชาติที่ภาษาแม่มอบให้นั้นไม่มีอะไรทดแทนได้ เหมือนกับเวลาที่อยู่ต่างประเทศแล้วป้ายภาษาเกาหลีสะดุดตาขึ้นมาทันที เพราะสมองของเราใช้พลังงานน้อยที่สุดเมื่อประมวลผลภาษาแม่
print("Hello, world!");
แสดงผล "สวัสดีครับ!"
แบบไหนสะดุดตาและเข้าใจได้ทันทีมากกว่ากัน?
แม้ AI กำลังทลายกำแพงภาษา แต่การวิจัยภาษาโปรแกรมภาษาเกาหลีนั้นคือการกำจัด 'ชั้นการแปล' ที่ไม่จำเป็นออกจากระบบความคิดของเรา เพื่อเพิ่มประสิทธิภาพการทำงานของสมองให้สูงสุด การที่
แสดงผลให้ความรู้สึกตรงไปตรงมามากกว่าprintนั้นเป็นเรื่องธรรมดา แม้ด้วยเหตุผลด้านความเป็นสากลหรือกลไกของตลาดงาน จะทำให้มันยากที่จะกลายเป็นกระแสหลักในทันที แต่ก็หวังว่าในอนาคตจะมีภาษาเกาหลีหลากหลายแบบที่สมบูรณ์ยิ่งขึ้นมาช่วยทำให้ระบบนิเวศนี้อุดมสมบูรณ์ขึ้นเป็นภาษาเกาหลีสินะ...หยุดเล่นมุกสกปรกไม่ได้จริง ๆ นะเนี่ย
ทำให้นึกถึงโปรเจกต์ Ssi-aet เลย
ดูเหมือนจะเป็นคนที่ทำงานด้านบัญชีมานานมากกว่างานพัฒนา แต่กลับสร้างคอมไพเลอร์ขึ้นมาและได้ GitHub stars เกิน 100 ด้วย..
ยุคของ AI มาถึงแล้วจริง ๆ
พอคิดว่าจะเขียนโค้ดเป็น
비동기-대기แทน async-await ก็รู้สึกว่าสะดวกดีเหมือนกันนะสิ่งสำคัญของภาษาโปรแกรมก็คือความอเนกประสงค์นี่แหละ..
น่าขำดีที่ปฏิกิริยาบน Hacker News ออกมาในเชิงบวก 555
ว้าว เจ๋งมากเลย
สวัสดีตอนเช้าที่แข็งแกร่งและทรงพลัง !
ว้าว
ว้าว ดีจังที่ได้เห็นอะไรแบบนี้บน Hacker News ด้วย ขอบคุณพระเจ้าเซจงมหาราช
ความคิดเห็นจาก Hacker News
ถ้าสนใจภาษาโปรแกรมภาษาเกาหลี ขอแนะนำภาษาฟังก์ชันนัล ‘Nuri’
ลิงก์ GitHub ของ Nuri
มันไม่ได้เป็นแค่การแปลคีย์เวิร์ดเท่านั้น แต่สามารถสะท้อน โครงสร้างไวยากรณ์ภาษาเกาหลี ลงในโค้ดได้จริง
ตัวอย่างเช่น ถ้าเขียนว่า “หาร 10 ด้วย 5 แล้วแสดงผล” ก็จะแสดงผลเป็น “2”
อีกตัวอย่างหนึ่งคือภาษาที่ชื่อว่า ‘Yaksok’ เช่นกัน โค้ดตัวอย่างเกม 2048 ทั้งหมดเขียนเป็นภาษาเกาหลี
คิดว่าเป็นไอเดียที่ยอดเยี่ยมมาก ฮันกึลเป็น ระบบตัวอักษรที่ออกแบบอย่างมีเหตุผล เลยเรียนได้ภายในครึ่งวันบ่าย
คำตอบบน StackExchange สำหรับเรียนฮันกึล
ฮันกึลมีจำนวนตัวอักษรใกล้เคียงกับภาษาอังกฤษเลยเรียนได้ไว แต่การจำคำศัพท์ยากกว่าเล็กน้อย ผมเลยใช้ทั้ง Anki และ แอปเรียนรู้แบบเกม ที่ผมทำเองควบคู่กัน
ในฐานะเจ้าของภาษาเกาหลี อยากแชร์ความเห็นสั้น ๆ
คำนามแปลได้ค่อนข้างเป็นธรรมชาติ แต่ กริยาคำสั่งแบบภาษาอังกฤษ ต้องระวังเป็นพิเศษเวลาแปลเป็นเกาหลี ตัวอย่างเช่น “find” อาจแปลงเป็น ‘chatda’, ‘chatgi’, ‘chajeum’ ได้ แต่ความเป็นธรรมชาติจะต่างกันไปตามบริบท
พหูพจน์ก็เป็นปัญหาเช่นกัน ภาษาอังกฤษแยกเอกพจน์-พหูพจน์ชัดเจน แต่ภาษาเกาหลีไม่ได้เป็นแบบนั้น ถ้าระบุพหูพจน์ชัด ๆ อย่าง “daneodeul” บางครั้งกลับฟังดูไม่เป็นธรรมชาติ
ถ้าไม่ใช่แค่แทนคีย์เวิร์ดตรง ๆ แต่คำนึงถึง ความต่างเชิงโครงสร้าง ระหว่างภาษาอังกฤษกับภาษาเกาหลีด้วย โปรเจกต์นี้น่าจะทรงพลังมากขึ้นอีก
ตอนเรียนวิทยาการคอมพิวเตอร์ในมหาวิทยาลัย ผมรู้สึกว่าการที่ภาษาโปรแกรมอิงภาษาอังกฤษเป็น ข้อได้เปรียบอย่างมาก สำหรับคนที่ใช้ภาษาอังกฤษ
เพื่อนนักเรียนต่างชาติของผมหลายคนลำบากกว่าในการเรียน เพราะไม่คุ้นกับภาษาอังกฤษ เลยมักมีมุกว่าการเขียนโปรแกรมควรถูกนับเป็นหน่วยกิตภาษาต่างประเทศด้วย ซึ่งก็ฟังดูตลกดี
สิ่งที่ยากจริง ๆ คือการเรียนการเขียนโปรแกรมเองต่างหาก แต่เรื่องหัวข้อขั้นสูงหรือเอกสารที่มีแต่ภาษาอังกฤษนั้นเป็นอุปสรรคใหญ่สำหรับผู้เรียน ESL จริง
ผมไม่รู้ภาษาเกาหลี แต่จากเธรดนี้ได้มุมมองทาง ภาษาศาสตร์ เยอะมาก
ทั้งการออกแบบเชิงสัทศาสตร์ของฮันกึล(ลิงก์),
ลักษณะของพหูพจน์ในภาษาเกาหลี(ลิงก์),
ปัญหา การบีบอัดโทเค็น ของภาษาเกาหลีกับตัวตัดโทเค็นของ LLM(ลิงก์),
และ จังหวะของแป้นพิมพ์ฮันกึล ที่พยัญชนะกับสระถูกแยกตามตำแหน่งมือ(ลิงก์) ล้วนน่าสนใจมากเป็นพิเศษ
ผมคิดว่าความพยายามแบบนี้อาจนำไปสู่ การแตกย่อยของภาษา (fragmentation)
ถ้าทุกคนต่างสร้างภาษาโปรแกรมด้วยภาษาของตัวเอง การทำงานร่วมกัน การจ้างงาน และการแบ่งปันเทคโนโลยีก็คงยากขึ้น
ส่วนตัวผมคิดว่าถ้าทั้งโลกใช้ภาษาเดียวกัน สงครามกับความเข้าใจผิดน่าจะลดลง แน่นอนว่าความหลากหลายทางวัฒนธรรมจะลดลงด้วย แต่ ประสิทธิภาพของการสื่อสาร จะสูงขึ้น
แนวทางการแปลแค่คีย์เวิร์ดก็น่าสนใจดี
อย่างในโค้ดตัวอย่าง
ถ้าเขียนแบบนี้ โค้ดอาจจะ กระชับ ขึ้นได้ แม้ว่าจะเสียข้อดีเรื่องการแยกตัวพิมพ์เล็ก-ใหญ่ไปก็ตาม
ผมเคยได้ยินมาว่าไม่ว่าภาษาจะหนาแน่นแค่ไหน ความเร็วในการประมวลผลข้อมูลของคนก็ค่อนข้างใกล้เคียงกัน
บล็อกโพสต์ที่เกี่ยวข้อง
แต่ก็ไม่ประสบความสำเร็จ เพราะสภาพแวดล้อมคอมพิวเตอร์ส่วนใหญ่ยังคงต้องใช้ การป้อนอักษรละติน อยู่แล้ว และการจำคีย์เวิร์ดไม่กี่คำก็ไม่ยาก
แม้ในยุค LLM ข้อมูลฝึกส่วนใหญ่ก็ยังเป็นโค้ดภาษาอังกฤษ ดังนั้นโค้ดภาษาอังกฤษก็น่าจะยัง มีประสิทธิภาพ กว่าอยู่ดี
เป็นโปรเจกต์ที่ยอดเยี่ยมมาก เมื่อราว 190 ปีก่อน(!) ผมเคยเรียนมหาวิทยาลัยที่เกาหลี และตอนนี้ก็ยังพอมีพื้นฐานเกาหลีอยู่บ้าง พอดูโค้ดตัวอย่างแล้วให้ความรู้สึกเหมือนได้ เรียนรู้คำศัพท์ใหม่
ผมชอบโปรเจกต์นี้มาก ตอนดูตัวอย่างโค้ด ทั้งที่ไม่เข้าใจอะไรเลย แต่ก็ทำให้ผมพอจะสัมผัสได้ว่าตอนนักพัฒนาที่ไม่ได้ใช้ภาษาอังกฤษเป็นภาษาแม่เห็นภาษาโปรแกรมที่อิงอังกฤษครั้งแรก พวกเขาน่าจะรู้สึกอย่างไร
Lisp ก็ยังเป็นดินแดนแห่งวงเล็บเหมือนเดิม :-)
ทำให้นึกถึง Easy Programming Language ของจีน
ลิงก์วิกิของ EPL
เมื่อประมาณ 15 ปีก่อน เด็กจีนจำนวนมากได้เรียนเขียนโปรแกรมครั้งแรกผ่านภาษานี้