Swift จะเร็วกว่า Objective-C มากในการเปรียบเทียบเหล่านี้อย่างไร


115

แอปเปิ้ลเปิดตัวภาษาโปรแกรมใหม่ของสวิฟท์ที่WWDC14 ในการนำเสนอพวกเขาทำการเปรียบเทียบประสิทธิภาพระหว่าง Objective-C และ Python ต่อไปนี้เป็นรูปภาพของหนึ่งในสไลด์ของการเปรียบเทียบภาษาทั้งสามที่ดำเนินการเรียงลำดับวัตถุที่ซับซ้อน

ป้อนคำอธิบายรูปภาพที่นี่

มีกราฟที่น่าทึ่งยิ่งขึ้นเกี่ยวกับการเปรียบเทียบประสิทธิภาพโดยใช้อัลกอริทึมการเข้ารหัสRC4

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

  1. ภาษาการเขียนโปรแกรมใหม่จะเร็วขึ้นได้อย่างไร?
  2. ผลลัพธ์ Objective-C เกิดจากคอมไพเลอร์ที่ไม่ดีหรือมีบางสิ่งที่มีประสิทธิภาพน้อยกว่าใน Objective-C กว่า Swift หรือไม่?
  3. คุณจะอธิบายประสิทธิภาพที่เพิ่มขึ้น 40% ได้อย่างไร ฉันเข้าใจว่าการรวบรวมขยะ / การควบคุมการอ้างอิงอัตโนมัติอาจทำให้เกิดโอเวอร์เฮดเพิ่มเติม

13
@MathewFoscarini Obj-C ไปที่แอสเซมเบลอร์ แต่มีกลไกการจัดส่งข้อความที่มีราคาแพง สำหรับงาน GUI ส่วนใหญ่ที่ไม่สำคัญ แต่สำหรับการเรียงลำดับมันมีความสำคัญมาก
Donal Fellows

17
การเปรียบเทียบกับ Python เป็นตัวขูดหัวจริงที่นี่
asthasr

9
การตลาด @suryion และภาษาดูเหมือนจะขอยืมมาจากไวยากรณ์ของ python (เหมือน golang) พวกเขาพยายามที่จะพูดว่า "เฮ้นักพัฒนางูหลามคุณสามารถเขียนอะไรบางอย่างที่ไม่แปลกเกินไปบน mac และทำให้มันเร็วขึ้นเร็วกว่า Objective C ที่คุณไม่เคยแฮงค์เลย"

4
@MichaelT ฉันเข้าใจแล้ว แต่มันก็ยังแปลกอยู่ ใครก็ตามที่รู้อะไรเกี่ยวกับภาษาจะรู้ว่า Python เป็นภาษาที่ตีความแล้วจะไม่อยู่ใน ballpark เดียวกับ Objective-C หรือภาษาที่รวบรวมอื่น ๆ (สำหรับงานส่วนใหญ่) ใช้เป็นเกณฑ์มาตรฐานคี่
asthasr

7
พวกเขาอาจหมายถึงเวลาที่ใช้ในการเขียนรหัส ...
Lukas Eder

คำตอบ:


62

ก่อนอื่น (IMO) เปรียบเทียบกับ Python แทบไม่มีความหมาย การเปรียบเทียบกับ Objective-C เท่านั้นที่มีความหมาย

  • ภาษาการเขียนโปรแกรมใหม่จะเร็วขึ้นได้อย่างไร?

Objective-C เป็นภาษาที่ช้า (เฉพาะส่วน C เท่านั้นที่เร็ว แต่นั่นเป็นเพราะมันคือ C) มันไม่เคยเร็วขนาดนี้มาก่อน มันเร็วพอสำหรับจุดประสงค์ (Apple) ของพวกเขาและเร็วกว่ารุ่นเก่ากว่า และมันช้าเพราะ ...

  • Objective-C เป็นผลมาจากคอมไพเลอร์ที่ไม่ดีหรือมีบางสิ่งที่มีประสิทธิภาพน้อยกว่าใน Objective-C กว่า Swift หรือไม่?

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

  • คุณจะอธิบายประสิทธิภาพที่เพิ่มขึ้น 40% ได้อย่างไร ฉันเข้าใจว่าการรวบรวมขยะ / การควบคุมการอ้างอิงอัตโนมัติอาจทำให้เกิดโอเวอร์เฮดเพิ่มเติม

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

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

