รวบรวมทางเลือกสมัยใหม่เพื่อ C / C ++ [ปิด]


38

ฉันกำลังพิจารณาที่จะเขียนผลิตภัณฑ์ซอฟต์แวร์ใหม่ ประสิทธิภาพจะมีความสำคัญดังนั้นฉันจึงระมัดระวังในการใช้การตีความหรือภาษาหรือสิ่งที่ใช้เลเยอร์การจำลอง (อ่าน java)

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

มีทางเลือกอื่นใดที่ทันสมัยกว่าสำหรับการเขียนโค้ดที่รวบรวมประสิทธิภาพสูง?

ถ้า C ++ เป็นสัตว์ร้ายที่แตกต่างจากเมื่อ 15 ปีก่อนฉันจะพิจารณาฉันเดาว่าฉันมีข้อสันนิษฐานว่ามันมีปัญหาบางอย่าง

การขนานจะมีความสำคัญ แต่อาจไม่ได้อยู่ในหลาย ๆ เครื่อง


21
Modern C ++ นั้นแตกต่างจาก C อย่างสิ้นเชิงมันเปรียบได้กับ Java หรือ C # มากกว่า C แต่มันมีคุณสมบัติในการทำลายล้างมากกว่าการเก็บขยะและยังมีพฤติกรรมที่ไม่ได้กำหนดเนื่องจากมันไม่ทำงานใน VM สิ่งแวดล้อม ทางเลือกอื่นของคุณคือ D ซึ่งเป็นภาษาที่เหมาะสม แต่ก็ยังไม่สมบูรณ์ในแง่ของห้องสมุดและการสนับสนุน
ชาร์ลส์ซัลเวีย

11
คุณสามารถอธิบายรายละเอียดเกี่ยวกับส่วน "ประสิทธิภาพจะเป็นสิ่งสำคัญ" ได้หรือไม่? เหตุใดจึงสำคัญ คุณวัดอะไรบ้างหรือยัง
JesperE

3
15 ปีเป็นศัพท์ทางคอมพิวเตอร์และตราบใดที่คนอย่าง Ericsson ใช้ภาษาที่ใช้งานได้เช่นErlangเพื่อรองรับแอพพลิเคชั่นแบบกระจายความผิดพลาดซอฟท์เรียลไทม์แบบไม่หยุดยั้งในระบบฝังตัว! อย่าสันนิษฐานว่ามีเพียงซีพลัสพลัสเท่านั้นที่จะให้ประสิทธิภาพที่คุณต้องการคุณอาจจะดีกว่าที่จะทิ้งฮาร์ดแวร์ที่มีปัญหาและประหยัดเวลาในการติดตั้งใช้งานด้วยภาษาอื่น
Mark Booth

5
@JeremyFrench: แต่คุณกำลังถามคำถามตามสมมติฐานที่ผิด ๆ ประสิทธิภาพนั้น => การรวบรวมแบบคงที่
vartec

4
สำหรับสิ่งที่คุ้มค่าปัจจุบัน Haskell ทำหน้าที่แทน C ++ ของฉันในกรณีส่วนใหญ่
Jon Purdy

คำตอบ:


54

มีภาษาที่ใช้ในการพัฒนาที่เรียกว่าThe Rust Programming Languageซึ่งดำเนินการตามเป้าหมายที่คล้ายกันเช่น C ++ โดยเฉพาะอย่างยิ่งบทคัดย่อที่ไร้ค่าใช้จ่ายและควบคุมการจัดการหน่วยความจำได้อย่างดีเยี่ยม ที่กล่าวว่ามันอาจจะเป็นผู้สมัครที่จะเกิดขึ้นที่โดดเด่นที่สุดแม้จะยังเด็กมาก

นอกเหนือจากสนิมแล้วยังไม่มีทางเลือกยอดนิยมอื่น ๆ ที่รวบรวมรหัสพื้นเมือง แน่นอนว่า Delphi และ D ก็มีเช่นกัน แต่ไม่เร็วยอดนิยมหรือใช้งาน ภาษา Go ของ Google อาจเป็นตัวเลือก แต่ก็ยังเด็กและมีจุดมุ่งหมายสำหรับโดเมนที่แตกต่างกันเล็กน้อย

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

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


