การเขียนโปรแกรมใน Python เร็วกว่าใน C, C ++ หรือ Java หรือไม่? [ปิด]


27

มีความเชื่ออย่างกว้างขวางในหมู่ว่ายิ่งภาษามีพลวัตและพิมพ์ผิดมากเท่าไรโปรแกรมเมอร์ก็ยิ่งมีประสิทธิผลมากขึ้นเท่านั้น Guido van Rossum เขียนเกี่ยวกับประสิทธิภาพการเขียนโปรแกรมโดยใช้ python ในปี 1998และค้นหาในเว็บฉันยังเห็นผู้คนที่อ้างสิทธิ์นี้:

วากยสัมพันธ์รหัสหลามดูเหมือนว่ารหัสหลอกที่ปฏิบัติการได้ การพัฒนาโปรแกรมโดยใช้ Python เร็วกว่าการใช้ C / C ++ 5-10 เท่าและเร็วกว่าการใช้ Java 3-5 เท่า ในหลายกรณีต้นแบบของแอปพลิเคชันสามารถเขียนใน Python โดยไม่ต้องเขียนโค้ด C / C ++ / Java ใด ๆ บ่อยครั้งที่ต้นแบบมีฟังก์ชั่นเพียงพอและทำงานได้ดีพอที่จะส่งมอบเป็นผลิตภัณฑ์สุดท้ายประหยัดเวลาในการพัฒนาอย่างมาก ในบางครั้งต้นแบบสามารถแปลบางส่วนหรือทั้งหมดเป็น C ++ หรือ Java - Python เป็นวัตถุเชิงธรรมชาติทำให้การแปลเป็นกระบวนการที่ตรงไปตรงมา

ปัญหานี้ได้รับการประเมินทางวิทยาศาสตร์อย่างเหมาะสมหรือไม่? ถ้าไม่ใช่สำหรับบางทีสำหรับภาษาสคริปต์พี่น้องอย่าง , หรือ ?

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

ตอนแรกฉันถามคำถามนี้ที่skeptics.SEและมีคนแนะนำว่าฉันควรถามที่นี่ด้วย


25
เนื่องจากคุณได้ จำกัด ชุดของคำตอบที่เป็นไปได้ฉันแค่กล้าแสดงความคิดเห็นโดยถามคำถามอื่นที่ควรตอบก่อน (imho): มีตัวชี้วัดที่เชื่อถือได้และเป็นระเบียบสำหรับการวัด "ประสิทธิผลของโปรแกรมเมอร์" หรือไม่?
พอลมิคาลิค

1
@Paul Michalik - ฉันจะสมมติว่างานวิจัยใด ๆ ที่ดูที่การผลิตจะมีคำจำกัดความรวมอยู่ด้วย (ไม่อย่างนั้นมันยากที่จะวัดจริง ๆ ) ดังนั้นถ้ามีคนอ้างอิงงานวิจัยมันจะเป็นประโยชน์ถ้าพวกเขามีคำจำกัดความในคำตอบ อาจมี (ฉันเดา) หลายวิธีที่ยอมรับได้อย่างสมบูรณ์แบบในการวัดประสิทธิภาพการทำงานบางที "เวลาที่ใช้ในการผ่านจำนวนของ unittests" อาจเป็นหนึ่งในนั้น
Kit Sunde

1
@Paul Michalik - แน่นอน แต่มีกี่ประโยคที่คุณอ่านในหนังสือบล็อกการพูดคุยและบทความจากโปรแกรมเมอร์จริง ๆ แล้วผ่านการทดสอบสังเกตุ? ฉันแน่ใจว่ามีวิธีการวัดประสิทธิผลที่ดีขึ้นหรือแย่ลง ตัวอย่างเช่น "การบริโภคกาแฟ / เวลา" อาจจะแย่ไปกว่า "บรรทัดของรหัส / เวลา" แบบดั้งเดิม ฉันจะระงับการตัดสินเกี่ยวกับการผลิตเฉพาะที่อ้างว่าเราเคยเห็นและสามารถโต้แย้งข้อดีตามนั้น การอ้างสิทธิ์ผลิตภาพไม่ได้ผิดธรรมดาเพียงอย่างเดียวฉันแน่ใจว่า "บรรทัดของรหัส / เวลา" วัดอะไรบางอย่างเมื่อคนไม่พยายามทำลายเมตริก
Kit Sunde

1
คุณอาจสนใจในบทความนี้: citeseerx.ist.psu.edu/viewdoc/…
DistantEcho