ปรับปรุง

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

ฉันรู้ว่า GCs แบบอนุรักษ์นิยม / การติดตาม / การเพิ่ม / ขนาน / เรียลไทม์นั้นแตกต่างกันอย่างไร ฉันคิดว่าผู้อ่านส่วนใหญ่ก็รู้เช่นกัน ฉันยอมรับด้วยว่า GC นั้นดีมากในบางสาขาและยังแสดงปริมาณงานสูงในบางกรณี

อย่างไรก็ตามฉันสงสัยว่าการรับส่ง GC จะดีกว่า RC เสมอ ค่าใช้จ่ายส่วนใหญ่ของ RC มาจากการดำเนินการนับการอ้างอิงและการล็อกเพื่อป้องกันตัวแปรหมายเลขการนับ และการใช้งาน RC มักจะให้วิธีการหลีกเลี่ยงการนับการดำเนินการ ใน Objective-C มี__unsafe_unretainedและสวิฟท์ (แม้ว่ามันจะยังคงค่อนข้างไม่ชัดเจนให้ฉัน) unownedวัตถุดิบ หากค่าใช้จ่ายในการดำเนินการนับไม่เป็นที่ยอมรับคุณสามารถลองยกเลิกการเลือกโดยการใช้กลไก ในทางทฤษฎีเราสามารถจำลองสถานการณ์ที่เกือบจะเป็นกรรมสิทธิ์โดยใช้การอ้างอิงที่ไม่ได้เก็บรักษาไว้อย่างจริงจังเพื่อหลีกเลี่ยงค่าใช้จ่าย RC ฉันคาดหวังว่าคอมไพเลอร์สามารถกำจัดการทำงาน RC ที่ไม่จำเป็นออกไปโดยอัตโนมัติ

ไม่เหมือนกับระบบ RC AFAIK การเลือกไม่ใช้บางส่วนของการอ้างอิงไม่ใช่ตัวเลือกในระบบ GC

ฉันรู้ว่ามีกราฟิกและเกมที่วางจำหน่ายจำนวนมากซึ่งใช้ระบบที่ใช้ GC และยังรู้ว่าพวกเขาส่วนใหญ่กำลังทุกข์ทรมานจากการขาดการกำหนด ไม่เพียง แต่สำหรับคุณสมบัติด้านประสิทธิภาพ แต่ยังจัดการกับอายุการใช้งาน ความสามัคคีส่วนใหญ่เขียนด้วยภาษาซีพลัสพลัส แต่ส่วนเล็ก ๆ ของ C # เป็นสาเหตุของปัญหาเรื่องประสิทธิภาพที่แปลก แอพ HTML ไฮบริดและยังคงทุกข์ทรมานจาก spikes ที่คาดเดาไม่ได้ในระบบใด ๆ ใช้กันอย่างแพร่หลายไม่ได้หมายความว่ามันยอดเยี่ยม หมายความว่าง่ายและเป็นที่นิยมสำหรับผู้ที่ไม่มีตัวเลือกมากมาย

อัปเดต 2

อีกครั้งเพื่อหลีกเลี่ยงการโต้แย้งหรือการอภิปรายที่ไม่จำเป็นฉันเพิ่มรายละเอียดเพิ่มเติม

@Asik ให้ความเห็นที่น่าสนใจเกี่ยวกับ GC spikes นั่นคือเราสามารถพิจารณาวิธีการที่มีมูลค่าทุกที่เป็นวิธีในการเลือกไม่ใช้สิ่ง GC นี่เป็นสิ่งที่ค่อนข้างน่าสนใจและยังสามารถทำได้ในบางระบบ (ตัวอย่างเช่นวิธีการทำงานอย่างแท้จริง) ฉันเห็นด้วยว่านี่เป็นสิ่งที่ดีในทางทฤษฎี แต่ในทางปฏิบัติมันมีหลายประเด็น ปัญหาที่ใหญ่ที่สุดคือการประยุกต์ใช้เคล็ดลับนี้บางส่วนไม่ได้ให้ลักษณะที่ไม่ขัดขวาง