5
ฉันจะไม่พูดว่าฟังก์ชั่น C นั้น "เลิกใช้แล้ว" ในแง่ที่เป็นทางการ - เพียงว่าแทบจะไม่มีเหตุผลเลยที่จะใช้ฟังก์ชั่น C library, พอยน์เตอร์พอยน์เตอร์หรือ C-arrays ใน C ++
ชาร์ลส์ซัลเวีย

20
+1 สำหรับการพูดคุยกับสมมติฐาน 'จำเป็นต้องมีการรวบรวมเพื่อประสิทธิภาพ'
Telastyn

3
@gbjbaanb พยายามคอมไพล์ด้วย Visual Studio และ MinGW ภายใต้ Windows และขอให้โชคดีกับ: | พยายามโน้มน้าวใจคน ๆ หนึ่งที่ให้คุณรวบรวมไลบรารีที่รวบรวมด้วยหนึ่งในเครื่องมือนี้ที่ไม่รู้อะไรเกี่ยวกับ ABIs ว่าเขาผิดและเขาควรให้ที่มาของห้องสมุดนั้นหรือเรียนรู้วิธีการคอมไพล์ใหม่และให้รายละเอียดที่ถูกต้อง . สยองขวัญบางครั้ง
user827992

5
@paxRoman: คุณสามารถเขียนโปรแกรมขนาดเล็กใน C ++ และเขียนอย่างปลอดภัยมากกว่าที่คุณสามารถทำได้ใน C.
kevin cline

3
@JBRWilkinson เท่าที่ฉันทราบความนิยมของ Objective-C นั้นไม่มีอยู่นอกแพลตฟอร์มของ Apple
zxcdw

19

นอกจากนี้ยังมีAdaซึ่งรวบรวมรหัสภาษาและสามารถพกพาข้ามแพลตฟอร์มต่าง ๆ ภายในขอบเขตของไลบรารีมาตรฐาน ภาษายังมีชีวิตอยู่และดีอยู่ขณะนี้มีการอัปเดตมาตรฐานภาษาล่าสุดอยู่ในขณะนี้ (รู้จักกันในชื่อ Ada 2012)

สรุปด่วนสำหรับผู้ที่ไม่คุ้นเคยกับ Ada:

  • ขอพิมพ์
  • มีระบบรองรับการทำงานพร้อมกันในตัว
  • เชิงวัตถุหรือขั้นตอนขึ้นอยู่กับความต้องการของคุณ
  • สนับสนุนโดย GNU toolchain (GCC มีส่วนหน้าของ Ada)
  • สุดยอดสำหรับการพัฒนาซอฟต์แวร์เช่นเมื่อคุณต้องการติดต่อกับฮาร์ดแวร์โดยตรง
  • รองรับการเขียนโปรแกรมทั่วไป (แพ็คเกจทั่วไป, ขั้นตอน, ฟังก์ชั่น)
  • คุณสมบัติสนับสนุนการพัฒนาซอฟต์แวร์ขนาดใหญ่ (แพ็คเกจ, แพ็คเกจเด็ก, การรวบรวมแยกต่างหาก, ความแตกต่างที่เข้มงวดระหว่างข้อกำหนดและการนำไปใช้)

1
ไม่ต้องพูดถึง Ada Tasks (Parallelisation!)
NWS

6
+1: ฉันได้ลองเรียน Ada แล้วและฉันคิดว่ามันเป็นภาษาที่แข็งแกร่งและสะอาด น่าเสียดายที่มีงานไม่มากนักสำหรับภาษาโปรแกรมอื่น ๆ
Giorgio

3
พูดถึงดีฉันกำลังมองหาบางสิ่งที่ 'ทันสมัย' มากขึ้น แต่ฉันลืมเกี่ยวกับ Ada
Jeremy French

4
@Jeremy French: คุณกำลังมองหาฟีเจอร์อะไรในภาษา 'ทันสมัย' ที่ Ada ไม่ได้นำเสนอ?
Giorgio

17

ถ้า C ++ เป็นสัตว์ร้ายที่แตกต่างจากเมื่อ 15 ปีก่อนฉันจะพิจารณาฉันเดาว่าฉันมีข้อสันนิษฐานว่ามันมีปัญหาบางอย่าง

