ภาษาทำงานเร็วที่สุด


18

ฉันเพิ่งได้รับการขุดเจาะเข้าไปในการเขียนโปรแกรมการทำงานโดยเฉพาะอย่างยิ่ง Haskell และ F #, ก่อนหน้านี้มากขึ้น หลังจาก googling ไปรอบ ๆ ฉันไม่สามารถหาการเปรียบเทียบเกณฑ์มาตรฐานของภาษาที่ใช้งานได้ดีกว่า (Scala, F # ฯลฯ )

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


18
ภาษาไม่เร็วหรือช้าการใช้งานคือ
starblue

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

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

3
@igouy "การใช้ภาษาไม่เร็วหรือช้า" นี่ไม่เป็นความจริง CPythonvs PyPyรีบนึกขึ้นมา
NlightNFotis

@NlightNFotis - CPython ใช้เวลากี่วินาที? PyPy ใช้เวลากี่วินาที? การปรับใช้ภาษาไม่เร็วหรือช้า โปรแกรมนั้นใช้เวลากี่วินาทีกับ CPython
igouy

คำตอบ:


25

ตามเกมมาตรฐานที่ดี , ATSจะเร็วกว่าส่วนที่เหลือกับ Haskell, สกาล่าและเป็นหนึ่งในสายพันธุ์ของ Common เสียงกระเพื่อมในผูกหยาบสำหรับความเร็วที่ปิดอยู่เบื้องหลังว่า หลังจากนั้น Ocaml และ F # อยู่ในประเภทความเร็วเดียวกันคร่าว ๆ กับ Racket และ Clojure ปกคลุมอยู่ด้านหลัง ...

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


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

ลิงค์ที่ดีพร้อมข้อมูลเปรียบเทียบโดยละเอียด ฉันผิดหวังเล็กน้อยที่เห็น Clojure ใช้หน่วยความจำมากขึ้นและใช้เวลานานกว่า Java อย่างมาก ฉันจำได้ว่าบางคนอ้างว่า Clojure มีประสิทธิภาพคล้ายกันซึ่งดูเหมือนจะไม่เป็นเช่นนั้น
DPM

เว็บไซต์ของ ATS ระบุว่า ATS สนับสนุนกระบวนทัศน์การเขียนโปรแกรมที่หลากหลาย - ดังนั้นก่อนที่คุณจะอ้างว่า ATS นั้นเร็วกว่าส่วนที่เหลือคุณต้องแสดงให้เห็นว่าโปรแกรมเหล่านั้นเขียนขึ้นในรูปแบบการใช้งานจริง อาจเป็นได้ว่า ATS ใช้งานได้ไม่เร็วกว่าที่เหลือ
igouy

2
เว็บไซต์ Scala ระบุว่า Scala รวมคุณสมบัติเชิงวัตถุและการทำงาน คุณได้ตรวจสอบว่าโปรแกรม Scala เขียนเป็นโปรแกรมที่ใช้งานได้ดีกว่าโปรแกรมเชิงวัตถุหรือไม่?
igouy

12

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

ดังนั้นเมื่อคุณถามเกี่ยวกับ "ภาษาที่ใช้งานได้เร็วที่สุด" สิ่งที่คุณถามเกี่ยวกับการใช้ภาษาที่ดีที่สุดในปัจจุบัน


@ ความคิดเห็นของ igouy ยกประเด็นว่ามีมาตรการด้านประสิทธิภาพอื่น ๆสำหรับการติดตั้งภาษา เช่นเวลารวบรวม แต่นั่นไม่ได้เปลี่ยนความจริงที่ว่าเวลาทำงานของโปรแกรมแอปพลิเคชันเป็นการวัด (ทางอ้อม) ของการนำภาษาไปใช้ไม่ใช่การวัดของภาษาเอง

พิจารณา Java เป็นตัวอย่าง สมมติว่าฉันเขียนเกณฑ์มาตรฐานแบบเธรดเดียวโดยใช้คุณสมบัติภาษา แต่เพียงผู้เดียวของคลาสสิก (Java 1.0) Java ถ้าฉันคอมไพล์และรันโดยใช้ JDK 1.0 ฉันจะได้รับประสิทธิภาพต่ำ ('cos JDK 1.0 ไม่มีคอมไพเลอร์โค้ดเนทีฟ) ถ้าฉันไปจาก JDK 1.1 ถึง ... JDK 1.7 ฉันน่าจะได้รับผลลัพธ์ที่ดีขึ้นเรื่อย ๆ แต่นี่ไม่ได้เกิดจากการเปลี่ยนแปลงภาษาจาวา... เพราะมาตรฐานของฉันใช้ชุดย่อยภาษาเดียวกัน ค่อนข้างเร็วขึ้นเกิดจากการปรับปรุงในคอมไพเลอร์ระบบรันไทม์และ / หรือการใช้งานของห้องสมุดชั้น นี่คือปัญหาการใช้งานทั้งหมด

อีกประเด็นหนึ่งคือความแตกต่างของการใช้งานเหล่านี้มีความสำคัญจริงๆ (เช่นคำสั่งของขนาด) สำหรับภาษาเดียวกัน ดังนั้นความจริงที่ว่าการใช้งานที่ดีที่สุดสำหรับภาษา X นั้นเร็วกว่าการใช้ภาษาที่ดีที่สุด (หรืออย่างเดียว) Y ไม่จำเป็นต้องบอกอะไรเกี่ยวกับภาษามากนัก


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

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

@igouy - นั่นเป็นเรื่องจริง แต่ผู้คนจำนวนมากไม่ได้แยกความแตกต่างดังที่แสดงโดยเว็บไซต์เก่าจำนวนมากที่ประกาศว่า "Java ช้า แต่น่าเสียดายที่เรื่องไร้สาระนี้ถูกอ่านอย่างแท้จริงโดยโปรแกรมเมอร์ทั้งรุ่น ... และมันทำให้ชื่อเสียงของ Java เสียหายอย่างมาก เหตุใดฉันจึงมาถึงจุดนี้ที่นี่
สตีเฟนซี

ในขณะที่คุณต้องการที่จะมีเสรีภาพในการพูด - ที่ "(อ้อม) ตัวชี้วัดของการดำเนินงานของภาษาเป็น" - โปรดอธิบายว่าทำไมคนอื่นไม่ควรจะเป็นอิสระในการพูด - (ในทางอ้อม) ตัวชี้วัดของภาษา
igouy

@igouy - 1) คุณมีอิสระที่จะพูดในสิ่งที่คุณต้องการ แต่นั่นไม่ได้ทำให้คุณถูกต้อง 2) พิจารณากรณีที่การใช้ภาษาเพียงอย่างเดียวเป็นอึ เราเปรียบเทียบมัน จากนั้นเราอัปเดตการใช้งานเปรียบเทียบกับประสิทธิภาพที่เพิ่มขึ้นอย่างรวดเร็ว นั่นหมายความว่าประสิทธิภาพของภาษาดีขึ้นหรือไม่ มันสมเหตุสมผลขนาดไหน ... เนื่องจากภาษานั้นไม่เปลี่ยน !!!
Stephen C

6

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

Haskell ใช้ระบบประเภทที่แข็งแกร่งมากในการสร้างโปรแกรมที่มีแนวโน้มที่จะปราศจากข้อบกพร่องและแข็งแกร่ง

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

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

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