อะไรคือข้อเสียของ Stackless Python? [ปิด]


127

ฉันเพิ่งอ่านเกี่ยวกับStackless Pythonและดูเหมือนว่าจะมีข้อดีมากมายเมื่อเทียบกับ vanilla cPython มันมีคุณสมบัติที่ยอดเยี่ยมเหล่านั้นเช่นการเรียกซ้ำแบบไม่สิ้นสุด, ไมโครเธรด, การต่อเนื่องและอื่น ๆ และในขณะเดียวกันก็เร็วกว่า cPython (ประมาณ 10% หากเชื่อว่าเป็นวิกิ Python ) และเข้ากันได้กับมัน (อย่างน้อยเวอร์ชัน 2.5, 2.6 และ 3.0)

ทั้งหมดนี้ดูดีเกินไปที่จะเป็นจริง อย่างไรก็ตามTANSTAAFLฉันไม่เห็นความกระตือรือร้นในการ Stackless ในชุมชน Python มากนักและPEP 219ไม่เคยเกิดขึ้นจริง ทำไมถึงเป็นเช่นนั้น? อะไรคือข้อเสียของ Stackless? โครงกระดูกอะไรซ่อนอยู่ในตู้เสื้อผ้าของ Stackless?

(ฉันรู้ว่า Stackless ไม่ได้เสนอการทำงานพร้อมกันจริง แต่เป็นวิธีที่ง่ายกว่าในการเขียนโปรแกรมพร้อมกันมันไม่ได้รบกวนฉันจริงๆ)

คำตอบ:


166

ฉันไม่รู้ว่า "Stackless เร็วขึ้น 10%" ใน Wiki นั้นมาจากไหน แต่ฉันก็ไม่เคยพยายามวัดตัวเลขประสิทธิภาพเหล่านั้นอีกเลย ฉันไม่สามารถคิดว่า Stackless ทำอะไรเพื่อสร้างความแตกต่างที่ยิ่งใหญ่ได้

Stackless เป็นเครื่องมือที่น่าทึ่งที่มีปัญหาในองค์กร / การเมืองหลายประการ

ครั้งแรกมาจากประวัติศาสตร์ Christian Tismer เริ่มพูดถึงสิ่งที่กลายเป็น Stackless ในที่สุดเมื่อ 10 ปีที่แล้ว เขามีความคิดว่าเขาต้องการอะไร แต่ก็อธิบายได้ยากว่าเขากำลังทำอะไรและทำไมผู้คนถึงใช้มัน ส่วนหนึ่งเป็นเพราะภูมิหลังของเขาไม่ได้มีการฝึกอบรม CS เกี่ยวกับแนวคิดเช่นโครูทีนและเนื่องจากการนำเสนอและการอภิปรายของเขามุ่งเน้นไปที่การนำไปใช้งานซึ่งเป็นเรื่องยากสำหรับทุกคนที่ไม่ได้มีความเข้าใจอย่างลึกซึ้งในการทำความเข้าใจวิธีใช้เป็นวิธีแก้ปัญหา ปัญหาของพวกเขา

ด้วยเหตุนี้เอกสารเบื้องต้นจึงไม่ดี มีคำอธิบายวิธีการใช้งานพร้อมสิ่งที่ดีที่สุดจากผู้ร่วมให้ข้อมูลบุคคลที่สาม ที่ PyCon 2007 ฉันได้พูดคุยเกี่ยวกับ " การใช้ Stackless " ซึ่งทำได้ค่อนข้างดีตามตัวเลขการสำรวจของ PyCon Richard Tew ทำงานได้อย่างยอดเยี่ยมในการรวบรวมสิ่งเหล่านี้อัปเดตstackless.comและรักษาการแจกจ่ายเมื่อมีการเปิดตัว Python ใหม่ เขาเป็นพนักงานของCCP Gamesผู้พัฒนา EVE Online ซึ่งใช้ Stackless เป็นส่วนสำคัญของระบบเกมของพวกเขา

เกม CCP ยังเป็นตัวอย่างในโลกแห่งความจริงที่ใหญ่ที่สุดที่ผู้คนใช้เมื่อพูดถึง Stackless บทช่วยสอนหลักสำหรับ Stackless คือ " Introduction to Concurrent Programming with Stackless Python " ของ Grant Olson ซึ่งเน้นเกมเช่นกัน ฉันคิดว่าสิ่งนี้ทำให้ผู้คนมีความคิดที่บิดเบือนว่า Stackless เป็นเกมที่มุ่งเน้นไปที่เกมเมื่อมีมากกว่านั้นเกมจะเน้นความต่อเนื่องได้ง่ายขึ้น