15 ปีที่แล้วไม่มีมาตรฐาน C ++ รายการที่สองได้รับการเผยแพร่เมื่อปีที่แล้ว แนวทางปฏิบัติที่ดีที่สุด C ++ เปลี่ยนแปลงมากใน 5 ปีหลังจากการประกาศของมาตรฐาน 98 และพวกเขากำลังเปลี่ยนแปลงอีกครั้งด้วยการเผยแพร่ 11


12

ทำไมผู้คนมักจะมองหาภาษาใหม่ ๆ อยู่เสมอ?

C ++:

  • เป็นภาษาหมายเลข 4 ของ TIOBE แต่หยุดการแข่งขันทั้งหมดหากรวมกับ C
  • มีกรอบมากมาย
  • ง่ายมากในการเขียนโค้ด
  • ปรับจูนได้ง่ายมาก
  • มีประสิทธิภาพมาก
  • มีความปลอดภัยมาก
  • มีการสนับสนุนอุตสาหกรรมที่ดีมาก
  • เป็นแพลตฟอร์มข้าม
  • ไม่ต้องการ VMs / Frameworks / deployment เพิ่มเติมหากทำอย่างถูกต้อง
  • จะทำให้คุณหางานได้ง่าย
  • มีสิ่งที่จำเป็นทั้งหมดในการสร้าง. so / .dll เพื่อเปิดตัวในระบบที่เก่ามาก
  • ง่ายต่อการแก้ไขปัญหา
  • แสดงออกมาก
  • แบบไดนามิกมาก
  • และสิ่งที่น่าสนใจอื่น ๆ อีกมากมาย

ข้อเสียเดียวของ C ++ คือคุณต้องเรียนรู้เล็กน้อย แค่นั้นแหละ.

เปรียบเทียบกับภาษาอื่น ๆ ที่มีอย่างน้อยหนึ่งรายการ:

  • รองรับแบบแคบ (OCML, Fortran, ... )
  • ช้า (Java, Javascript)
  • การทดลอง (Silverlight)
  • เป้าหมายที่กำลังเคลื่อนที่ (.NET 1/2/3/4/5? อันไหนเป็นอันสุดท้าย)
  • แพลตฟอร์มถูกล็อค (. NET)
  • มีการสนับสนุนกรอบที่ไม่ดี (Fortran)
  • มีชุมชนเล็ก ๆ (ทุกอย่างอยู่นอก 10 อันดับแรก)
  • ฝันร้ายที่จะแก้ไขปัญหา (สิ่งใดก็ตามที่มีแนวคิดและสิ่งที่พิสูจน์ได้ในระดับสูง)
  • ต้องการการ preallallation 500MB บนเครื่องลูกค้า (JVM / .NETVM)

IMHO ภาษาที่เราใช้และสนับสนุนน้อยกว่าสถานการณ์ก็จะดีขึ้น

สิ่งนี้ทำให้การปรับปรุงโดยอัตโนมัติในกรอบงานสำหรับภาษา, การสนับสนุน, เอกสาร, คณะกรรมการกำหนดมาตรฐาน, หนังสือที่ดีกว่า, ความรู้เพิ่มเติม, ง่ายต่อการสนับสนุนซอฟต์แวร์, รูปแบบที่ดีขึ้น, รอบการสนับสนุนภาษาที่ยาวขึ้น

ฉันรู้ว่าผู้คนจะลงคะแนนในที่นี้ แต่คิดเกี่ยวกับมันจริงๆ


71
C ++“ ง่ายต่อการเขียนโค้ด” เป็นความผิดที่น่าขันขออภัย มันเป็นภาษาที่ยากอย่างไม่น่าเชื่อที่จะเรียนรู้และแม้ว่าคุณจะใช้สำนวน C ++ และตัวชี้หลีกเลี่ยงที่ทันสมัยคุณจะต้องเผชิญหน้ากับคอมไพเลอร์ที่ทำให้งงและข้อผิดพลาดมากมายก่อนที่จะหยุดมัน และแม้หลังจากที่คุณชำนาญแล้วไวยากรณ์ก็เข้ามาบ่อยครั้ง Safe C ++ มักใช้เทมเพลตที่ซ้อนกันซึ่งสร้างรหัสจำนวนมาก
Konrad Rudolph

20
แสดงออกมากและมีความเคลื่อนไหวไม่ได้ฟังดูเหมือนลักษณะ C ++ ทั่วไปเมื่อเปรียบเทียบกับภาษาแบบไดนามิก
vartec

