-
ฟีเจอร์ Raku ที่ไม่เหมือนใคร 5 อย่าง
- Raku เปรียบเสมือนห้องทดลองสำหรับการทดลองฟีเจอร์ด้านภาษาที่หลากหลาย มีทั้งโมเดล concurrency หลายแบบและฟีเจอร์ต่าง ๆ มากมาย โดยลักษณะการทำงานร่วมกันของแต่ละฟีเจอร์นั้นมีเอกลักษณ์เฉพาะตัว
-
Junctions
- Junctions ใช้แทนการซ้อนกันของค่าที่เป็นไปได้ และใช้ในการแสดงนิพจน์เชิงตรรกะ
- ระบบจะนำการดำเนินการไปใช้กับทุกค่า แล้วจึงแปลงผลไปใช้เป็น boolean
- Raku ใช้ junctions เพื่อแสดงตัวบ่งปริมาณได้อย่างสละสลวย
-
Whatevers
* คือสัญลักษณ์ "whatever" ที่ทำหน้าที่ได้หลากหลาย
- ในช่วงหรือซีเควนซ์ มันหมายถึง "unbound" และสามารถแปลงเป็นฟังก์ชันนิรนามได้
- เมธอดหลายตัวของ Raku ถูก overload ให้รับฟังก์ชันได้ จึงทำให้สิ่งนี้มีประโยชน์มาก
-
Regular Expressions
- Raku มีไวยากรณ์แบบใหม่ที่แตกต่างจาก regular expression แบบ POSIX และแบบเข้ากันได้กับ Perl ที่มีอยู่เดิม
- สามารถนำ regular expression มาประกอบเข้าด้วยกัน แล้วแยกเป็นส่วนย่อยที่เรียบง่ายและอ่านง่ายกว่าเดิมได้
- รองรับไวยากรณ์สำหรับการแยกวิเคราะห์เป็นฟีเจอร์พื้นฐานของภาษา
-
Hyperoperators
l>>.method โดยพื้นฐานแล้วคล้ายกับ map และจะไล่ลงไปแบบ recursive จนถึงรายการย่อย
- ไฮเปอร์โอเปอเรเตอร์แบบไบนารีจะนำการดำเนินการไปใช้กับสองลิสต์แบบจับคู่ทีละสมาชิก
- มีประโยชน์ในการรันสูตรเดียวกันกับอินพุตหลายชุด
-
Pair Syntax
- แฮชของ Raku ประกอบด้วยคู่
key => value และสามารถระบุคู่ได้อย่างกระชับด้วย "colon syntax"
:key และ :!key จะถูกแมปเป็น key => True และ key => False ตามลำดับ
- ทำให้การตั้งค่าเมธอดเขียนได้กระชับมาก
-
ห้องทดลองรุ่นถัดไป: Slangs และ RakuAST
- Slangs เป็นความสามารถในการปรับเปลี่ยนไวยากรณ์ของ Raku ทำให้สามารถแก้ไขไวยากรณ์ของลูป เปลี่ยนตัวระบุ และอื่น ๆ ได้
- RakuAST ทำให้สามารถพาร์สทุกนิพจน์ของ Raku เป็น AST ได้จากภายใน Raku เอง
-
การทดลองเพิ่มเติม
- Raku มีชุดโมดูลจากภายนอกที่ติดตั้งมาให้ล่วงหน้าผ่านการติดตั้ง "Rakudo Star"
- นี่คือจุดสมดุลที่ยอดเยี่ยมระหว่างภาระในการดูแล standard library ขนาดใหญ่ กับภาระของผู้ใช้ในการค้นหาแพ็กเกจที่เหมาะสม
-
บล็อกแนะนำ
- บล็อกของ Elizabeth Mattijsen และ Codesections มีข้อมูลจำนวนมากเกี่ยวกับภายในของ Raku
- Raku Advent Calendar เป็นแหล่งข้อมูลชั้นยอดเกี่ยวกับเทคนิค Raku ขั้นสูง
1 ความคิดเห็น
ความเห็นจาก Hacker News
มีการแนะนำฟีเจอร์ composable regular expressions ที่นำไปทำใน JavaScript แบบแยกอิสระ ซึ่งเป็นไลบรารีที่ถูกใช้บ่อยในหลายโปรเจกต์ ฟีเจอร์นี้ช่วยให้ความรู้สึกใกล้เคียงกับการใช้ parser แบบ first-class ภายในภาษาได้มากขึ้นเล็กน้อย พร้อมยกตัวอย่างการทำ media type parsing
มีความเห็นว่าอยากออกจากวงการไปก่อนที่จะต้องมาดูแลรักษาโค้ดเบส Raku
ปัญหาเรื่องความเร็วของ Raku ยังไม่ได้รับการแก้ไข และ Raku รุ่นล่าสุดยังใช้เวลาพาร์สไฟล์ล็อกนานกว่า Python 3.13 อยู่ 6.5 เท่า
ฟีเจอร์หลักของ Raku คือ CLI และ grammar
Hyper ดูเหมือนเป็นเวอร์ชันที่เฉพาะกิจมากกว่าของ recursion schemes และคล้ายกับ _ ของ Scala ผู้แสดงความเห็นบอกว่าชอบ Scala เพราะ lambda และคิดว่าทุกภาษาควรนำสิ่งที่คล้ายกันมาใช้
มีการตั้งข้อสงสัยว่าเหตุใด
(2, 30, 4, 50).map(* + *)จึงคืนค่าเป็น(32, 45)ทั้งที่ควรคืนค่า(32, 54)หรือไม่ ซึ่งอาจเกิดจากความแตกต่างของวิธีเขียนตัวเลขในบางประเทศมีความเห็นว่า Perl ตอนนี้กลายเป็นประตูสู่ภาษาตระกูล APL ไปแล้วหรือไม่
มีการแสดงความประหลาดใจที่
(2,4,8...*)[17]คืนค่าเป็น 262144มีผู้ใช้งาน Raku ในสภาพแวดล้อมจริงและมองว่าเป็นภาษาที่เหมาะกับงานประมวลผลข้อความมากที่สุด การสร้าง parser ทำได้ดีมาก และน่าแปลกใจที่มันไม่ได้เป็นภาษาที่เหมาะที่สุดสำหรับการสร้าง LLM text pipeline
ติดตามโปรเจกต์นี้มานาน เห็นว่าน่าสนใจ แต่ก็น่าเสียดายที่ Perl 6 ถูกขัดขวางอย่างมากเพราะโปรเจกต์นี้