คำถามติดแท็ก language-design

7
เหตุใดกระบวนทัศน์ของผู้ทำลายล้างวัตถุในภาษาที่รวบรวมขยะจึงหายไปอย่างแพร่หลาย?
กำลังมองหาข้อมูลเชิงลึกเกี่ยวกับการตัดสินใจเกี่ยวกับการออกแบบภาษาที่รวบรวมขยะ บางทีผู้เชี่ยวชาญด้านภาษาสามารถสอนฉัน ฉันมาจากพื้นหลัง C ++ ดังนั้นพื้นที่นี้ทำให้ฉันงุนงง ดูเหมือนว่าภาษาที่รวบรวมขยะสมัยใหม่เกือบทั้งหมดที่มีการสนับสนุนวัตถุ OOPy เช่น Ruby, Javascript / ES6 / ES7, Actionscript, Lua และอื่น ๆ จะไม่ใช้ destructor / finalize paradigm Python ดูเหมือนจะเป็นคนเดียวที่มีclass __del__()วิธีการ ทำไมนี้ มีข้อ จำกัด ด้านการทำงาน / ทางทฤษฎีในภาษาที่มีการรวบรวมขยะอัตโนมัติซึ่งป้องกันการใช้งานที่มีประสิทธิภาพของวิธีการ destructor / จบบนวัตถุ? ฉันพบว่าภาษาเหล่านี้ไม่ได้พิจารณาถึงความทรงจำเป็นอย่างยิ่งเพราะเป็นเพียงการจัดการทรัพยากร เกี่ยวกับซ็อกเก็ตตัวจัดการไฟล์สถานะแอปพลิเคชัน หากปราศจากความสามารถในการใช้ตรรกะที่กำหนดเองเพื่อล้างทรัพยากรที่ไม่ใช่หน่วยความจำและสถานะในการสรุปวัตถุฉันต้องทำให้แอปพลิเคชั่นของฉันมีmyObject.destroy()สไตล์การโทรที่กำหนดเองวางตรรกะการล้างข้อมูลนอก "คลาส" ของฉัน การประยุกต์ใช้กับการรั่วไหลของทรัพยากรเนื่องจากข้อผิดพลาดของมนุษย์มากกว่าจะถูกจัดการโดย gc โดยอัตโนมัติ การตัดสินใจออกแบบภาษาที่นำไปสู่ภาษาเหล่านี้ไม่มีวิธีใดในการดำเนินการตรรกะที่กำหนดเองในการกำจัดวัตถุคืออะไร? ฉันต้องจินตนาการว่ามีเหตุผลที่ดี ฉันต้องการเข้าใจการตัดสินใจทางเทคนิคและทางทฤษฎีที่ทำให้ภาษาเหล่านี้ไม่สนับสนุนการทำลายวัตถุ / การสรุป ปรับปรุง: …

3
เครื่องมือการเขียนโปรแกรมภาพทำไมพวกเขาไม่ทำงานกับ AST โดยตรง
ฉันพบเครื่องมือการเขียนโปรแกรมแบบโอเพ่นซอร์สหลายรายการเช่น Blockly และเพื่อน ๆ และโครงการอื่น ๆ ที่โฮสต์ที่ Github แต่ไม่พบสิ่งใดที่สามารถใช้งานได้โดยตรงกับแผนผังไวยากรณ์แบบนามธรรม ทำไมถึงเป็นอย่างนั้น? ฉันถามเพราะเมื่อฉันค้นพบว่าคอมไพเลอร์ทุกตัวมีขั้นตอนในกระบวนการรวบรวมซึ่งแยกวิเคราะห์ซอร์สโค้ดกับ AST มันชัดเจนสำหรับฉันว่าเครื่องมือการเขียนโปรแกรมแบบเห็นภาพบางอย่างสามารถใช้ประโยชน์จากสิ่งนี้เพื่อให้วิธีโปรแกรมเมอร์ เพื่อแก้ไข AST โดยตรงในลักษณะที่มองเห็นและเพื่อทำการปัดเศษจากต้นทางไปยังโหนดกราฟแล้วกลับไปยังแหล่งข้อมูลอีกครั้งเมื่อจำเป็น ตัวอย่างหนึ่งอาจคิดว่าจากJavaScript AST Visualizerไปจนถึงเครื่องมือการเขียนโปรแกรม JavaSript เสมือนจริงนั้นมีความแตกต่างไม่มากนัก แล้วฉันจะพลาดอะไร