ปัญหาอื่นคือซอร์สโค้ด ในรูปแบบดั้งเดิมจำเป็นต้องมีการเปลี่ยนแปลงในหลายส่วนของ Python ซึ่งทำให้ Guido van Rossum ผู้นำ Python ระมัดระวัง ฉันคิดว่าเหตุผลส่วนหนึ่งคือการรองรับ call / cc ที่ถูกลบออกในภายหลังว่า "เหมือนสนับสนุน goto มากเกินไปเมื่อมีรูปแบบระดับสูงที่ดีกว่า" ฉันไม่แน่ใจเกี่ยวกับประวัตินี้ดังนั้นเพียงอ่านย่อหน้านี้ว่า "Stackless ใช้เพื่อต้องการการเปลี่ยนแปลงมากเกินไป"

การเผยแพร่ในภายหลังไม่จำเป็นต้องมีการเปลี่ยนแปลงและ Tismer ยังคงผลักดันให้รวมอยู่ใน Python ในขณะที่มีการพิจารณาท่าทีอย่างเป็นทางการ (เท่าที่ฉันรู้) คือ CPython ไม่ใช่แค่การใช้งาน Python แต่หมายถึงการใช้งานอ้างอิงและจะไม่รวมฟังก์ชัน Stackless เนื่องจาก Jython ไม่สามารถใช้งานได้ หรือ Iron Python

ไม่มีแผนสำหรับ " การเปลี่ยนแปลงที่สำคัญของฐานรหัส " อย่างแน่นอน คำพูดและการเชื่อมโยงหลายมิติอ้างอิงจาก Arafangion's (ดูความคิดเห็น) มาจากประมาณ 2000/2001 การเปลี่ยนแปลงโครงสร้างเกิดขึ้นมานานแล้วและเป็นสิ่งที่ฉันได้กล่าวไว้ข้างต้น Stackless เนื่องจากตอนนี้มีความเสถียรและเป็นผู้ใหญ่โดยมีเพียงการปรับแต่งเล็กน้อยสำหรับฐานรหัสในช่วงหลายปีที่ผ่านมา

ข้อ จำกัด สุดท้ายอย่างหนึ่งของ Stackless - ไม่มีผู้สนับสนุนที่แข็งแกร่งสำหรับ Stackless ขณะนี้ Tismer มีส่วนเกี่ยวข้องอย่างลึกซึ้งกับPyPyซึ่งเป็นการใช้งาน Python สำหรับ Python เขาใช้ฟังก์ชัน Stackless ใน PyPy และคิดว่ามันเหนือกว่า Stackless มากและรู้สึกว่า PyPy คือหนทางแห่งอนาคต Tew รักษา Stackless แต่เขาไม่สนใจในการสนับสนุน ฉันคิดว่าอยู่ในบทบาทนั้น แต่ไม่เห็นว่าฉันจะสร้างรายได้จากมันได้อย่างไร

แม้ว่าคุณต้องการฝึกอบรมใน Stackless โปรดติดต่อฉัน ! :)


39

ใช้เวลาค่อนข้างนานในการค้นหาการสนทนานี้ ตอนนั้นฉันไม่ได้ใช้ PyPy แต่มีความสัมพันธ์กับ Psyco มา 2 ปีจนกระทั่งสุขภาพหยุดลงทันที ตอนนี้ฉันกลับมาใช้งานอีกครั้งและออกแบบแนวทางอื่น - จะนำเสนอใน EuroPython 2012

ข้อความส่วนใหญ่ของ Andrews ถูกต้อง ส่วนเพิ่มเติมเล็กน้อย:

Stackless เร็วกว่า CPython เมื่อ 10 ปีก่อนอย่างเห็นได้ชัดเพราะฉันปรับลูปล่ามให้เหมาะสม ตอนนั้นกุยโดยังไม่พร้อมขนาดนั้น ไม่กี่ปีต่อมาผู้คนทำการเพิ่มประสิทธิภาพที่คล้ายกันและสิ่งที่ดีขึ้นเรื่อย ๆ ซึ่งทำให้ Stackless ช้าลงเล็กน้อยตามที่คาดไว้

ในการรวม: ในตอนแรกฉันเร่งเร้ามากและเชื่อว่า Stackless คือหนทางที่จะไป ต่อมาเมื่อเกือบจะรวมเข้าได้ฉันก็หมดความสนใจในเรื่องนั้นและอยากจะปล่อยให้มันเป็นแบบนี้ต่อไปเพราะหงุดหงิดบางส่วนบางส่วนเพื่อควบคุม Stackless

