ดูคำตอบของ jnthn สำหรับการสนทนาที่มีสิทธิ์เกี่ยวกับสิ่งที่เกิดขึ้นกับrebless
สิ่งที่ต้องทำ
มันทำงานได้ ... ตอนนี้มันไม่ได้ .. ข้อความแสดงข้อผิดพลาดไม่สมเหตุสมผล ... มันควรจะทำงานกับคลาสที่สืบทอดมา ... อย่างน้อยมันก็เป็น ... เอกสารไม่เป็นประโยชน์
นี้ (ยาวพิเศษ!) คำตอบอาจจะมีมูลค่าการอ่านสำหรับผู้ที่สนใจในการอภิปรายต่อไปของหลักการและการปฏิบัติของTDDวิธีการที่รองรับการทำงานกับการเขียนโปรแกรมภาษา Raku และสิ่งประดิษฐ์ที่เกี่ยวข้องเช่นคอมไพเลอร์และ Rakudo docs.raku.orgเนื้อหา .
คำตอบนี้มีโครงสร้างเป็นการตอบสนองเฉพาะต่อส่วนเฉพาะของคำถามดั้งเดิมของ Arne และความคิดเห็นที่พวกเขาเขียนเพื่อตอบคำถามรุ่นก่อนหน้านี้ ความตั้งใจของฉันคือการทำให้ Arne มีประโยชน์มากขึ้นในขณะที่หวังว่าจะยังคงมีประโยชน์ต่อผู้อื่น
Arne:รหัสที่ให้ไว้ในเธรดนี้ไม่ทำงานอีกต่อไป: ฉันจะ rebless วัตถุใน Raku ได้อย่างไร
ฉันได้อัปเดตคำตอบที่ยอมรับแล้วเพื่อเชื่อมโยงกับ SO นี้
Arne:ฉันเขียนโค้ดชิ้นนี้เมื่อปีที่แล้วและมันก็ใช้ได้แล้ว ตอนนี้มันไม่ได้
การเปลี่ยนแปลงที่เกี่ยวข้องถูกกล่าวถึงในเดือนเมษายน 2019ที่ jnthn เขียนว่า:
เมื่อเร็ว ๆ นี้ประเภทที่เป็นเป้าหมายของการrebless
ดำเนินการเริ่มต้องถูกสร้างขึ้นอย่างชัดเจนว่าเป็นประเภท Mixin เป้าหมายเพื่อช่วยในการปรับให้เหมาะสม ...
ในความคิดเห็น 11 วันที่ผ่านมาปิดปัญหา GH rakudo "Rebless เป็นประเภทที่กำหนดเองไม่ทำงานอีกต่อไป"เขาเขียน:
คุณจะต้องจัดให้มีการis_mixin
โต้แย้งชื่อที่ส่งไปยังClassHOW.new_type
... ไม่มีวิธีที่จะทำเช่นนั้นกับไวยากรณ์ของชั้นเรียนดังนั้นประเภทเป้าหมายของ rebless จะต้องมีการชุมนุมโดยใช้ MOP ด้วย
(คลิกที่ลิงค์ด้านบนเพื่อรับทราบวิธีการทำในสิ่งที่แนะนำ)
ปัญหานี้จะกล่าวถึงอีกเล็กน้อยในการทำงาน ... มันก็ไม่ได้ ... เอกสารประกอบ ... ควรเอกสารส่วนการโทรด้านล่าง
Arne:มันควรจะทำงานกับคลาสที่สืบทอดมา อย่างน้อยมันก็เป็น
ย่าง - The R epository oฉLL s PECเสื้อ ESTs - กำหนดรหัส Raku ควรจะทำ ( st of roa stสามารถอ่านได้เหมือน s upposed t o s.)
ในอีกข้อความเมษายน 2019 jnthn เขียนว่า:
Metamodel::Primitives.rebless
ไม่มีสเป็คก่อนหน้านี้สำหรับเป็น ฉันเพิ่มการแสดงนี้เพื่อให้มี ซึ่งหมายความว่าขณะนี้มีคำจำกัดความของสิ่งที่คาดว่าจะทำงาน
ความจริงที่ว่าพฤติกรรม Rakudo เป็น spec'd โดยชุดทดสอบปฏิบัติการเป็นส่วนพื้นฐานของ @ แนวทางของแลร์รี่เพื่อให้มั่นใจว่าจะทำงานได้อย่างน่าเชื่อถือ Raku [1]และมีความหมายที่ลึกซึ้ง[2]
ผลกระทบของการเปลี่ยนแปลงนี้กับโมดูลที่ใช้กันอย่างแพร่หลาย
นี่คือภาพรวมของผลกระทบของการเปลี่ยนแปลงนี้ที่เกิดขึ้นกับโมดูล Inline :: Perl5 ที่เป็นที่นิยม
ในเดือนเมษายน 2019 นักปรุงอาหารเปิดปัญหา rakudo GH เกี่ยวกับผลกระทบInline::Perl5
และฉันได้ดึงจุดเด่นของการแลกเปลี่ยนระหว่างนักชิมและเดือนกรกฎาคมด้านล่าง
(ฉันได้อธิบายบางสิ่งที่สำคัญในบริบทดั้งเดิม แต่เบี่ยงเบนความสนใจในบริบทของ SO นี้โปรดอย่าคิดว่าคุณมีความเข้าใจที่สมบูรณ์เกี่ยวกับบทสนทนาดั้งเดิมจากสารสกัดนี้หากสงสัยคลิกลิงค์ )
niner: TBH สิ่งที่ฉันทำที่นี่อาจจะเป็นเรื่องที่ไม่ดีอยู่เสมอ ... อาจเป็นได้ว่า ... ฉันสามารถกำจัด [มัน] ... จะดีแม้ว่าจะปรับใช้ Inline :: Perl5 แล้ว .
jnthn:Metamodel::Primitives.rebless
ไม่มีสเปคก่อนหน้านี้สำหรับเป็น ฉันได้เพิ่ม [a] spectest แล้วตอนนี้ก็มี ซึ่งหมายความว่าขณะนี้มีคำจำกัดความของสิ่งที่คาดว่าจะทำงานและ Inline :: Perl5 สามารถพึ่งพาได้
เนื่องจากพารามิเตอร์ที่ไม่รู้จักที่มีชื่อจะถูกละเว้น แต่:mixin
ไม่จำเป็นสำหรับรุ่น Rakudo รุ่นก่อนหน้าดังนั้นจึงเป็นไปได้ที่จะสร้าง Inline :: Perl5 รีลีสใหม่ที่สามารถทำงานกับเวอร์ชัน Rakudo ก่อนหน้านี้และรุ่นที่กำลังจะมาถึง กลับ compat
ฉันไม่คิดว่าจะมีวิธีใดที่จะทำให้ทุกอย่างทำงานได้ดีกับ Inline :: Perl5 รุ่นที่มีอยู่ ...
Niner:แต่น่าเสียดายที่ผ่าน:mixin
ไม่ได้ความช่วยเหลือในกรณีนี้เป็น rebless จะทำใน subclass Metamodel::Primitives.create_type
ของหนึ่งที่สร้างขึ้นผ่านทาง Perl6::ClassHOW
ประเภทรองใช้ปกติ
ฉันกำลังทำงานกับ refactor รายใหญ่เพื่อกำจัดแฮ็คที่ไม่มี rebless ในตอนแรก ฉันกำลังเปิดปัญหานี้อีกครั้งเพื่อให้ตัวจัดการการเผยแพร่ทราบว่าไม่มีการทำงาน Inline :: Perl5 สำหรับผู้สมัครรุ่น rakudo
jnthn:คุณสร้างคลาสนั้นด้วย MOP หรือไม่? คุณสามารถผ่าน:is_mixin
ไปได้Perl6::ClassHOW.new_type
ถ้าเป็นเช่นนั้น
niner:ไม่เป็นสำหรับสถานการณ์นี้:class Bar is Foo { }
ช่วยงานเอกสาร
ในความคิดเห็นด้านล่างคำตอบที่คุณเขียนนี้:
ฉันสามารถช่วยด้วยส่วนเอกสาร
ฟังดูแล้วว่าฉันชอบการตอบสนองที่เหมาะสมและมีประโยชน์ต่อปัญหาที่เป็นหัวใจของ SOQ ของคุณ ฉันหวังว่าเราโชคดีพอที่เรื่องนี้จะผ่านไป
ถ้านั่นช่วย
Imo การเขียนทางเทคนิคของคุณยอดเยี่ยมดังนั้นฉันหวังว่าผลลัพธ์สุดท้ายของคุณที่ทำงานร่วมกับผู้อื่นที่เกี่ยวข้องในการปรับปรุงนั้นจะเป็นสิ่งที่ยอดเยี่ยม
ข้อ จำกัด พื้นฐานเกี่ยวกับเนื้อหาของ docs.raku.org
ส่วนใหญ่ของเหตุผลที่ฉันเขียนส่วนที่เหลือของคำตอบที่กว้างขวางมากสำหรับคำถามที่ดูเหมือนง่าย ๆ นี้และเรียกคืนหลังจากเริ่มต้นเมื่อโจนาธานตอบมันก็คือการหารือเกี่ยวกับหลักการและการปฏิบัติของวิธีการTDDที่ทำงานภายใต้ ภาษาโปรแกรม Raku และส่วนที่เกี่ยวข้องเช่นคอมไพเลอร์ Rakudo และเนื้อหาdocs.raku.org
Aiui ความสัมพันธ์ที่พึงประสงค์ระหว่างวิธีที่สิ่งต่าง ๆ ควรทำงานใน Raku และวิธีที่พวกเขาทำงานจริง ๆ ใน Rakudo และสิ่งที่ควรบันทึกไว้ในdocs.raku.orgทำให้เดือดลงไปที่:
(ได้รับเวลาอาสาสมัครที่สนใจและฉันทามติมีบางครั้งมีข้อยกเว้นสำหรับการบันทึกพฤติกรรมของ Rakudo QA'd อย่างถูกต้องที่ไม่ครอบคลุมโดยย่างในการปฏิบัติในปัจจุบันนี้ดูเหมือนว่าจะหมายถึงพฤติกรรมของรุ่น Rakudo ใน Rakudo ดาวปล่อย)
เอกสารที่ไร้ประโยชน์
เอกสารไม่เป็นประโยชน์
ฉันถือว่านี่เป็นความคิดเห็นที่ยุติธรรม ทุกสิ่งที่พิจารณาแล้วเอกสารประกอบเหมือนเดิมเมื่อคุณเขียนคำถามของคุณไม่เป็นประโยชน์
เอกสารไม่มีประโยชน์ [ในปี 2561]
นี่คือคำสั่งที่แตกต่างกันมาก
ไม่มีรายการที่ครอบคลุมย่างเป็นrebless
ในช่วงเวลานั้น
หากหน้า docs.raku.org บนrebless
ได้อธิบายพฤติกรรมของมันเหมือนในปี 2018 แสดงว่ามันแย่กว่าไร้ประโยชน์เพราะจะแนะนำว่าพฤติกรรมปัจจุบันนั้นได้รับการสนับสนุนอย่างไม่ถูกต้อง ในความเป็นจริงมีขอบเขตสำหรับมันที่จะทำลายในรุ่นอนาคตของ Rakudo โดยไม่มีโอกาสที่เหมาะสมพฤติกรรมปี 2018 จะถูกเรียกคืนโดย devs หลัก และนี่ก็เกิดขึ้นจริง: พฤติกรรมที่ไม่ได้รับการสนับสนุนจากปี 2561 หยุดพักและไม่ได้รับสถานะ
ดังนั้นเมื่อได้รับฉันทามติเกี่ยวกับสิ่งที่อยู่ใน docs.raku.org และสิ่งที่ไม่ (ดูด้านบน) สิ่งที่มีประโยชน์ที่สุดที่rebless
หน้าเว็บสามารถทำได้ก็คือไม่รวมเอกสารrebless
เลยหรืออาจจะดีกว่าให้รวมหน้าไว้ด้วย ตรวจสอบให้แน่ใจว่าไม่ได้อธิบายพฤติกรรมของมัน สิ่งที่เป็นสถานการณ์: หน้าไม่อยู่; ไม่เป็นประโยชน์โดยตรง และนั่นคือเนื้อหาที่ดีกว่าไม่มีอะไร
(มันเป็นเรื่องง่ายที่จะจินตนาการถึงสิ่งต่าง ๆ ที่ดีขึ้นตัวอย่างเช่นถ้าหน้าเอกสารที่ทำหน้าที่รวมเปอร์เซ็นต์การบันทึกสถานะของการทดสอบครอบคลุมที่เกี่ยวข้องกับฟังก์ชันนั้นในเวอร์ชันของ Rakudo ใน Rakudo Star ล่าสุด 0% สามารถเบาะแสผู้อ่านได้ทันที ในการรับรู้ว่าฟังก์ชั่นนั้นไม่ได้ครอบคลุมด้วยการคั่วที่กล่าวว่าในขณะที่คุณลักษณะเอกสารนี้เป็นเรื่องง่ายที่จะจินตนาการใครจะนำไปใช้มันเป็นเรื่องง่ายที่จะจินตนาการว่ามันอาจใช้เวลาปีปฏิทินหรือมากกว่า และการทำงานร่วมกันเพื่อใช้ประโยชน์และปรับใช้ให้เป็นประโยชน์และชาวบ้านคิดว่าสิ่งอื่น ๆ มีความสำคัญมากกว่า)
มันใช้งานได้ ... ทันใดนั้นมันไม่ ... เอกสารประกอบ ... ควรบันทึกการโทร
มันทำงานได้
มันเป็น "โชค" มันใช้งานได้
ทันใดนั้นมันไม่ทำงานอีกต่อไป
เพราะ Rakudo ได้รับการปรับปรุง
เอกสาร ... ควรบันทึกการโทร
ตามที่อธิบายไว้ก่อนหน้านี้ aiui ความเห็นพ้องของชุมชนในปัจจุบันและ / หรือการปฏิบัติงานคือ: เอกสารที่ควรจัดทำเอกสารการโทรรุ่นเฉพาะคือพฤติกรรมการย่างสำหรับรุ่น Rakudo ใน Rakudo Star ล่าสุด; และพฤติกรรมของเอกสาร MAY ในเวอร์ชันอื่น
และไม่อ้างถึงอย่างอื่น
Aiui, ฉันทามติปัจจุบันและ / หรือการปฏิบัติงานคือสิ่งที่บางคนอาจคิดว่าการมีส่วนร่วมของเอกสาร "อ่อนแอ" เช่นเนื้อหาสั้น ๆ เป็นลายลักษณ์อักษรรีบและ / หรือการเชื่อมโยงนอกเอกสารที่อาจแนะนำถ้าอาสาสมัครรู้สึกว่าการเปลี่ยนแปลงทันที ความกังวลบางอย่างที่เกิดขึ้นโดยผู้ใช้ (เช่น SO นี้) และการทำให้การเปลี่ยนแปลง "อ่อนแอ" จะดีกว่าการไม่ทำอะไรเลย แน่นอนคุณสามารถทำ PR เพื่อปรับปรุง (หรือเปลี่ยนกลับหากคุณรู้สึกว่าการเปลี่ยนแปลงนั้น "อ่อนแอ" มันทำให้เรื่องแย่ลง)
การอ้างอิงถึงการเปลี่ยนแปลงในปี 2019.11 คือการหยุดนับ 7 เดือนโดยฉัน
(มันก็เป็นเช่นนั้นด้วยการนับของฉันเช่นกันแม้ว่าฉันจะเห็นคอมไพเลอร์ที่อ้างว่าเป็น 2019.03.1 โดยมีพฤติกรรมหยุดพักเหมือนกัน[3] )
ฉันคิดว่า JJ เปลี่ยนเอกสารและเขาเพิ่งตีความความคิดเห็นของ jnthn เกี่ยวกับวิธีปรับให้เข้ากับการเปลี่ยนแปลง ฉันคิดว่ามันดีกว่าไม่มีอะไร แต่หวังเป็นอย่างยิ่งว่าจะได้รับการอัปเดต :)
เชิงอรรถ
[1]ต่อไปนี้จะได้รับการกล่าวว่าไม่กี่นาทีหลังจากที่ลาร์รีได้ประกาศโครงการแรกที่นำไปสู่ Raku ใน2000 "รัฐของหัวหอม" ของเขาคำพูด :
คำถาม: [Raku] จะมีรายละเอียดหรือไม่
Larry: สิ่งที่เราต้องการเน้นเป็นพิเศษ ... อาจไม่มากนัก [การออกแบบภาษา] ในการพัฒนาแบบทดสอบการถดถอยปัจจุบันของเรา ... เป็นการทดสอบการตรวจสอบความถูกต้องของภาษาที่แท้จริงหมายถึงและออกไปสำรวจทุกซอกทุกมุม และ crannies แล้วพูดว่า“ นี่คือ [Raku] นี่ไม่ใช่ [Raku]” แล้วจริงๆแล้วเรามีสเปคที่เครื่องอ่านได้ และสำหรับฉันแล้วมันมีความสำคัญมากกว่าการใช้คำฟุ่มเฟือยในสิ่งที่มนุษย์อ่านได้
[2]แน่นอนการคั่วจะทำได้ดีสำหรับผู้ใช้ที่กำหนดหากการทดสอบนั้นครอบคลุมเพียงพอกับความต้องการของผู้ใช้ ปัญหาของ Arne แสดงให้เห็นว่าหลุมที่ครอบคลุมสามารถสร้างความประหลาดใจได้อย่างไร สำหรับการอภิปรายของหลุมเหล่านี้เป็นพวกเขายืนอยู่ในปี 2018 ให้ดูในรายละเอียด, รุ่นการเปลี่ยนแปลงและความเสียหาย ข่าวดีก็คือว่าการคั่วเป็นเพียงการทดสอบหน่วยจำนวนมากที่เขียนใน Raku เพื่อทดสอบว่าการแสดงออกหรือการสร้างที่มีค่าเฉพาะทำในสิ่งที่เฉพาะเจาะจง ดังนั้นจึงเป็นเรื่องง่ายสำหรับบุคคลหรือองค์กรที่จะมีส่วนร่วมในการทดสอบใหม่เพื่อปรับปรุงการครอบคลุมการทดสอบ และทั้งหมดนี้อยู่ภายใต้การควบคุมเวอร์ชัน (git) ดังนั้นแท็กดาวน์สตรีมที่กำหนดเองสาขาและส้อมจะทำงานได้อย่างยั่งยืนและสามารถจัดการได้ (อันที่จริงว่าเป็นวิธีใหม่รุ่นภาษา ( Christmas
, Diwali
, Eid
(?) ฯลฯ ) มีการจัดการ.)
[3]ผมเคยเห็นความพยายามที่จะ rebless คลาสใหม่สร้างขึ้นโดยใช้ปกติnewclass is oldclass
ไวยากรณ์ทั้งการทำงาน (แล็ปท็อปของฉัน)และไม่ได้ทำงาน (ใน repl.it)2019.03.1
โดยใช้คอมไพเลอร์ที่อ้างว่าเป็น (presumbly repl.it ติดตั้งรุ่นของซอร์สโค้ดคอมไพเลอร์หรือไบนารีที่คอมไพล์จากมันนำมาจากหัวหน้าต้นแบบหลังจากอัปเดตเวอร์ชันของคอมไพเลอร์2019.03.1
แล้วด้วยการเปลี่ยนแปลงที่เกิดขึ้นฉันทราบว่า repl.it สวรรค์ ' ฉันไม่ได้เผยแพร่แบบออนไลน์ raku replic - ฉันค้นพบโดยไม่ได้ตั้งใจ - ดังนั้นจึงไม่มีอะไรที่ไม่ดีเลยเกี่ยวกับสถานการณ์นี้ แต่มันเสริมให้ฉันสำหรับความต้องการ$RAKU.compiler.verbose-config
วิธีที่ใช้ในผลงานที่ส่งออก / เสียที่ฉันเพิ่งเชื่อมโยง)