4
มันสมเหตุสมผลไหมที่จะมีทั้งแนวคิดของ 'null' และ 'บางที'?
ในขณะที่สร้างไคลเอนต์สำหรับเว็บ APIใน C # ฉันพบปัญหาเกี่ยวกับnullค่าที่มันจะแสดงถึงสองสิ่งที่แตกต่างกัน: ไม่มีอะไรเช่นfooอาจหรือไม่มีbar ไม่รู้จัก : โดยค่าเริ่มต้นการตอบสนองของ API จะรวมเฉพาะชุดย่อยของคุณสมบัติเท่านั้นคุณจะต้องระบุคุณสมบัติเพิ่มเติมที่คุณต้องการ ไม่ทราบดังนั้นจึงหมายความว่าไม่ได้ขอคุณสมบัติจาก API หลังจากการค้นหาบางอย่างฉันพบเกี่ยวกับประเภทอาจ (หรือตัวเลือก) วิธีการใช้งานในภาษาที่ใช้งานได้และวิธีที่ "แก้ปัญหา" การแก้ปัญหาเป็นโมฆะโดยการบังคับให้ผู้ใช้คิดถึงการขาดค่าที่เป็นไปได้ แต่ทั้งหมดของทรัพยากรที่ผมพบพูดคุยเกี่ยวกับการเปลี่ยนnullด้วยบางที ฉันพบว่ามีเหตุผลสามประการที่มีค่าแต่ฉันไม่เข้าใจอย่างเต็มที่และส่วนใหญ่ที่กล่าวถึงในบริบทของ "มันเป็นสิ่งที่ไม่ดี" ตอนนี้ผมสงสัยว่าถ้ามันทำให้รู้สึกที่จะมีทั้งแนวคิดของnullและอาจจะเพื่อเป็นตัวแทนที่ไม่รู้จักและไม่มีอะไรตามลำดับ นี่เป็นตรรกะสามค่าที่ฉันอ่านหรือมีชื่ออื่นหรือไม่? หรือเป็นวิธีที่ตั้งใจจะทำรังในบางทีใน?

3
Downcasting อัตโนมัติโดยการอนุมานประเภท
ในจาวาคุณต้องส่งอย่างชัดเจนเพื่อลดตัวแปร public class Fruit{} // parent class public class Apple extends Fruit{} // child class public static void main(String args[]) { // An implicit upcast Fruit parent = new Apple(); // An explicit downcast to Apple Apple child = (Apple)parent; } มีเหตุผลสำหรับข้อกำหนดนี้นอกเหนือจากข้อเท็จจริงที่ว่า Java ไม่ได้ทำการอนุมานประเภทใด? มี "gotchas" ในการติดตั้ง downcasting อัตโนมัติในภาษาใหม่หรือไม่? ตัวอย่างเช่น …

1
ประเภทเป็นพลเมืองชั้นหนึ่ง
มาจากพื้นหลัง C ++ ฉันไม่เข้าใจว่าทำไมคนเราต้องการนิพจน์ประเภท / ประเภทในฐานะพลเมืองชั้นหนึ่ง? ภาษาเดียวที่ฉันรู้ว่ารองรับคุณสมบัตินี้คือ Aldor มีใครบ้างที่มีวรรณกรรมเกี่ยวกับประเภทเป็นพลเมืองชั้นหนึ่งหรือรู้เหตุผลว่าทำไมจึงมีประโยชน์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.