อาร์กิวเมนต์เช่น "การใช้งานอื่น ๆ ไม่สามารถทำได้" ทำให้ฉันรู้สึกอ่อนแอเสมอเนื่องจากมีตัวอย่างอื่น ๆ ที่สามารถใช้อาร์กิวเมนต์นี้ได้ ฉันคิดว่าฉันดีกว่าลืมเรื่องนั้นและอยู่ในมิตรภาพที่ดีกับกุยโดโดยมีความแตกต่างของตัวเอง

ในขณะเดียวกันสิ่งต่างๆกำลังเปลี่ยนแปลงอีกครั้ง ฉันกำลังทำงานกับ PyPy และ Stackless เป็นส่วนขยายจะพูดถึงเรื่องนี้ในภายหลัง

ไชโย - คริส


5

ถ้าฉันจำได้อย่างถูกต้อง Stackless ถูกกำหนดให้รวมไว้ใน CPython อย่างเป็นทางการ แต่ผู้เขียน stackless บอกให้ชาว CPython ไม่ทำเช่นนั้นเพราะเขาวางแผนที่จะทำการเปลี่ยนแปลงที่สำคัญบางอย่างกับฐานรหัส - สันนิษฐานว่าเขาต้องการให้การรวมเสร็จสิ้นในภายหลังเมื่อ โครงการมีความเป็นผู้ใหญ่มากขึ้น


1
แหล่งที่มา? ฉันคิดว่าสิ่งนี้น่าสนใจ แต่เห็นได้ชัดว่าฉันไม่อยากเชื่อคุณเพียงเพราะคุณพูดอย่างนั้น ฉันจะดูเป็นคนโง่ถ้าคุณคิดผิดและฉันก็เริ่มพูดถึงสิ่งที่น่าสนใจ
Devin Jeanpierre

2
จุดที่ยอดเยี่ยม ขออภัยฉันไม่มีข้อมูลอ้างอิงเนื่องจากอยู่ในการสนทนา irc ใน #python บน freenode แต่ฉันสามารถค้นหาการสนทนารายชื่ออีเมลโบราณได้ที่gnosis.cx/download/charming_python_10_outtakes.htmlซึ่งให้ข้อมูลเชิงลึกมากขึ้นกับ สถานการณ์.
Arafangion

ลิงค์นั้นยอดเยี่ยมจริงๆ มันตอบคำถามของฉันได้มาก
Ryszard Szopa

ลิงก์นั้นมีอายุ 8 หรือ 9 ปี (พูดถึง Python 2.1) และการสนทนาเกี่ยวกับการเปลี่ยนแปลงในอนาคตของฐานรหัสได้เกิดขึ้นเป็นเวลานาน Stackless Python มีความเสถียรและเป็นผู้ใหญ่และไม่มีแผนสำหรับ "การเปลี่ยนแปลงที่สำคัญในฐานรหัส"
Andrew Dalke

dalke: นั่นคือสิ่งที่เป็นอยู่ - หากมีการเปลี่ยนแปลงอย่างมีนัยสำคัญในการตัดสินใจใด ๆ ที่จะรวมการเปลี่ยนแปลงเข้าด้วยกันอย่าลังเลที่จะหาข้อมูลอ้างอิงที่ใหม่กว่าอย่างไรก็ตามฉันสงสัยว่าแหล่งข้อมูลโบราณที่ฉันให้ไว้เป็นเพียงการเริ่มต้นแนวโน้มที่จะมีรูปแบบต่างๆ ของ python เช่น JPython, IronPytion ..
Arafangion

3

ฉันยังสนใจคำตอบที่นี่ ฉันเล่นกับ Stackless มาบ้างแล้วและดูเหมือนว่ามันจะเป็นส่วนเสริมที่ดีสำหรับ Python มาตรฐาน

PEP 219 กล่าวถึงปัญหาที่อาจเกิดขึ้นกับการเรียกรหัส Python จากรหัส C หาก Python ต้องการเปลี่ยนเป็นสแต็กอื่น จะต้องมีวิธีตรวจจับและป้องกันสิ่งนี้ (เพื่อหลีกเลี่ยงการทำลาย C stack) ฉันคิดว่ามันสามารถอ่านได้ดังนั้นฉันก็สงสัยเหมือนกันว่าทำไม Stackless ต้องยืนได้ด้วยตัวเอง


3
PEP 219 มีอายุ 9 ปีและล้าสมัยอย่างมาก ความยากลำบากในการ "เรียกรหัส Python จากรหัส C" เป็นเพียงการนำไปใช้งานที่กล่าวถึงใน PEP เท่านั้นและไม่ได้อยู่ใน Stackless ชื่อของ PEP ("Stackless Python") เป็นชื่อที่ผิดเล็กน้อย มันได้รับแรงบันดาลใจจาก Stackless และนั่นแหล่ะ
Andrew Dalke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.