1
@ChrisF - คุณกำลังบอกว่า quesiton นี้ใช้ไม่ได้กับโปรแกรมเมอร์หรือไม่ แน่นอนว่ามันเป็นความคลางแคลงใจและมันก็พอดีกับที่นี่เช่นกัน ฉันอยู่ภายใต้ความประทับใจที่คุณไม่ควรอ่านจนกว่าจะถึงความคิดเห็นล่าสุดโดย Robert Cartaino สำหรับคำถามนี้: skeptics.stackexchange.com/q/1963/631ซึ่งเป็นหลักบอกว่ามันไม่เป็นไรถ้าเป็นที่สนใจของทั้งสองชุมชนและ ฉันทำหลังจากได้รับแจ้งจากผู้ใช้รายอื่นให้ทำ เมื่อพิจารณาว่าคำถามกำลังเพิ่มขึ้นอย่างรวดเร็วดูเหมือนว่าจะเป็นที่สนใจของชุมชนนี้เช่นกัน
Kit Sunde

คำตอบ:


17

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

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

[1]: JK Ousterhout, Scripting: การเขียนโปรแกรมระดับสูงขึ้นสำหรับศตวรรษที่ 21 , คอมพิวเตอร์ (IEEE), 1998
[2]: B. Boehm, เศรษฐศาสตร์วิศวกรรมซอฟต์แวร์ , Prentice Hall, 1981


9
ในขณะที่นี่เป็นคำตอบที่ดีอย่าลืมว่าภาษาที่ไม่ใช่สคริปท์สมัยใหม่นั้นมักจะมาพร้อมกับยูทิลิตี้สำเร็จรูปที่ทำให้การพัฒนารวดเร็วขึ้น C # อยู่ในใจ ใครก็ตามที่รู้สึกว่า Python มาพร้อมกับยูทิลิตี้ก่อนบรรจุมากกว่า C # เพียง แต่รู้ว่า Python ดีกว่า C # ในความเป็นจริงพวกเขาทั้งคู่มียูทิลิตี้ "ในตัว" ที่กว้างขวางและเทียบเท่า
Roman Starkov

@romkyns สำหรับโครงการที่ไม่สำคัญคุณต้องเขียนโค้ดจำนวนมาก แม้ว่าคุณจะมีเลโก้ก้อนอิฐจำนวนมาก Bionicles ก็ไม่ได้มารวมกันอย่างน่าอัศจรรย์

2
@Thor แต่มันค่อนข้างช่วยให้มีอิฐเลโก้เหล่านั้นล่วงหน้าแทนที่จะต้องสร้างสว่านน้ำมันโรงงานพลาสติกและเครื่องอัดรีดบล็อกเลโก้ก่อน
Roman Starkov

2
ทั้ง c ++ และ Java มี container ทั่วไปและ c ++ 11 มี lib มาตรฐานแบบเต็มสำหรับอัลกอริธึมเรียงลำดับและตัววนซ้ำเป็นต้นฉันไม่เชื่อว่าใครบางคนที่เขียนโปรแกรมหลามจะได้เปรียบอย่างมาก นอกจากนี้ฉันใช้เวลาส่วนใหญ่ในการเขียนโปรแกรมเพื่อหาว่าต้องทำอะไรไม่พิมพ์ ดังนั้นฉันคิดว่าการนับจำนวนบรรทัดที่ใช้ในการทำสิ่งนั้นไม่ใช่ตัวบ่งชี้ที่ชัดเจนว่าโปรแกรมเมอร์คุณจะใช้ภาษานั้นเร็วแค่ไหน
Sam Redway

7

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

ฉันเชื่อว่าการแข่งขันรหัสที่กำหนดเวลาบ่งบอกว่าภาษาไม่สำคัญสำหรับงานเหล่านั้น ไม่มีภาษาใดที่เอาชนะความท้าทายดังกล่าวได้ง่ายกว่าภาษาอื่น (อย่างน้อยก็ไม่ใช่ถ้าคุณยอมให้มีความนิยมในภาษา)

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

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


7
"คุณกำลังประเมินโปรแกรมเมอร์จริงๆไม่ใช่ภาษา" - ไม่ใช่ถ้านี่เป็นเรื่องทางวิทยาศาสตร์จริง ๆ รับโปรแกรมเมอร์ 100 คน เลือกโครงการทั่วไปเช่น "เขียนแอปปฏิทินด้วยข้อกำหนดเฉพาะเหล่านี้" ข้อกำหนดที่เชื่อมโยงกับการทดสอบหน่วยอัตโนมัติ โปรแกรมเมอร์ 50 คนเขียนแอพใน C ++, 50 ใน Python, เลือกแบบสุ่มเพื่อให้นักพัฒนาคุณภาพกระจัดกระจายอย่างเท่าเทียมกัน ผลลัพธ์จะเป็นคะแนนรวมเวลาเฉลี่ยในการทำให้สำเร็จโดยมีจำนวนการทดสอบหน่วยที่ผ่าน เปรียบเทียบค่าเฉลี่ยของผลลัพธ์ Python กับค่าเฉลี่ยของผลลัพธ์ C ++ และ ... วิทยาศาสตร์!
Morgan Herlocker

2
@Prof บางทีถ้าคุณได้รับหนึ่งพันแต่ละ ... แต่ยังคุณจะควบคุมความจริงที่ว่ามีเพียงคนที่มีความคิดและความสามารถในระดับหนึ่งจะรู้ C ++?
Roman Starkov