เพราะปัญหาความหน่วงมักจะเป็นปัญหาทั้งหมดหรือไม่มีปัญหาเสมอไป หากคุณมีตัวขัดขวางเฟรมหนึ่งเฟรมเป็นเวลา 10 วินาที (= 600 เฟรม) แสดงว่าระบบทั้งหมดล้มเหลวอย่างเห็นได้ชัด นี่ไม่ได้เกี่ยวกับวิธีที่ดีขึ้นหรือแย่ลง มันแค่ผ่านหรือล้มเหลว (หรือน้อยกว่า 0.0001%) แล้วแหล่งที่มาของเข็ม GC คืออะไร? นั่นคือการกระจายโหลด GC ที่ไม่ดี และนั่นเป็นเพราะ GC เป็นพื้นฐานที่ไม่ทราบแน่ชัด หากคุณทำขยะใด ๆ มันจะเปิดใช้งาน GC และขัดขวางจะเกิดขึ้นในที่สุด แน่นอนในโลกอุดมคติที่ซึ่งการโหลด GC จะเป็นอุดมคติเสมอสิ่งนี้จะไม่เกิดขึ้น แต่ฉันอาศัยอยู่ในโลกแห่งความเป็นจริงมากกว่าโลกอุดมคติในจินตนาการ

จากนั้นหากคุณต้องการหลีกเลี่ยงการขัดขวางคุณต้องลบประเภทอ้างอิงทั้งหมดออกจากระบบทั้งหมด แต่มันก็เป็นเรื่องที่ยากวิกลจริตและเป็นไปไม่ได้เนื่องจากส่วนที่ไม่สามารถเคลื่อนย้ายได้เช่น. NET core system และ library การใช้ระบบที่ไม่ใช่ GC นั้นง่ายกว่ามาก

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

ฉันคิดว่าคำตอบของฉันหายไปมากเกินไปและส่วนใหญ่เป็นเพียงการพูดคุยซ้ำ ๆ ที่มีอยู่ หากคุณต้องการอ้างสิทธิ์เหนือกว่า / ต่ำต้อย / ทางเลือกหรือสิ่งอื่นใดของ GC / RC มีการสนทนาที่มีอยู่มากมายในไซต์นี้และ StackOverflow และคุณสามารถต่อสู้ต่อไปได้


4
การรวบรวมขยะโดยเฉพาะอย่างยิ่งในรุ่นทั่วไปมักจะเร็วกว่าการนับอ้างอิงอย่างมีนัยสำคัญ
Jan Hudec

9
@JanHudec เร็วขึ้นอย่างมีนัยสำคัญของคุณเป็นเพียงความหมายในด้านกราฟิกเรียลไทม์ นั่นเป็นเหตุผลที่ฉันพูดถึงการก้าวกระโดดครั้งใหญ่ใน GC Generational GC ไม่ได้อยู่ใกล้เคียงที่จะไม่ขัดขวางทั้งในเชิงทฤษฎีและในทางปฏิบัติ
Eonil

5
เร็วขึ้นและขัดขวางฟรีเป็นหมวดหมู่มุมฉากสมบูรณ์ สะสมขยะ generational เป็นได้เร็วขึ้น พวกเขาไม่ขัดขวางฟรี
Jan Hudec

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

11
@JanHudec: บนอุปกรณ์พกพาหรืออุปกรณ์ใด ๆ ที่มีทรัพยากร จำกัดGC ไม่เร็วขึ้นอย่างมีนัยสำคัญและในความเป็นจริงเป็นส่วนสำคัญของปัญหา
Mason Wheeler

72