29
@gbjbaanb“ ยากที่จะเรียนรู้เพิ่มเติมเล็กน้อย” คืออีกครั้งที่ปิดเครื่องหมายอย่างน่าขัน ขอโทษ ฉันเขียนโปรแกรมภาษาเหล่านั้นเป็นเวลาหลายปีฉันชอบ C ++ (และเขียนโปรแกรมอย่างจริงจังที่สุดในนั้น) แต่การบอกว่ามันง่ายเป็นเพียงการเข้าใจผิดทั้งหมด และฉันไม่ได้พูดถึงเรื่อง metaprogramming ที่น่าสนใจฉันกำลังพูดถึงข้อผิดพลาดของคอมไพเลอร์ที่เกิดจากการเรียกใช้โค้ดที่เกิดจากการซ่อนชื่อ, ADL, constปัญหาความถูกต้องและสิ่งต่างๆ ทุกคนที่ได้อ่านC ++ที่มีประสิทธิภาพ (ตามที่ Coder อ้างว่ามี) และยืนยันว่า C ++ นั้นเป็นเรื่องง่าย
Konrad Rudolph

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

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

11

C / C ++ ค่อนข้างยาวในฟัน .... นี้เป็นสิ่งที่ดี หมายความว่าพวกเขาได้รับการออกแบบมาอย่างดีพอ (ahem) ว่าพวกเขายังคงใช้งานได้ดีหลายคนใช้พวกเขาสำหรับงานประจำวันและคุณจะพบว่ามีนักพัฒนาจำนวนมากที่เป็นผู้เชี่ยวชาญในพวกเขา ครบกำหนดเป็นสิ่งที่จะรัก

หากคุณใช้เวลาค้นหาสิ่งใหม่เพียงเพราะสิ่งใหม่และคิดว่านั่นจะต้องดีกว่าคุณอยู่ในความผิดหวังมากมาย สิ่งนี้ใช้กับภาษาซอฟต์แวร์, ระบบ GUI (จดบันทึก, Microsoft และ Gnome) และคนรัก (จดบันทึก, หญิงสาว :))

ตอนนี้เป็นที่ยอมรับหากประสบการณ์ C ++ ของคุณมีอายุ 20 ปีเมื่อรหัส C ++ ถูกเขียนรหัสเหมือน C ดังนั้นอาจถึงเวลาที่จะประเมินภาษาใหม่อีกครั้งคุณสมบัติทั้งหมดที่มีในวันที่ไม่เคยถูกใช้มาก่อน วันนี้มีอีกมากและความพยายามในการสร้างมาตรฐานสองสามภาษาได้ขยายภาษาไปเล็กน้อยเพื่อให้ดูเหมือนแตกต่างจากการพัฒนาสไตล์ C เก่าเหล่านั้นมาก ไม่ใช่ว่า C ก็แย่เหมือนกัน - มันเป็นภาษาที่สมบูรณ์แบบสำหรับงานเขียนโค้ดหลายประเภทด้วยเช่นกัน!


16
ฉันคิดว่า C และ C ++ เป็นตัวอย่างความคิดเห็นของ Hoare เกี่ยวกับการออกแบบซอฟต์แวร์: ทำให้มันง่ายมากที่เห็นได้ชัดว่าไม่มีข้อบกพร่องหรือทำให้มันซับซ้อนจนไม่มีข้อบกพร่องที่ชัดเจน
TMN

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

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

@gbjbaanb ไม่ฉันไม่เคยพูดแบบนั้น ฉันวาดภาพอุปมาโดยเฉพาะกับความเสียหายที่เกิดจากการไม่ปรับปรุงบริบทของสถานการณ์ โดยทั่วไปแล้วฉันค่อนข้างมีเหตุผลและไม่ชอบ "fanboi" การเลือกหัวข้อหรือเครื่องมือที่ได้รับความนิยม (นี่เป็นเพียงธรรมชาติของฉัน) นอกจากนี้ C และ C ++ เป็นภาษาที่แตกต่างกัน แต่พวกเขาทั้งสองเป็นธรรมด้วยเหตุผลที่ว่างเปล่าเดียวกัน และนั่นคือปัญหาที่เกิดขึ้นกับสิ่งนั้น
2864740

8

