1 คะแนน โดย GN⁺ 2024-06-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เปิดตัว 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 ใหม่และฟังก์ชันเลื่อนวันที่

  • Elixir v1.17 นำเสนอประเภทข้อมูล Duration และ API สำหรับเลื่อนวันที่ เวลา และวันที่พร้อมเวลาไปตามช่วงเวลาที่กำหนด
  • ตัวอย่าง:
    iex> Date.shift(~D[2016-01-31], month: 2)
    ~D[2016-03-31]
    
  • Duration เป็นสิ่งสำคัญสำหรับการสร้างแบบจำลองช่วงเวลา เหตุการณ์ที่เกิดซ้ำ และตารางเวลา
  • สำหรับ DateTime นั้น Elixir จัดการการเปลี่ยนเขตเวลาได้อย่างถูกต้อง

การเปลี่ยนแปลงสำคัญอื่น ๆ

  • เพิ่มฟังก์ชัน 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 ความคิดเห็น

 
GN⁺ 2024-06-13
ความเห็นจาก 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" หมายถึงอะไร แม้จะสนใจภาษาโปรแกรมมาก แต่เพิ่งเคยเจอคำนี้เป็นครั้งแรก