เมื่อเร็วกว่าไพ ธ อน 3.9 เท่าภาษาที่สูญเสียการวัดประสิทธิภาพส่วนใหญ่อย่างต่อเนื่องโดยมีอัตรากำไรขั้นต้นที่มากพอสมควร (ตกลงมันเทียบได้กับ Perl, Ruby และ PHP แต่มันหายไปกับสิ่งที่พิมพ์แบบคงที่)

เกมมาตรฐานแสดงโปรแกรมภาษา C ++ ที่มีมากขึ้นกว่าลำดับความสำคัญได้เร็วขึ้นกว่าโปรแกรมหลามในกรณีส่วนใหญ่ มันไม่ได้ดีกว่าเมื่อเปรียบเทียบกับ Java, C # (บน Mono), OCaml, Haskell และแม้แต่ Clojure ซึ่งไม่ได้พิมพ์แบบคงที่

ดังนั้นคำถามที่แท้จริงคือ Objective-C นั้นเร็วกว่างูใหญ่เพียง 2.8 เท่าเท่านั้น เห็นได้ชัดว่าพวกเขาเลือกมาตรฐานอย่างระมัดระวังซึ่งการกระจายช้าแบบไดนามิกของ ObjC เจ็บมาก ภาษาที่พิมพ์แบบคงที่ใด ๆ ควรจะทำได้ดีกว่า ในการเรียงลำดับวัตถุที่ซับซ้อนมีวิธีการมากมายที่เรียกสำหรับการเปรียบเทียบวัตถุและการเปรียบเทียบจริงอาจไม่ซับซ้อนมาก ดังนั้นหาก Swift ใช้ประโยชน์จากข้อมูลประเภทอย่างน้อยก็สามารถทำได้ดีกว่าในวิธีการเรียกใช้และไม่มีการดำเนินการอื่น ๆ ที่ ObjC สามารถทำได้ดีกว่า

แน่นอนว่าเกมมาตรฐานแสดงให้เห็นอย่างชัดเจนประสิทธิภาพสัมพัทธ์ในงานที่แตกต่างกันนั้นแตกต่างกันอย่างมากดังนั้นการเปรียบเทียบจึงไม่ได้เป็นตัวแทนจริง ๆ หากพวกเขามีเกณฑ์มาตรฐานซึ่งเป็นข้อได้เปรียบที่ใหญ่กว่าพวกเขาจะแสดงให้เราเห็นว่าเป็นสิ่งนั้นแทนดังนั้นในงานอื่น ๆ มันอาจจะไม่ดีขึ้นหรือไม่มากนัก


13
ฉันไม่เข้าใจประเด็นของคำตอบนี้มากนัก คุณกำลังตอบว่า "เร็วแค่ไหน" โดยการพูดว่า "มาตรฐานมีข้อบกพร่อง"? นั่นคือจุดที่คุณกำลังทำ? ฉันไม่เห็นว่าคำตอบนั้นถูกถามอย่างไร
ไบรอัน Oakley

15
@BryanOakley: ฉันไม่คิดว่ามาตรฐานจะมีข้อบกพร่อง แต่ความเป็นไปได้ที่พวกเขาเลือกเกณฑ์มาตรฐานเดียวที่ Swift เร็วกว่านั้นต้องได้รับการพิจารณาอย่างแน่นอน
Jan Hudec

23
เป็นไปได้ว่าคำตอบของ "Swift รวดเร็วแค่ไหน?" อาจเป็น "ไม่จริง" @BryanOakley; นั่นคือส่วนสำคัญที่ฉันได้รับจากคำตอบของแจน "โกหกคำด่าและสถิติ" หลังจากทั้งหมด
Josh Caswell

4
ในขณะที่กลับมาเราใช้เกณฑ์มาตรฐานหนึ่งชื่อที่ทำงานบน iOS และการใช้จาวาของเราเร็วกว่า Objective-C codenameone.com/blog/ ......ม.ค. ถูกต้องการจัดส่งแบบไดนามิกช้ามากหากพวกเขาปรับปรุงพวกเขาแม้แต่นิดเดียว แสดงการปรับปรุงอย่างมาก หากพวกเขาปรับปรุง ARC ได้ด้วยเศษส่วน (ขอบคุณการวิเคราะห์รหัสที่ดีกว่า) พวกเขาสามารถกำจัดความซับซ้อนที่ไร้สาระได้ ยิ่งภาษามีข้อ จำกัด มากเท่าใดคอมไพเลอร์ก็สามารถทำได้เพื่อเพิ่มประสิทธิภาพ (ดู Java) และ Swift เพิ่มข้อ จำกัด
Shai Almog

