10 คะแนน โดย ffdd270 2022-06-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

รีวิวภาษาโปรแกรม V


  • นี่คือบทความรีวิวที่ผู้เขียนทดสอบฟีเจอร์ต่าง ๆ ที่ภาษา V เคยโฆษณาไว้ด้วยตนเองในปี 2022 ซึ่งผ่านมาหลายปีหลังจากภาษา V เปิดตัว
  • ผู้เขียนแบ่งผลการประเมินฟีเจอร์เป็น ใช้งานไม่ได้, คำเตือน, และใช้งานได้ โดยด้านล่างคือผลลัพธ์ของรายการประเมินนั้น ตัวอย่างโค้ดสำหรับการประเมินและเหตุผลประกอบทั้งหมดอยู่ในเนื้อหาหลัก
  • รายการด้านล่างนี้เป็นการแปลระหว่างฝึกภาษาอังกฤษ จึงอาจมีข้อผิดพลาดด้านข้อเท็จจริง โปรดใช้เพื่อการอ้างอิงเท่านั้น

  • ภาษาที่เรียบง่ายและดูแลรักษาง่าย
    • เป็นข้ออ้างเชิงอัตวิสัย
    • N/A

ความปลอดภัย

  • ไม่มี null
    • ภาษา V สามารถสร้าง null pointer (V reference) ได้โดยไม่มี compiler error หรือ warning
    • ไม่รองรับ
  • ไม่มี undefined value
    • สามารถอ่านหน่วยความจำที่ยังไม่ได้ initialize ได้โดยไม่มี compiler error หรือ warning
    • ไม่รองรับ
  • ไม่มี undefined behavior
    • คอมไพเลอร์ V ไม่ได้ป้องกันการเขียน UB ได้ 3 รูปแบบที่แตกต่างกัน และ UB ก็เกิดขึ้นจริง
    • ไม่รองรับ
  • ไม่มี variable shadowing (ปรากฏการณ์ที่ชื่อถูกบังเมื่อมีชื่อเดียวกันในคนละ namespace)
    • ไม่สามารถบังตัวแปร local ได้
    • ไม่รองรับ
  • การตรวจ bounds
    • มีการตรวจพื้นฐานอยู่บ้าง แต่สามารถ bypass ได้อย่างง่ายดาย
    • คำเตือน
  • ตัวแปรเป็นค่าคงที่โดยปริยาย
    • ตัวแปรไม่ได้เป็นค่าคงที่ที่มีความหมายจริง ๆ สามารถเปลี่ยนแปลงค่าคงที่ต้นฉบับได้อย่างง่ายดายโดยกำหนด reference แบบค่าคงที่ให้กับตัวแปรที่ประกาศเป็น mut แล้วแก้ไขตัวแปรนั้น
    • ไม่รองรับ
  • ฟังก์ชันบริสุทธิ์เป็นค่าปริยาย
    • ข้ออ้างนี้ไม่มีความหมาย เพราะเป็นการนิยามความบริสุทธิ์ใหม่ให้หมายถึงความไม่บริสุทธิ์
    • (ผู้เขียนชี้ว่า การรองรับฟังก์ชัน I/O นั้นโดยเนื้อแท้ย่อมไม่บริสุทธิ์อยู่แล้ว และแม้เอกสารจะบอกว่าฟังก์ชันทั้งหมดยกเว้น I/O เป็นฟังก์ชันบริสุทธิ์ แต่เขาระบุว่าเมื่อสามารถเรียกฟังก์ชัน I/O ได้ ฟังก์ชันเหล่านั้นก็ไม่บริสุทธิ์แล้ว จึงดูเหมือนเขาหมายความว่าความหมายเดิมถูกกลบไป ในเนื้อหาหลักมีตัวอย่างตลก ๆ ที่ฟังก์ชันบริสุทธิ์ปล่อยค่าที่ไม่บริสุทธิ์ออกมา)
    • ไม่รองรับ
  • struct เป็นค่าคงที่โดยปริยาย
    • ได้พิสูจน์ไปแล้วด้านบนว่าสามารถหลบเลี่ยงตัวแปรค่าคงที่ได้
    • ไม่รองรับ
  • มีการบังคับตรวจ error สำหรับ Option และค่าผลลัพธ์ของมัน
    • ทำงานตามที่โฆษณาไว้
  • Sum types (เป็นไวยากรณ์แบบ type MyType = string | int)
    • โดยทั่วไป Sum Types ดูเหมือนจะทำงานได้ แต่มีปัญหาในการ implement ภายใน (ด้วยการสร้าง type เพิ่มอีกสองตัว ทำให้สามารถใช้ reference ที่ภาษา V ปกติห้ามไว้เป็น Sum Types ได้)
    • คำเตือน
  • การทำให้เป็นทั่วไป (Generics)
    • มี implementation พื้นฐานอยู่ แต่เต็มไปด้วยบั๊กอย่างมาก และดูเหมือนไม่สอดคล้องเลยกับเรื่องความปลอดภัยและประสิทธิภาพของคอมไพเลอร์ที่มันยกขึ้นมาเน้นเอง
    • ไม่รองรับ
  • ไม่มี global variable
    • V ไม่ได้ป้องกันการสร้างหรือเปลี่ยนแปลงสถานะที่ถูกแชร์ทั่วโลกในทางที่มีความหมายแต่อย่างใด
    • ไม่รองรับ

