การวัดพลังงานอื่นที่ไม่ใช่ทัวริงสมบูรณ์


18

เดิมฉันพยายามถามเรื่องนี้ใน StackOverflow แต่มันเป็นอัตนัยเกินไป :-( ฉันสนใจวิธีการกำหนดพลังของภาษาการเขียนโปรแกรมความสมบูรณ์ทัวริงเป็นหนึ่ง แต่เกือบพอใจในระดับสากลสิ่งที่ดีคือการกำหนด การวัดพลังงานที่จำแนกระหว่างภาษาการเขียนโปรแกรมที่ใช้จริงตัวอย่างเช่นทุกคนสามารถเสนอวิธีการที่ไม่ใช่อัตนัยที่จะแยกแยะระหว่างการชุมนุมและ Java?

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

คำตอบ:


24

ความคิดที่คุณกำลังมองหาเรียกว่าการแสดงออกและ Matthias Felleisen มีความหมายที่เข้มงวดทางคณิตศาสตร์:

" พลังแห่งการเขียนโปรแกรมภาษา "

www.ccs.neu.edu/scheme/pubs/scp91-felleisen.ps.gz (รุ่น Postscript)

สัญชาตญาณเบื้องหลังแนวคิดนี้คือถ้าคุณมีโปรแกรมเทียบเท่าสองโปรแกรมในสองภาษาที่ต่างกัน - พูดว่าโปรแกรม A ในภาษา X และโปรแกรม B ในภาษา Y - และถ้าคุณทำการเปลี่ยนแปลงในท้องถิ่นเป็น A ที่ต้องใช้การเปลี่ยนแปลงระดับโลกเป็น B ดังนั้น X จึงมีความหมายมากกว่า Y

ตัวอย่างหนึ่งที่ Felleisen จัดให้มีคือการมอบหมาย: ในภาษาการเขียนโปรแกรม Scheme คุณสามารถลบโอเปอเรเตอร์การมอบหมายและยังมีภาษาทัวริงที่สมบูรณ์ อย่างไรก็ตามในภาษาที่ถูก จำกัด ดังกล่าวการเพิ่มคุณสมบัติที่จะแปลเป็นภาษาท้องถิ่นหากได้รับอนุญาตจะต้องมีการเปลี่ยนแปลงทั่วโลกในโปรแกรมโดยไม่ได้รับมอบหมาย

การสนทนาของฉันทำให้รายละเอียดบางอย่างง่ายขึ้นและคุณควรอ่านรายงานฉบับเต็ม

เพื่อตอบคำถามอื่น ๆ ของคุณ: คุณสามารถพูดได้ว่า Java นั้นมีความหมายมากกว่าชุดประกอบเนื่องจากคุณสามารถเพิ่มคลาสใหม่ให้กับโปรแกรม Java ของคุณจากนั้นได้รับประโยชน์จาก polymorphism โดยให้ส่วนอื่น ๆ ของโปรแกรมของคุณเรียกใช้ การจัดการข้อยกเว้นเป็นอีกตัวอย่างหนึ่งที่ Java แสดงออกได้ดีกว่าชุดประกอบ: คุณเพียงแค่ต้องเขียนthrowคำสั่งเดียวเพื่อถ่ายโอนการควบคุมกองซ้อน ในระดับประถมศึกษาเพิ่มเติมคุณยังสามารถเพิ่มcaseคำสั่งใหม่ใกล้กับจุดเริ่มต้นของswitchและคุณไม่ต้องกังวลเกี่ยวกับการคำนวณข้ามกระโดดด้วยมือใด ๆ


ขอบคุณมาก! นี่คือสิ่งที่ฉันกำลังมองหา!
Casebash

6

หากฉันเข้าใจคำถามของคุณอย่างถูกต้องคุณก็ยังมองหาบางสิ่งที่สามารถวัดได้และไม่ใช่เพียงแค่การตัดสินตามอัตวิสัย ถ้าเป็นเช่นนั้นฉันจะชอบเวลาส่วนตัวเพื่อแก้ไขปัญหาใด ๆ โดยเฉพาะ (เฉลี่ยในทุกปัญหาและโปรแกรมเมอร์ทั้งหมด) ในวัดนี้คุณอาจต้องพิจารณาไม่เพียง แต่ภาษาเอง แต่ยังรวมถึงกรอบ / API ที่ใช้กับมันด้วย ไวยากรณ์ที่ซับซ้อนเป็นปัจจัยที่มีขนาดเล็กมาก: สิ่งที่สำคัญกว่านั้นคือฟังก์ชั่นที่จำเป็นต้องใช้มากที่สุดนั้นสามารถเข้าถึงได้ง่าย

หากคุณกำลังมองหาสิ่งที่เป็นอัตวิสัยมากขึ้นฉันจะบอกว่ามันสนุกขนาดไหน โปรแกรมเมอร์มักเป็นคนที่ต้องการแก้ไขปัญหาดังนั้นภาษาการเขียนโปรแกรมที่สนุกสำหรับโปรแกรมเมอร์ที่จะใช้ย่อมเป็นภาษาที่จะแก้ปัญหาได้อย่างหลีกเลี่ยงไม่ได้ การวัดนี้คำนึงถึงว่าผู้คนต่างมีความชอบที่แตกต่างกันเกี่ยวกับวิธีการใช้สิ่งต่าง ๆ ดังนั้นภาษาการเขียนโปรแกรมที่ "ดีที่สุด" จะเป็นภาษาที่น่าสนใจที่สุดสำหรับนักเขียนโปรแกรมที่หลากหลายที่สุด อย่างไรก็ตามคุณอาจต้องพิจารณาไม่เพียง แต่ภาษาการเขียนโปรแกรมและ API ที่นี่ แต่ยังรวมถึงสภาพแวดล้อม (IDE) ซึ่งแน่นอนว่าสิ่งที่โปรแกรมเมอร์โต้ตอบกับจริง


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

1
@ จอห์น: เพียงเพราะบางสิ่งที่สามารถวิเคราะห์ทางสถิติไม่ได้หมายความว่ามันเป็นอัตนัย
David Thornley

@ David: นั่นไม่ใช่จุดของฉัน ประเด็นก็คือหากไม่มีการศึกษามาก่อนผู้ถามจะไม่สามารถเปรียบเทียบ "พลัง" ของภาษาที่เขาสนใจได้ - ปล่อยให้มันเป็นอัตนัยเมื่อไม่วิเคราะห์เชิงสถิติกับกลุ่มใหญ่
John Fisher

1

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


2
ความยากลำบากของสิ่งนี้คือการรู้ภาษาทำให้ผู้ที่รู้ภาษานั้นง่ายขึ้น ดังนั้นมาตรการนี้กลายเป็นเรื่องส่วนตัว
John Fisher

1

คุณต้องกำหนดคำศัพท์ของคุณให้ดีขึ้น

ความสมบูรณ์แบบของทัวริงไม่ได้เกี่ยวกับ "อำนาจ" ในแง่ที่คุณอาจหมายถึง ค่อนข้างเกี่ยวกับการคำนวณ คือว่าภาษาที่กำหนดสามารถแสดงโปรแกรมใด ๆ ที่สามารถใช้งานได้โดยใช้เครื่องทัวริง ปรากฎว่าเกือบทุกภาษาการเขียนโปรแกรมเป็นทัวริงสมบูรณ์

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

แก้ไข

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

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


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

@Casebash - คุณยังไม่ได้พูดว่า "พลังงาน" คืออะไร
Stephen C

2
นั่นเป็นเพราะฉันไม่รู้และนั่นคือประเด็นทั้งหมดของคำถามนี้!
Casebash

ถ้าอย่างนั้นจุดประสงค์ในการตอบของคุณคืออะไร? มันควรจะเป็นความคิดเห็น
reinierpost

@reinerpost - จุดคำตอบของฉันคือการอธิบายโดยละเอียดว่าคำถามนั้นไม่มีความหมายและทำไม โดยทั่วไปคำถามจะถามว่า"มีบางสิ่งที่เรียกว่า 'พลังการแสดงออก' - ฉันไม่รู้ว่ามันคืออะไร แต่คุณสามารถบอกฉันได้ว่าจะวัดได้อย่างไร" และคำตอบของฉันก็คือ 'พลังการแสดงออก' เป็นแนวคิด / ทรัพย์สินที่กำหนดไว้ไม่ดีและแน่นอนว่าไม่ใช่การวัด / เชิงปริมาณ (และเป็นคำตอบที่ชัดเจนและไม่ใช่ความคิดเห็นบางทีคุณอาจไม่เข้าใจในสิ่งที่ฉันกำลังจะพูด?)
Stephen C
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.