7
คำตอบของ ม.ค. เป็นคำตอบที่สมบูรณ์แบบสำหรับไตรมาสที่ 1 และอาจเป็นไตรมาสที่ 2 เมื่อฉันเห็นมาตรฐานในกิจกรรมทางการตลาดเป็นคำปราศรัยฉันคิดว่า: "ว้าวมีเพียง 1,3x ในกรณีที่ดีที่สุดที่เลือกไว้เราจะได้ผลลัพธ์โดยเฉลี่ยเท่าไร 0.3x"
Amin Negm-Awad

5

Objective-C ยื้อทุกวิธีการโทร

สมมติฐาน:มาตรฐานใช้การพิมพ์แบบสแตติกเพื่อให้ Swift compiler ยกcompareวิธีการค้นหาออกจากsortลูป สิ่งนี้ต้องการการ จำกัด ชนิดแคบ ๆ ที่อนุญาตเฉพาะวัตถุที่ซับซ้อนในอาร์เรย์ไม่ใช่คลาสย่อยของ Complex

(ใน Objective-C คุณสามารถยกเมธอดการค้นหาได้ด้วยตนเองถ้าคุณต้องการจริงๆโดยการเรียกใช้การสนับสนุนรันไทม์ภาษาเพื่อค้นหาตัวชี้เมธอดคุณควรแน่ใจว่าอินสแตนซ์ทั้งหมดในอาเรย์นั้นมีคลาสเดียวกันมาก .)

สมมติฐาน: Swift ปรับการนับการอ้างอิงให้เหมาะสมออกจากลูป

สมมติฐาน:มาตรฐาน Swift ใช้โครงสร้างที่ซับซ้อนแทนวัตถุ Objective-C ดังนั้นการเปรียบเทียบการเรียงลำดับจึงไม่จำเป็นต้องใช้วิธีการแบบไดนามิก (เนื่องจากไม่สามารถแบ่งเป็นคลาสย่อยได้) หรืองานนับอ้างอิง (เนื่องจากเป็นประเภทค่า)

(ใน Objective-C คุณสามารถย้อนกลับไปที่ C / C ++ สำหรับการทำงานได้ตราบใดที่มันไม่ได้มีวัตถุ Objective-C เช่นเรียงลำดับอาร์เรย์ C ของ structs)


3

สุจริตเว้นแต่พวกเขาจะปล่อยซอร์สโค้ดให้กับการทดสอบที่พวกเขาใช้ฉันจะไม่เชื่อในสิ่งที่ Apple พูดในเรื่อง โปรดจำไว้ว่านี่เป็น บริษัท ที่เปลี่ยนจาก PPC เป็น Intel โดยพิจารณาจากปัญหาด้านพลังงานเมื่อ 6 เดือนก่อนหน้านี้พวกเขาบอกว่า Intel ดูดและเผากระต่ายกระต่ายจริง ๆ ในเชิงพาณิชย์ ฉันต้องการดูหลักฐานที่ปฏิเสธไม่ได้อย่างหนักว่า Swift นั้นเร็วกว่า ObjC ในหมวดหมู่มากกว่าการเรียงลำดับ

นอกจากนี้คุณต้องตั้งคำถามสถิติใด ๆ ที่วางจำหน่ายที่ WWDC เนื่องจากมีกลิ่นของการตลาดอยู่ทั่ว

ทั้งหมดที่กล่าวมานั้นฉันไม่ได้ทำการทดสอบใด ๆ ระหว่าง swift และ ObjC ด้วยตัวเอง แต่จากสิ่งที่ฉันรู้ว่า swift นั้นมีส่วนขยาย LLVM IR ของตัวเองและเป็นไปได้ที่การเพิ่มประสิทธิภาพจะเสร็จสิ้นในการรวบรวมมากกว่า ObjC