ประสิทธิภาพ

  • เร็วเท่า C (คอมไพเลอร์ backend หลักของ V คือโค้ดภาษา C ที่มนุษย์อ่านได้)
    • ข้ออ้างเรื่องประสิทธิภาพของ V ดูเหมือนยังไม่ได้รับการพิสูจน์
    • ไม่รองรับ
  • ทำงานร่วมกับ C ได้โดยไม่มีค่าใช้จ่ายเพิ่มเติม
    • ทำงานตามที่โฆษณาไว้
  • ลดการ allocation ให้ต่ำที่สุด
    • เป็นข้ออ้างเชิงอัตวิสัย
    • N/A. (ผู้เขียนแสดงให้เห็นว่าเมื่อโค้ด V ที่ประกาศ int ถูกแปลเป็นภาษา C ผลลัพธ์ในฝั่ง C กลับเป็น int ที่ถูก malloc)
  • มี serialization ในตัวโดยไม่ต้องใช้ runtime reflection
    • ทำงานตามที่โฆษณาไว้
  • คอมไพล์เป็น native binary ที่ไม่มี dependency ใด ๆ
    • ดูเหมือนว่า V ยังทำข้ออ้างนี้ไม่สำเร็จ แต่ในภาพรวมก็มีความจริงอยู่บ้างว่าโปรแกรม V ค่อนข้างพึ่งพาตัวเองได้และมีขนาดเล็ก
    • คำเตือน

คอมไพล์เร็ว

  • V คอมไพล์ได้ 1 ล้านบรรทัดต่อวินาที และต่อหนึ่ง CPU core
    • คอมไพเลอร์ V ยังไปไม่ถึงระดับประสิทธิภาพตามที่อ้างไว้เลย (แม้แต่บนเว็บไซต์ benchmark ของคอมไพเลอร์ V เองก็อยู่ที่ประมาณการคอมไพล์โค้ด V 200,000 บรรทัด)
    • ไม่รองรับ
  • V เขียนด้วย V และสามารถคอมไพล์ตัวเองได้ในเวลาต่ำกว่า 1 วินาที
    • ทำงานตามที่โฆษณาไว้
  • การจัดการหน่วยความจำแบบนวัตกรรม
    • ข้ออ้างของ V ไม่มีหลักฐานรองรับที่ดี และ implementation ที่มีอยู่ในปัจจุบันก็ไม่อาจอธิบายได้ว่าเป็นนวัตกรรม
    • ไม่รองรับ

1 ความคิดเห็น

 
ffdd270 2022-06-23

อันที่จริงเป็นที่รู้กันทั่วไปว่า V ยังอีกไกล แต่บทความนี้เขียนกระบวนการพิสูจน์ว่า "ยังอีกไกล" ไว้ได้ดีมาก ลองเลือกประเด็นที่คุณสนใจจากรายการ แล้วตรวจดูการพิสูจน์ในส่วนนั้นสักครั้งดู