มันเป็นอัตวิสัยเล็กน้อย แต่ฉันหวังว่าจะได้รับความเข้าใจที่ชัดเจนขึ้นว่าปัจจัยใดที่ทำให้ผู้ปฏิบัติงานชัดเจนในการใช้กับป้านและยาก ฉันกำลังพิจารณาการออกแบบภาษาเมื่อเร็ว ๆ นี้และสิ่งหนึ่งที่ฉันมักจะวนเวียนอยู่รอบ ๆ คือเมื่อใดที่จะทำให้การดำเนินงานที่สำคัญบางอย่างในภาษาเป็นผู้ดำเนินการและเมื่อใช้คำหลักหรือฟังก์ชั่น
Haskell ค่อนข้างมีชื่อเสียงในเรื่องนี้เนื่องจากตัวดำเนินการแบบกำหนดเองนั้นง่ายต่อการสร้างและบ่อยครั้งที่ชนิดข้อมูลใหม่จะมาพร้อมกับตัวดำเนินการหลายตัวเพื่อใช้กับมัน ยกตัวอย่างเช่นห้องสมุด Parsec มาพร้อมกับตัวดำเนินการมากมายสำหรับการรวมตัวแยกวิเคราะห์เข้าด้วยกันด้วยอัญมณี>.
และ.>
ฉันจำไม่ได้ว่าพวกเขาหมายถึงอะไรในตอนนี้ แต่ฉันจำได้ว่าพวกเขาทำงานได้ง่ายมาก พวกเขาหมายถึงจริง ฟังก์ชั่นการโทรเช่นleftCompose(parser1, parser2)
นี้ดีขึ้นหรือไม่ แน่นอนมากขึ้น verbose แต่ชัดเจนในบางวิธี
ตัวดำเนินการโอเวอร์โหลดในภาษา C เหมือนเป็นปัญหาที่คล้ายกัน แต่ conflated โดยปัญหาเพิ่มเติมของการบรรทุกเกินพิกัดความหมายของผู้ประกอบการที่คุ้นเคยเช่น+
ความหมายใหม่ที่ผิดปกติ
ในภาษาใหม่ใด ๆ ดูเหมือนว่าจะเป็นปัญหาที่ค่อนข้างยาก ยกตัวอย่างเช่นใน F # การคัดเลือกนักแสดงใช้ตัวดำเนินการแคสติ้งประเภทที่ได้มาในเชิงคณิตศาสตร์แทนที่จะใช้ไวยากรณ์ของการส่งรูปแบบ C # หรือสไตล์ VB verbose C #: (int32) x
VB: CType(x, int32)
F #:x :> int32
ในทางทฤษฎีภาษาใหม่อาจมีโอเปอเรเตอร์สำหรับการใช้งานในตัวส่วนใหญ่ แทนที่จะdef
หรือdec
หรือvar
สำหรับการประกาศตัวแปรทำไมไม่! name
หรือ@ name
หรือสิ่งที่คล้ายกัน แน่นอนว่ามันจะทำให้การประกาศสั้นลงตามด้วยการผูก: @x := 5
แทนที่จะเป็นdeclare x = 5
หรือlet x = 5
รหัสส่วนใหญ่จะต้องมีคำจำกัดความของตัวแปรจำนวนมากดังนั้นทำไมไม่
ผู้ประกอบการมีความชัดเจนและมีประโยชน์เมื่อใดและจะปิดบังเมื่อใด
+
สำหรับการต่อสตริงหรือ<<
สตรีม) ในทางตรงกันข้าม Haskell ผู้ปฏิบัติงานเป็นเพียงแค่ฟังก์ชั่นที่มีชื่อที่กำหนดเอง (นั่นคือไม่ได้รับภาระมากเกินไป) หรือเป็นส่วนหนึ่งของคลาสประเภทซึ่งหมายความว่าในขณะที่มันเป็น polymorphic มันทำสิ่งตรรกะเดียวกันสำหรับทุกประเภทและ แม้มีลายเซ็นประเภทเดียวกัน ดังนั้น>>
เป็น>>
สำหรับทุกประเภทและไม่เคยไปจะมีการเปลี่ยนแปลงเล็กน้อย