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

Hurl, ภาษาที่ผิดปกติอย่างยิ่ง

ภาพรวม

  • Hurl เป็นภาษาที่สร้างขึ้นเพื่อสำรวจแนวคิดของภาษาที่ใช้การจัดการข้อยกเว้นเป็นกลไกควบคุมการไหลเพียงอย่างเดียว
  • ภาษานี้เริ่มต้นจากบทสนทนาระหว่าง Nicole Tietz-Sokolskaya และเพื่อน ๆ ที่ Recurse Center
  • เว็บไซต์นี้มีเอกสารการใช้งาน Hurl, ตัวอย่าง, คู่มือดีบัก และ FAQ

การติดตั้งและการใช้งาน

  • ซอร์สโค้ดของ Hurl มีให้ในรีโพซิทอรีของ Hurl
  • หากพบบั๊กหรือข้อผิดพลาด ยินดีรับแพตช์ทางอีเมล แต่ต้องโอนสิทธิทั้งหมดของแพตช์นั้น
  • ทั้งนี้เพื่อคงความสามารถในการรีไลเซนส์และการออกไลเซนส์เชิงพาณิชย์

ไวยากรณ์และปรัชญาของ Hurl

  • Hurl เป็นภาษาที่มีการจัดการข้อยกเว้นเป็นศูนย์กลาง
  • การควบคุมการไหลทั้งหมดถูกทำผ่านการจัดการข้อยกเว้นเท่านั้น

แพตเทิร์นทั่วไป

  • จัดการการไหลของโปรแกรมผ่านการจัดการข้อยกเว้น
  • ไม่ใช้โครงสร้างควบคุมแบบดั้งเดิม (เช่น if, for)

ไลบรารีมาตรฐาน

  • Hurl มีไลบรารีมาตรฐานให้ใช้งาน
  • รวมฟังก์ชันหลากหลายที่อิงกับการจัดการข้อยกเว้น

ตัวอย่าง

  • มีตัวอย่างโค้ดหลากหลายให้ศึกษา
  • ช่วยให้เข้าใจวิธีใช้งาน Hurl ได้ง่ายขึ้นผ่านตัวอย่างโค้ด

การดีบักและข้อผิดพลาด

  • มีคู่มือการดีบักให้ใช้งาน
  • อธิบายวิธีจัดการข้อผิดพลาดอย่างมีประสิทธิภาพ

FAQ

  • มีคำตอบสำหรับคำถามที่พบบ่อย
  • ครอบคลุมปัญหาทั่วไปที่อาจเกิดขึ้นระหว่างใช้งาน Hurl

คำชื่นชมต่อ Hurl

  • Erika Rowland: "เจ้าสิ่งอัปลักษณ์นี่ทั้งสวยงาม และฉันไม่อยากแตะต้องมันเลยสักนิด ฉันไม่ต้องการให้ชื่อของฉันไปเกี่ยวข้องกับมัน"
  • Nicole Tietz-Sokolskaya: "ฉันตัดสินใจทำให้ภาษานี้กลายเป็นจริง ขอโทษด้วย"
  • Mary McGrath: "🤮" (นี่ใช้เป็นคำอ้างอิงได้ไหม?)
  • nate (@nmoo@mas.to): "รับรองความเพี้ยน™!"

ซอร์สโค้ด

  • ซอร์สโค้ดของ Hurl และเว็บไซต์นี้มีให้ในรีโพซิทอรีของ Hurl
  • ยินดีรับแพตช์ทางอีเมล แต่ต้องโอนสิทธิทั้งหมด

ใบอนุญาต

  • โปรเจกต์นี้สามารถใช้งานได้ภายใต้หนึ่งในสามใบอนุญาตต่อไปนี้:
    • AGPL-3.0
    • GAL-1.0 (Gay Agenda License)
    • ใบอนุญาตเชิงพาณิชย์
  • สามารถเลือกใช้ได้หนึ่งแบบจากทั้งสามใบอนุญาต