มาตรฐานปัจจุบันของ C ++ คือC ++ 11ซึ่งเผยแพร่ในปี 2011 ดังนั้นจึงไม่ใช่มาตรฐานเก่า 20 ปี และมีมาตรฐานมากมายในระหว่างนั้น แต่ละคนแนะนำการปรับปรุงประสิทธิภาพมากมาย

คอมไพเลอร์ยังได้รับการปรับปรุงอย่างต่อเนื่อง พวกเขาดีกว่าที่จะเพิ่มประสิทธิภาพมากกว่าที่เคยเป็น

รูปแบบที่ทำงานได้ดีขึ้นเช่นกันเมื่อ 20 ปีก่อนคุณมีa.outตอนนี้คุณมีเอลฟ์แล้ว

โดยรวมแล้วข้อเสนอแนะที่ C ++ ไม่ได้เปลี่ยนแปลงใน 20 ปีนั้นไม่สามารถเกิดขึ้นได้จากความจริง

นอกจากนี้โปรดทราบว่า C และ C ++ เป็นภาษาที่แตกต่างกันมาก


2
ข้อสันนิษฐานของฉันคือสิ่งที่เกิดขึ้นครั้งแรกเมื่อ 20 ปีก่อนจะมีข้อ จำกัด ทางสถาปัตยกรรมโดยธรรมชาติซึ่งสามารถปรับปรุงได้ด้วยกระดานชนวนที่ว่างเปล่าเท่านั้น ฉันคิดว่าสมมติฐานนี้อาจผิด
Jeremy French

4
@ JeremyFrench: ชอบสถาปัตยกรรม x86 ใช่ไหม
TMN

2
@TMN นั้นพิสูจน์หรือหักล้างข้อสันนิษฐานของฉันหรือไม่
Jeremy French

6
สถาปัตยกรรม x86 ดั้งเดิมนั้นเป็นการประนีประนอมที่น่ารังเกียจระหว่างความสามารถในการใช้งานร่วมกับรุ่น 8080 และชุดการแข่งขันกับ 68000 และ NS32032 แบ่งหน่วยความจำ (ด้วย "ไกล" และ "ใกล้" พอยน์เตอร์) เพียง 4 จุดประสงค์ทั่วไป - การเข้ารหัสคำสั่งการเข้ารหัสคำสั่งยาว - กว่า 50 รสชาติของคำสั่ง JMP, มัลติ - รัฐระบบรถเมล์ ... และวันนี้ การออกแบบขั้นพื้นฐานจะแข็งแกร่งขึ้นกว่าเดิมหลังจากการออกแบบที่สะอาด "กระดานชนวน" ยอดเยี่ยม (Alpha, MIPS, PowerPC) ล้มเหลวในการแทนที่
TMN

1
@ JeremyFrench ไม่สมมุติว่าคุณไม่ผิดอย่างน้อยก็ในกรณีของ C ++ คุณสมบัติ C ++ 11 นั้นมีประโยชน์อย่างแน่นอน อย่างไรก็ตามเมื่อมาถึงจุดนี้พวกเขาก็แค่อึบนกองอึ พวกเขาพยายามสร้างคุณลักษณะของภาษาสมัยใหม่ แต่เพื่อรับมือกับความยุ่งเหยิงของ C ++ ที่มีอยู่พวกเขาจะต้องมีข้อยกเว้นและข้อยกเว้นเหล่านั้นจะมีข้อยกเว้นและอื่น ๆ เป็นต้น
weberc2

6

ฉันไม่ใช่ผู้เชี่ยวชาญขนาดใหญ่ของภาษานี้ แต่ฉันคิดว่าOCamlอาจเป็นตัวเลือกที่น่าสนใจในการดู

OCaml เป็นภาษาที่รวบรวมการทำงาน / เชิงวัตถุ สำหรับการเปรียบเทียบประสิทธิภาพการทำงานกับ C ++ ดูc ++ VS OCaml: Ray เปรียบเทียบรอย แน่นอนว่านี่เป็นตัวอย่างที่เฉพาะเจาะจงและเราควรทำการทดสอบอย่างละเอียดมากขึ้นเพื่อให้ได้ความรู้สึกที่ดีขึ้นเกี่ยวกับประสิทธิภาพของ OCaml


ผู้ลงคะแนนโปรดให้คำแนะนำเพื่อปรับปรุงคำตอบนี้ได้อย่างไร ขอบคุณ
Giorgio