คุณสามารถทำให้ตัวอย่างของคุณดึงจากคนที่สามารถผ่านการทดสอบความชำนาญใน C ++ และ Python อาจารย์เก่าของฉันจำนวนมากทำการศึกษาที่คล้ายกันมาก นอกจากนี้คุณยังสร้างสมมติฐานบางอย่างที่คนอื่น ๆ พูดถึงที่นี่: programmers.stackexchange.com/q/73715/3792
Morgan Herlocker

6

http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdfเป็นหนึ่งในการศึกษาไม่กี่ครั้งที่ฉันรู้ว่าได้ทำการเปรียบเทียบโดยตรงระหว่างผลผลิตในภาษาต่างๆ มันเก่า แต่ควรค่าแก่การอ่านหากคุณพบว่าหัวข้อน่าสนใจ การเปรียบเทียบมีข้อบกพร่องที่สำคัญหลายประการซึ่งบทความมีความซื่อสัตย์อย่างมาก

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

โปรดทราบว่าหมายเลขประสิทธิภาพสำหรับ Java ทั้งหมดควรได้มาพร้อมกับเม็ดเกลือสำคัญ - กระดาษถูกสร้างขึ้นใน 90s ก่อนที่ผู้คนจะมีประสบการณ์มากมายเกี่ยวกับ Java และก่อนที่ JVM จะได้รับการปรับให้เหมาะสม ปัจจัยทั้งสองควรมีผลกระทบอย่างมีนัยสำคัญ


1

โดยทั่วไปแล้วการเขียนโปรแกรมใน Python จะเร็วกว่าการเขียนโปรแกรมเดียวกันใน C, C ++, Java

มันก็มีแนวโน้มที่จะทำงานช้าลง

แน่นอนว่ามีบางแอปพลิเคชั่นที่ภาษาอื่นอาจเร็วกว่าเพราะรองรับบางสิ่งที่เกี่ยวข้อง

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

ฉันคิดว่ามีข้อดีบางอย่างกับความสัมพันธ์ระหว่างการแสดงออกทางภาษาและความเร็วในการเขียนโปรแกรม เพียงแค่เห็นรูปแบบการวนซ้ำอย่างง่ายและความเข้าใจของ Pythonic for-loop หรือ List สามารถรวบรัดได้มากขึ้น ไม่เพียง แต่สามารถพิมพ์ได้เร็วขึ้นเท่านั้น แต่ยังขจัดข้อผิดพลาดแบบ off-by-one, ดัชนีนอกขอบเขตและปัญหาอื่น ๆ ที่อาจทำให้กระบวนการเข้ารหัสช้าลงอย่างมาก

สิ่งนี้แสดงตารางการประมาณค่าสำหรับอัตราส่วนการแสดงออกของภาษา ในขณะที่ควรได้รับเม็ดเกลือ แต่เชิงอรรถที่กล่าวถึงนั้นมีค่ามาก

http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness


-5

ครั้งล่าสุดที่ฉันใช้ Java (เมื่อสักครู่ที่ผ่านมายอมรับ) มันใช้หน้าจอเต็มของรหัสเพื่อเปิดและเขียนไฟล์ เปรียบเทียบกับสองบรรทัดใน Python หรือ Perl และคุณสามารถเดาได้ว่าอันไหนเร็วกว่า

เห็นได้ชัดว่าภาษาต่าง ๆ มีจุดแข็งและจุดอ่อนของตนเอง แต่สำหรับงานส่วนใหญ่ Python จะเขียนได้เร็วขึ้น


6
"ต้องใช้รหัสเต็มหน้าจอเพื่อเปิดและเขียนไฟล์": ใส่สิ่งนี้ลงในคลาสยูทิลิตี้ที่มีสองวิธีwrite()และread()ส่วนที่เหลือของการเข้าถึงไฟล์โปรเจ็กต์ Java ของคุณจะสั้นกระชับเหมือนกับ Python ฉันคิดว่าตัวอย่างของคุณค่อนข้าง จำกัด เกินไปที่จะเปรียบเทียบ Python และ Java (แม้ว่าฉันยอมรับว่า Java มีแนวโน้มที่จะละเอียดมากขึ้น)
Giorgio

แน่นอน แต่ภาษา Python, Perl และภาษาที่สูงกว่ามักจะคิดเกี่ยวกับสิ่งนั้นล่วงหน้าและดังนั้นคุณไม่จำเป็นต้องเขียนคลาสยูทิลิตี้ (หรือไม่มากเท่า) การใช้คลาสยูทิลิตี้ยังคงต้องใช้เวลาและเป็นหลักการของรหัสที่ใช้ซ้ำได้ซึ่งใช้กับทั้ง Java และ Python ขึ้นอยู่กับว่าคุณกำลังทำอะไรอยู่
wobbily_col

สมมติว่า Java ต้องการโค้ด 50 - 60 บรรทัดเพื่อเปิดและเขียนไฟล์ สิ่งนี้ไม่ถูกต้อง
h22
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.