ความเห็นของ GN⁺

  • ภาษาแบบยึดข้อยกเว้นเป็นศูนย์กลาง: Hurl ใช้แนวทางที่ไม่เหมือนใคร โดยวางการจัดการข้อยกเว้นไว้เป็นแกนหลักของการควบคุมการไหล แทนที่โครงสร้างควบคุมแบบดั้งเดิม สิ่งนี้บังคับให้นักพัฒนาต้องคิดในรูปแบบใหม่
  • คุณค่าด้านการเรียนรู้: Hurl อาจช่วยให้เข้าใจความสำคัญและวิธีใช้การจัดการข้อยกเว้นได้ลึกซึ้งขึ้น โดยเฉพาะการชี้ให้เห็นอย่างชัดเจนถึงปัญหาที่เกิดจากการใช้ข้อยกเว้นอย่างไม่เหมาะสม
  • ประเด็นด้านการใช้งานจริง: การใช้ Hurl ในงานจริงอาจเป็นเรื่องท้าทาย สำหรับนักพัฒนาที่คุ้นเคยกับโครงสร้างควบคุมแบบดั้งเดิม มันอาจเป็นกำแพงใหญ่
  • ความร่วมมือกับชุมชน: ซอร์สโค้ดของ Hurl เปิดให้ใช้งานแบบโอเพนซอร์ส และสนับสนุนการมีส่วนร่วมจากชุมชน ซึ่งอาจส่งผลดีต่อการพัฒนาโปรเจกต์และการแก้ไขบั๊ก
  • ทางเลือกด้านใบอนุญาต: การมีใบอนุญาตหลายแบบช่วยเพิ่มทางเลือกให้ผู้ใช้ และมีส่วนช่วยเพิ่มความยืดหยุ่นให้กับโปรเจกต์

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

 
GN⁺ 2024-05-27
ความคิดเห็นจาก Hacker News

สรุปรวมความคิดเห็นจาก Hacker News

  • การบังคับใช้ namespace และ import ตอนออกแบบภาษาโปรแกรมเป็นเรื่องสำคัญ

    • เมื่อบังคับใช้ namespace และ import จะทำให้เข้าใจโค้ดได้ง่ายขึ้น
    • ควรหลีกเลี่ยงการอนุญาตให้เกิด side effect ในระดับ top-level
  • ความเห็นเกี่ยวกับการจัดการข้อยกเว้น

    • การจัดการข้อยกเว้นทำให้สัญญาระหว่างผู้เรียกและฟังก์ชันที่ถูกเรียกซับซ้อนขึ้น
    • การจัดการข้อยกเว้นผ่านค่าที่ส่งกลับแบบ Go หรือ Rust ดีกว่า
    • ถ้า IDE สามารถตรวจจับข้อยกเว้นที่ยังไม่ได้จัดการทั้งหมดแบบไดนามิก และช่วยให้หาจุดที่เกิดข้อยกเว้นได้ง่าย ก็น่าจะดี
  • ตัวอย่างการใช้ toss

    • โดยหลักแล้ว toss ใช้เมื่อฟังก์ชันต้องส่งกลับหลายค่า
    • นอกจากกรณีที่ไม่มีการทำงานต่อทันทีแล้ว ก็ไม่ได้มีประโยชน์มากนัก
  • ภาษา Hurl และระบบ condition

    • Hurl คล้ายกับระบบ condition ของ Smalltalk/CL
    • ระบบ condition มีตัวเลือกการเริ่มใหม่หลายแบบ
  • การใช้โดเมนส่วนขยาย .wtf

    • ถ้ามีสิ่งต่าง ๆ ใช้โดเมนส่วนขยาย .wtf มากขึ้น โลกก็น่าจะดีขึ้น
  • ภาษาที่คล้ายกับ algebraic effects

    • คล้ายกับ algebraic effects แบบอ่อน ๆ แต่ก็ยังน่าสนใจอยู่
  • ความรู้สึกที่ปะปนกันต่อภาษา Hurl

    • ไม่ชอบภาษา Hurl แต่ก็มีความสง่างามอยู่บ้างเล็กน้อย
    • อยากให้มีไวยากรณ์ที่แยกข้อยกเว้นที่ resume ได้กับข้อยกเว้นที่ resume ไม่ได้
    • standard library ไม่ควรถูกแทนที่ด้วยฟังก์ชันคืนค่าปกติ
  • ความแตกต่างระหว่าง toss กับ hurl

    • hurl สามารถถูกจับได้ แต่ toss จับไม่ได้
    • กังวลว่าถ้าใช้ Hurl มาก ๆ คนจะเรียกฉันว่า tosser
  • โครงสร้างภาษาของ toss

    • toss จะไล่สำรวจสแตกเพื่อหาตัวจัดการข้อยกเว้น แล้วกลับไปทำงานต่อเหมือนไม่มีอะไรเกิดขึ้น
    • สามารถฉีดพฤติกรรมเพิ่มเติมเข้าไปได้ตอนรันไทม์
    • ในโค้ดเชิงวัตถุ มักทำ dependency injection ผ่าน service constructor แต่ toss ใช้ toss handler แทน