เปิดตัว Elixir v1.17: ประเภทแบบทฤษฎีเซต, ระยะเวลาในปฏิทิน, รองรับ Erlang/OTP 27
คำเตือนประเภทแบบทฤษฎีเซตแบบค่อยเป็นค่อยไป
- Elixir v1.17 นำเสนอประเภทแบบทฤษฎีเซตที่อนุมานประเภทจากแพตเทิร์นและใช้สิ่งนั้นเพื่อตรวจสอบประเภทของโปรแกรม
- ระบบประเภทนี้ช่วยให้ค้นหาข้อผิดพลาดและบั๊กในโค้ดเบสได้โดยไม่ต้องเปลี่ยนซอฟต์แวร์ที่มีอยู่เดิม
- ขณะนี้นักพัฒนาจะโต้ตอบกับระบบประเภทนี้ได้ผ่านคำเตือนเท่านั้น
- คำเตือนหลัก:
- การจับคู่แพตเทิร์นกับคีย์ที่ไม่มีอยู่
- การเข้าถึงคีย์ที่ไม่มีอยู่
- การเรียกฟังก์ชันในสิ่งที่ไม่ใช่โมดูล
- การเรียกสิ่งที่ไม่ใช่ฟังก์ชันเมื่อเรียกใช้ anonymous function
- การเปรียบเทียบระหว่าง struct
- การเปรียบเทียบระหว่างประเภทที่ไม่ทับซ้อนกัน
- การจับคู่แพตเทิร์นไบนารีที่ไม่ถูกต้อง
- ความพยายามในการ rescue exception struct ที่ไม่ได้ถูกกำหนด
- การเข้าถึงฟิลด์ที่ไม่ได้ถูกกำหนดใน exception ที่ถูก rescue
การรองรับ Erlang/OTP
- Elixir v1.17 รองรับ Erlang/OTP 27 และยุติการรองรับ Erlang/OTP 24
- นักพัฒนา Elixir ควรย้ายไปใช้ Erlang/OTP 26 ขึ้นไป
- ความสามารถหลักของ Erlang/OTP 27:
- เพิ่มโมดูล
json
- เพิ่ม process label (
proc_lib:set_label/1)
ประเภทข้อมูล Duration ใหม่และฟังก์ชันเลื่อนวันที่
การเปลี่ยนแปลงสำคัญอื่น ๆ
- เพิ่มฟังก์ชัน
Keyword.intersect/2,3 ใหม่
- เพิ่ม Mix profiler ใหม่
mix profile.tprof
- เพิ่ม guard
Kernel.is_non_struct_map/1
- Logger ของ Elixir จะจัดรูปแบบรายงานของ
gen_statem และรวม process label ของ Erlang/OTP 27
ความเห็นของ GN⁺
- ประเภทแบบทฤษฎีเซต: ระบบประเภทนี้อาจช่วยเพิ่มเสถียรภาพและความน่าเชื่อถือของโค้ดได้อย่างมาก โดยเฉพาะในโปรเจกต์ขนาดใหญ่
- รองรับ Erlang/OTP 27: การรองรับ Erlang/OTP เวอร์ชันล่าสุดมอบข้อดีหลายด้านทั้งด้านประสิทธิภาพและความสามารถ
- ประเภทข้อมูล Duration: ความสามารถในการเลื่อนวันที่โดยคำนึงถึงเขตเวลาและปฏิทินมีประโยชน์มากสำหรับแอปพลิเคชันอย่างการจัดการตารางเวลา
- ข้อจำกัดของระบบประเภท: ขณะนี้ยังไม่สามารถวิเคราะห์ประเภทข้ามขอบเขตของฟังก์ชันได้ ดังนั้นส่วนนี้ควรได้รับการปรับปรุงในอัปเดตถัดไป
- ผลิตภัณฑ์คู่แข่ง: เมื่อเทียบกับภาษาอื่นที่มีระบบประเภทแบบสแตติก เช่น TypeScript แนวทางของ Elixir มอบทั้งความยืดหยุ่นของภาษาไดนามิกและความปลอดภัยด้านประเภท
1 ความคิดเห็น
ความเห็นจาก Hacker News
ในช่วงไม่กี่ปีที่ผ่านมา ทีม Elixir และ Erlang ทำผลงานได้ยอดเยี่ยมมาก การมีส่วนร่วมจากผู้พัฒนาไลบรารีและผู้เขียนหนังสือก็มีมากเช่นกัน รู้สึกน่าสนใจมากเวลาได้ติดตามคอมมิตของ Elixir และ OTP ขอบคุณทุกคนที่เกี่ยวข้อง
เคยใช้ Elixir เป็นแบ็กเอนด์ในโปรเจกต์ส่วนตัว และเป็นประสบการณ์ที่ทั้งมีประสิทธิภาพและสนุกมาก ให้คะแนนเรื่องประสิทธิภาพของ LiveView สูงมาก แต่ถ้าเครือข่ายไม่เสถียรก็ไม่ค่อยเหมาะ ถึงแยก Elixir ออกจาก LiveView ก็ยังเป็นภาษาที่สนุกพอจะใช้งานอยู่ดี
กำลังพัฒนาสตาร์ทอัปแบบฟูลสแตกด้วย Elixir และมันเป็นเทคโนโลยีที่ยอดเยี่ยมที่สุดเท่าที่เคยใช้มา กำลังบอกต่อข้อดีของ Elixir ให้เพื่อน ๆ อยู่ หวังว่า RabbitMQ และไคลเอนต์จะทำงานบน OTP 27 ได้
ขอบคุณสำหรับผลงานเจ๋ง ๆ ของนักพัฒนา Elixir และ Erlang หวังว่าข้ออ้างเรื่อง "ไม่มี type" จะหายไป เพื่อให้ Elixir ถูกนำไปใช้งานในวงกว้างมากขึ้น ขอให้ทำผลงานดี ๆ แบบนี้ต่อไป
อ่านเรื่อง Elixir มาตลอด 10 ปีและรักภาษานี้มาก แต่ก็เลิกมองหางานสาย Elixir เพราะเงินเดือนต่ำกว่าภาษากระแสหลัก สำหรับตัวเองแล้ว เงินเดือนกับการได้ทำผลิตภัณฑ์เจ๋ง ๆ สำคัญกว่าสแต็กเทคโนโลยี ถึงอย่างนั้นการติดตาม Elixir อยู่ห่าง ๆ ก็ยังสนุก
ฟีเจอร์เจ๋งของรีลีสนี้คือการเพิ่ม
get_in/1เช่น ในget_in(struct.foo.bar)ถ้าfooคืนค่าnilก็จะไม่เกิดข้อผิดพลาดแม้จะพยายามเข้าถึงbarรีลีสนี้คือชิ้นส่วนสุดท้ายที่ผมรอคอย ตื่นเต้นกับขั้นต่อไปมาก ตอนนี้คิดว่าภาษานี้มีความสามารถครบถ้วน 100% แล้ว
คาดหวังกับระบบ type มาก จำได้ว่า José เคยอธิบายว่าเป็น "ระบบ type แบบค่อยเป็นค่อยไป" ซึ่งจะถูกเพิ่มเข้ามาเป็นลำดับ เลยสงสัยว่าขั้นต่อไปจะมีฟีเจอร์ที่เกี่ยวกับระบบ type ใหม่ออกมาไหม โดยเฉพาะการปรับแต่งประสิทธิภาพของคอมไพเลอร์แบบใหม่ที่รอคอยอยู่
ตื่นเต้นกับรีลีสนี้มาก หวังว่าจะมีการทุ่มทรัพยากรให้กับปลั๊กอิน Elixir บน IntelliJ เพราะไม่ค่อยสนุกกับการใช้ VSCode
สงสัยว่ามีใครรู้ไหมว่า "set-theoretic types" หมายถึงอะไร แม้จะสนใจภาษาโปรแกรมมาก แต่เพิ่งเคยเจอคำนี้เป็นครั้งแรก