3

ขึ้นอยู่กับว่าผลิตภัณฑ์ของคุณกำลังทำอะไร ถ้าประสิทธิภาพเป็นสิ่งสำคัญจริงๆแล้วไปสู่ภาษาของทางเลือกที่ยังคง FORTRAN ฉันยังไม่ได้ออกกฎ Java - มันใช้ในแอปพลิเคชันการซื้อขายทางการเงินจำนวนมาก Erlang มีค่าดูถ้าโดเมนปัญหาของคุณต้องการการทำงานพร้อมกันสูง Object--C นั้นดี แต่ฉันก็ไม่รู้ว่ามันรองรับได้ดีแค่ไหนนอกระบบนิเวศของ Apple (นอกเหนือจากคอมไพเลอร์และรันไทม์พื้นฐาน) ฉันเคยได้ยินสิ่งดีๆเกี่ยวกับการแสดงของ Haskell ด้วย แต่ฉันไม่แน่ใจว่าเป็นการแสดงที่สมบูรณ์หรือเพียงแค่การทำงานเมื่อเทียบกับภาษาการทำงานอื่น ๆ


2
งานการเงินทุกงานที่ฉันได้ดูต้องการนักพัฒนา C / C ++ ไม่ใช่ Java จากประสบการณ์กับ Java ฉันไม่สามารถมองเห็นสิ่งใดที่มีประสิทธิภาพสูงเว้นแต่คุณจะทิ้งฮาร์ดแวร์จำนวนมากไว้ในนั้น
gbjbaanb

มีระบบการซื้อขาย Java จำนวนมากในการดำเนินงานใน Wall Street และที่ธนาคารเพื่อการลงทุนต่างๆในสหรัฐอเมริกาและสหราชอาณาจักร นอกจากนี้ยังใช้อย่างมากในการแลกเปลี่ยน Chicago Mercantile
TMN

3

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

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

สมมติว่าคุณตอบข้อที่สองของทั้งคู่คุณควรพัฒนาเป็นภาษาระดับที่สูงขึ้นซึ่งรองรับการเชื่อมต่อแบบเนทีฟ (Python, Ruby, .Net Family ทั้งหมดมีสิ่งนี้) ก่อนจบโครงการ จากนั้นทำโปรไฟล์เพิ่มประสิทธิภาพล้างทำซ้ำ หลังจากนั้นให้พิจารณาการกำหนดกลุ่มตัวเลือกอีกครั้งของแอปพลิเคชันของคุณในรหัสเนทีฟและรวมรหัสเนทีฟนั้นเข้ากับผลิตภัณฑ์ที่เสร็จสมบูรณ์ของคุณ


เมื่อเป็นจาวาคุณจะไม่สามารถกู้มันได้หากมันช้าเกินไป
Coder

6
@Coder Java มี FFI (JNI) ที่ให้คุณ 'สร้างความหายนะ' ในภาษาที่คุณเลือก ดังนั้นหากคุณออกแบบอินเตอร์เฟสได้ดีคุณสามารถแทนที่การใช้งานจาวากับอินเทอร์เฟซแบบดั้งเดิมได้ แพลตฟอร์ม Java เป็นความคิดที่ดี
K.Steff

1

วาลาจะคล้ายกับ Java และ C #, compiles รหัสท้องถิ่น (หรือรหัสที่มา C ถ้าคุณชอบ) และเป็นไปอย่างรวดเร็วมาก มันต้องใช้ GLib สำหรับบิตเชิงวัตถุและเขียนโดยแฮกเกอร์ Linux สำหรับแฮกเกอร์ Linux ดังนั้นหากโดเมนของคุณคือ Windows อาจไม่ดีมาก


1

Objective-Cเป็นทางเลือกที่ทันสมัยรวบรวมทางตรง C และ C ++ มีการจัดการหน่วยความจำทั้งที่เก็บขยะและที่กำหนดค่าได้และ OO runtime การส่งข้อความได้รับการปรับปรุงให้มีประสิทธิภาพ

สามารถใช้งานผ่าน GCC และ CLang และมีไลบรารีแอปพลิเคชันเช่น GNUStep และ Cocotron ซึ่งทำงานบนแพลตฟอร์มต่างๆ

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


0

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

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