การเปิดเผยแบบเต็ม: ฉันกำลังเขียนคอมไพเลอร์ Swift โอเพนซอร์สที่ตั้งอยู่ที่https://ind.ie/phoenix/

หากใครต้องการที่จะช่วยให้แน่ใจว่า Swift ไม่ได้มีอยู่ในฮาร์ดแวร์ของ Apple เท่านั้นโปรดแจ้งให้เราทราบและฉันยินดีที่จะรวมคุณ


2
นี้อ่านเพิ่มเติมเช่นความคิดเห็นขาดดูวิธีการตอบ
gnat

2
ตอนนี้มันดีกว่าไหม? :)
greg.casamento

0

ฉันดิ้นรนกับตัวเองในการสอน Swift และสำหรับฉันแล้วดูเหมือนว่า Swift จะลงสู่พื้นดินมากขึ้น (ทำให้ฉันคิดถึง Visual Basic) ด้วย 'object-ification' น้อยกว่า Objective-C หากพวกเขานำเข้าบัญชี C หรือ C ++ ฉันคิดว่าส่วนหลังจะชนะเพราะพวกเขารวบรวมเวลามากขึ้นเท่านั้น

ในกรณีนี้ฉันเข้าใจว่า Objective-C เป็นเหยื่อของความบริสุทธิ์เชิงวัตถุ (และค่าใช้จ่าย)


13
การทำเกณฑ์มาตรฐาน "การจัดเรียงวัตถุที่ซับซ้อน" อาจเป็นเรื่องยากเล็กน้อยในภาษาเช่น C ที่ไม่มีการนำวัตถุมาใช้ เนื่องจากผู้ชมสำหรับการสนทนาครั้งนี้น่าจะเป็นโปรแกรมเมอร์ Objective-C 100% เมื่อเปรียบเทียบกับภาษาอย่าง C ++ ก็ไม่มีความหมายเช่นกัน ประเด็นที่รวดเร็วไม่ได้ "เฮ้นี่คือภาษาที่ยิ่งใหญ่ที่สุดเท่าที่เคยมีมา!" แต่ค่อนข้าง "เฮ้นี่เร็วกว่าภาษาที่คุณใช้ตอนนี้สำหรับการพัฒนา OSX / iOS"
Bryan Oakley

10
C มีการปรับอย่างสมบูรณ์qsortซึ่งจะช่วยให้การเรียงลำดับวัตถุที่ซับซ้อน; มันใช้การเรียกกลับที่เข้าใจวัตถุในมือ ฉันสงสัยว่า C ++ หายไปเพราะstd::sortจะทำให้สวิฟท์อึดอัดใจ (เนื่องจากเป็นแม่แบบ c ++ คอมไพเลอร์อย่างมากสามารถเพิ่มประสิทธิภาพของมันถึงห่วงคลี่.)
MSalters

@MSalters: ฉันเห็นด้วยกับคุณอย่างเต็มที่ ทั้ง C และ C ++ มีความสามารถในการใช้งานเหนือกว่า Swift เป็นไปได้ไหมที่จะได้รับการทดสอบที่ดำเนินการ ฉันมากกว่าเต็มใจที่จะใช้มาตรฐานเดียวกันกับ Swift, Objective-C, C ++ และ C.
ทาสีดำ

@BryanOakley ด้วย "ภาษานี้ต้องใช้วงเล็บเหลี่ยมที่น้อยกว่า!"
Nick Bedford

1
คำตอบนี้ไม่ได้ถือน้ำเลยและทำให้เข้าใจผิดอย่างน่ากลัว OO ไม่ช้าจริง ๆ แล้วระบบที่เร็วที่สุดที่คุณจะพบคือ C ++, Java และ C # และรูปแบบ (อย่างหนัก OO หรือไม่) ของการเขียนโปรแกรมจะมีผลต่อความเร็วที่น้อยมากเว้นแต่คุณจะมีจริงๆ รหัสไม่ดี
Bill K
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.