Managed Coders vs Native Coders


19

ฉันเป็นผู้เขียนโค้ดและมีประสบการณ์เกี่ยวกับรหัสดั้งเดิมและที่จัดการ ฉันเริ่มต้นด้วย Pascal และ C จากนั้นย้ายไปที่ C ++ และในที่สุดก็กลายเป็น C #

ในช่วงปีที่ผ่านมาฉันเขียนโค๊ดใน C # และสูญเสียสิ่งที่เคยเกิดขึ้นอย่างเป็นธรรมชาติเมื่อฉันเป็น C ++

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

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

จากมุมมองทางเทคนิคไม่มีผู้ชนะที่ชัดเจน

ไม่ต้องสงสัยเลยว่ารหัสที่ได้รับการจัดการนั้นมีขนาดที่ง่ายต่อการเข้าใจและเข้าใจง่าย เพียงแค่ดูความแตกต่างของจำนวนบรรทัดที่จำเป็นในการสร้าง GUI อย่างง่ายใน Win32 C ++ เทียบกับ C #

ย้อนกลับไปในวันที่เขียนโค้ดดั้งเดิมของฉันฉันส่วนใหญ่เขียนแบบจำลองทางคณิตศาสตร์ที่วิ่งบนซูเปอร์คอมพิวเตอร์ พวกเขามี CLIs ที่น่าเกลียดและส่วนใหญ่จะเน้นอัลกอริธึม ทุกวันนี้ฉันเขียนด้วยภาษา C # และผลิตแอพพลิเคชั่น GUI ที่สวยงาม แต่จะหายไปถ้าฉันต้องทำสิ่งที่มีความสามารถคล้ายกันกับภาษาพื้นเมือง แม้ว่าจะมีเฟรมเวิร์กเช่น QT มันก็ยังคงใช้เวลานานเป็นสองเท่าในการสร้างบางสิ่งใน C ++ / QT กว่าที่จะเป็นใน C #

เมื่อใดก็ตามที่ฉันเห็นคนที่เขียนแอปพลิเคชั่น GUI ขนาดใหญ่เต็มรูปแบบใน C / C ++ ฉันไม่สามารถช่วย แต่รู้สึกถึงความกลัวและความหึงหวง

ฉันอยากรู้ว่านักเขียนโค้ดที่มีประสบการณ์คนอื่นเห็นภาษาที่มีการจัดการและไม่มีการจัดการอย่างไร คุณเห็นโค้ดที่ถูกจัดการในรูปแบบamateur-ishหรือไม่? คุณเห็นโค้ดเนทีฟเป็นฮาร์ดคอร์มากกว่าหรือไม่

java  .net 

คำตอบ:


26

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

  • ความไร้ประสิทธิภาพที่ถูกกล่าวหาจำนวนมากกับภาษาอื่น ๆ มักถูกนำมาใช้ใหม่โดยโปรแกรมเมอร์ C ++ เพื่อเป็นแนวทางปฏิบัติที่ดีที่สุด เราเพิ่มการตรวจสอบโมฆะอย่างเพียงพอ, การตรวจสอบขอบเขตของอาเรย์, การตรวจสอบประเภท, การตรวจสอบความถูกต้องของอินพุตและอื่น ๆ เพื่อลบล้างข้อได้เปรียบด้านความเร็วในการดำเนินการที่ได้รับโดยภาษานั้น ๆ
  • หม้อไอน้ำแบบพิเศษนั้นจะกลายเป็นนิสัยที่ฝังแน่นหลังจากผ่านไประยะหนึ่งเพื่อให้มันไม่ได้รู้สึกเหมือนเป็นงานพิเศษและจะดึงออกมาเหมือนนิ้วโป้งที่เจ็บเมื่อมันหายไป
  • เมื่อฉันเขียนโปรแกรมในภาษา "ที่จัดการ" ฉันยังคงคิดถึงการจัดสรรหน่วยความจำเพื่อให้แน่ใจว่าฉันจะไม่สร้างหน่วยความจำรั่ว ฉันอาจไม่ชัดเจนdeleteแต่ฉันก็ยังทราบอยู่ในใจถึงจุดที่ตัวเก็บรวบรวมขยะเห็นว่ามันเหมาะสมสำหรับการลบ ฉันมีปัญหาในการแก้ปัญหาหน่วยความจำเหลือน้อยที่เริ่มต้นใน Java มากกว่าที่ฉันเคยทำใน C ++ อาจเป็นเพราะใน C ++ พวกเขายากที่จะเพิกเฉยต่อความยากมาก
  • กันไปสำหรับการพิมพ์แบบไดนามิก ฉันยังต้องติดตามในหัวของฉันว่าพารามิเตอร์ฟังก์ชั่นเป็นอาร์เรย์หรือ int หรือสตริง ที่จริงแล้วมันต้องใช้ความพยายามมากขึ้นเพราะประเภทไม่ได้ระบุไว้อย่างชัดเจนสำหรับฉัน
  • สไตล์ C ++ ที่ทันสมัยแตกต่างจากยุคก่อนยุค แทนที่จะเปลี่ยนภาษาคน "ค้นพบ" วิธีการใช้คุณสมบัติ C ++ ที่มีอยู่ในรูปแบบที่ไม่ซ้ำกันเพื่อหลีกเลี่ยงการจัดการหน่วยความจำแบบไม่ต้องคิดมากในอดีต รูปแบบการออกแบบที่หน่วยความจำฟรีโดยอัตโนมัติเป็นเรื่องธรรมดามากในขณะนี้
  • เท่าที่ฉันรู้ถึงแม้ว่ามันจะเป็นไปได้ที่จะสร้างแอพพลิเคชั่น GUI ด้วยการเขียนโค้ดเพียงอย่างเดียว แต่นักออกแบบกราฟิกเช่นนักออกแบบ QT นั้นเป็นวิธีที่นิยมใช้กันอย่างแพร่หลาย
  • ภาษาที่คุณไม่ได้ใช้อย่างกว้างขวางในขณะที่มักรู้สึกอึดอัดเล็กน้อยแม้ว่าคุณจะจำไวยากรณ์ส่วนใหญ่ได้ ถ้าฉันไม่ได้เขียนหลามเป็นเวลาหนึ่งปีมีความแปลกประหลาดมากมายที่ฉันลืมไปและมันก็รู้สึกอึดอัดใจกว่า C ++ สักพักหนึ่งแม้ว่าคนส่วนใหญ่จะใช้ภาษาไพ ธ อนว่า "ง่ายขึ้น" ก็ตาม

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

ฉันเดาสิ่งที่ฉันพยายามจะพูดคือในประสบการณ์ของฉันการฝึกอบรมของโปรแกรมเมอร์สร้างความแตกต่างมากกว่าภาษาที่เขาใช้


20

คุณเห็นโค้ดที่ถูกจัดการในรูปแบบ amateur-ish หรือไม่? คุณเห็นโค้ดเนทีฟเป็นฮาร์ดคอร์มากกว่าหรือไม่

เลขที่

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

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


+1 แต่โปรดจำไว้ว่านี่เป็นผลกระทบทางเศรษฐกิจ - หากรอบการคำนวณมีค่าใช้จ่าย $ 1m ดังนั้นการปรับให้เหมาะสมที่สุดจะเป็นกฎ - หรือเราจะไม่รบกวนคอมพิวเตอร์เลย ...
Gary Rowe

10
ยกเว้นว่าเราจะเห็นประสิทธิภาพโดยรวมลดลง - Word6 ทำงานเหมือนแสงบนฮาร์ดแวร์ที่ทันสมัย ​​Word2010 ใช้เวลาโหลดเพียงครู่เดียว วันนี้เราต้องการฮาร์ดแวร์ที่เร็วสุด ๆ เพื่อให้ทันกับโปรแกรมเมอร์!
gbjbaanb

2
@gbjbaanb: ไม่ว่าโปรแกรมเมอร์จะเลือกอะไร codebase ที่ใหญ่พอจะช้า IIRC, Word ยังคงเขียนใน C ++ (และฉันยินดีที่จะเดิมพันว่าส่วนสำคัญของรหัส Word 6 ดั้งเดิมทั้งหมดยังคงอยู่ที่นั่น)
Steven Evers

2
@gbjbaanb, Word 2010 ไม่ใช่ Word 6 ที่เขียนซ้ำโดยตรงใน. NET มันเพิ่มคุณสมบัติอีกมากมายและต้องจัดการกับสถานการณ์การใช้งานอื่น ๆ อีกมากมาย มันเป็นมากมากแอพลิเคชันที่มีขนาดใหญ่กว่าของ Word 6
เมอร์เซี Chirea

6

น่าเศร้าที่ Microsoft ได้นำเราไปสู่การ "จัดการรหัส" กับ C # /. Net class Libraries

มีสองสิ่งที่แยกกันและเกือบจะไม่เกี่ยวข้องกับการเล่นที่นี่

  1. ห้องสมุด. Net ที่ยอดเยี่ยม

  2. รหัสที่ได้รับการจัดการ

C # เสนอทั้งในแพคเกจที่เป็นระเบียบสนับสนุนง่ายต่อการใช้งานในราคาเดียว

C ++ มีไลบรารี่มากมายที่ทำทุกอย่างที่. Net ทำ แทนที่จะโทษรหัส "เนทีฟ C ++" ว่ามี "ความซับซ้อน, นิสัยใจคอและ idiosyncrasies" มากกว่า C # /. รหัสเน็ตคุณสามารถมองหาไลบรารี่ C ++ ที่ดีกว่า

ไลบรารี่ที่ดีกว่าช่วยให้คุณสามารถเขียนรหัส C ++ ได้เช่นกัน

เมื่อใดก็ตามที่ฉันเห็นคนที่เขียนแอปพลิเคชั่น GUI ขนาดใหญ่เต็มรูปแบบใน C / C ++ ฉันไม่สามารถช่วย แต่รู้สึกถึงความกลัวและความหึงหวง

นโยบายไม่ดี แต่คุณควรค้นหาว่าห้องสมุดใดที่ใช้คำจำกัดความของชั้นเรียน คุณก็สามารถใช้ไลบรารีเหล่านั้นได้เช่นกัน

มันคือทั้งหมดที่เกี่ยวกับเครื่องมือ หากไม่มีเครื่องมือเราเป็นแค่สัตว์ในกางเกง

"Native C ++" ไม่ได้หมายความว่าคุณควรทิ้งเครื่องมือทั้งหมดของคุณ หมายความว่าคุณต้องหาเครื่องมือที่ดี Microsoft ไม่ได้ให้ความช่วยเหลือคุณอีกต่อไปดังนั้นคุณต้องใช้เวลาในการค้นหาเครื่องมือที่เหมาะสม


+1 สำหรับ "ลองค้นหาสิ่งที่พวกเขาใช้" แต่ตรงไปตรงมาฉันคิดว่านี่ไม่ใช่เรื่องดีสำหรับสัตว์ที่ใช้เครื่องมือหรือสัตว์ที่สวมกางเกงในบางโอกาส
Ian Pugsley

@ Ian Pugsley: สัตว์ที่สวมกางเกง แต่ไม่ได้ใช้เครื่องมืออาจถือว่าโอเคกับสถานะของพวกเขาในฐานะสัตว์ แต่คุณพูดถูกที่สัตว์ใช้เครื่องมือที่ไม่มีกางเกงอาจทำให้อารมณ์เสีย ตัวอย่างเช่นภรรยาของฉันไม่ชอบใส่กางเกงและใช้เครื่องมือ บางทีเธอจะไม่อ่านคำถามนี้
S.Lott

เราทำได้เพียงหวัง (และเดิมพันในโอกาสที่ค่อนข้างสูง) ทั้งหมดที่ฉันพูดคือฉันจะไม่ดูถูกสัตว์ที่ฉลาดพอที่จะใส่กางเกงคู่ ... ในกรณี
Ian Pugsley

ใช่ซึ่งแตกต่างจากห้องสมุดมาตรฐานของ C #, C ++ นั้นเก่าและขาดความต้องการที่ทันสมัย ​​(GUI, อินเตอร์เฟสเครือข่ายที่ยอดเยี่ยม ฯลฯ )
Moshe Revah

Microsoft ช่วยเหลือคุณด้วย C ++ ใน Windows 8 อีกครั้ง (พื้นผิวการพัฒนา Windows 8 ทั้งหมดเป็นรหัสเนทีฟและ C ++ เป็นพลเมืองชั้นหนึ่งพร้อมด้วย C # และ JavaScript): msdn.microsoft.com/en-us/library/windows/ apps / …
Zach

5

ปัญหาที่นี่ไม่ได้เกี่ยวกับการเขียนโปรแกรมไม่ยอมใครง่ายๆหรืออะไรแบบนั้นมันเกี่ยวกับการควบคุม ความจริงก็คือ C # ให้ผลผลิตที่ต้นทุนการควบคุม หากคุณกำลังเขียนโปรแกรมที่ต้องการการควบคุมในระดับสูง (หน่วยความจำนี้จะถูกจัดสรรคืนอย่างแน่นอน) คุณก็ไม่มีทางเลือกนอกจากต้องใช้ C ++ หากคุณต้องการทำให้เสร็จอย่างรวดเร็วคุณอาจต้องใช้ C # ปัญหาคือไลบรารีที่สนับสนุนสำหรับ C # นั้นดีกว่าและใหม่กว่าที่ระบุไว้สำหรับ C ++ ตัวอย่างเช่น MFC นั้นเก่ามากและเป็นที่ทราบกันดีว่าการปฏิบัตินั้นแย่มากส่วนใหญ่จะเขียนไว้นานก่อนกำหนดมาตรฐาน ถ้า Microsoft ใช้ความพยายามในการจัดหาไลบรารี่ C ++ ใหม่ให้ลองดู PPL ใหม่ใน Visual Studio 2010 จากนั้นก็แปลกมากพองานนั้นจะกลายเป็นเรื่องง่ายใน C ++ และฉันคิดว่าพวกเขากำลังอพยพด้วยวิธีนี้

ในทางกลับกันโค้ดที่ได้รับการจัดการมีตัวรวบรวมขยะและการเพิ่มประสิทธิภาพ CPU เฉพาะเวลาทำงานและการปรับแต่งเฉพาะระบบปฏิบัติการซึ่งสามารถให้โค้ดเนทีฟสำหรับเงินของตนได้

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

การรวบรวมขยะไม่ใช่สิ่งที่ยอดเยี่ยมอย่างน่าอัศจรรย์หรือเป็นอย่างนั้น - มันเป็นตัวเลือกอัลกอริธึม เหมาะสมกับทุกสถานการณ์หรือไม่? โดยไม่ได้ดูห่างไกลที่ระเบียบ IDisposable ใน C # และวิธี Java ไม่ได้รำคาญที่จะลองกับปัญหาที่ขณะ c ++ 's destructors จะปิดไฟล์ของคุณและเพิ่มหน่วยความจำของคุณและใกล้ซ็อกเก็ตของคุณ ฯลฯ เป็นต้น GC เป็นที่ดีสำหรับบางโปรแกรม และไม่ใช่เพื่อคนอื่น


มีความแตกต่างระหว่างโปรเซสเซอร์มากกว่า SIMD มากกว่าแม้ว่าคอมไพเลอร์ C ++ ของคุณอาจคำนึงถึงขั้นตอนการพิจารณาเช่นเดียวกับ JIT ของคุณ
Peter Taylor

สภาพแวดล้อมรันไทม์ที่เป็นไปได้ที่จะตรวจสอบสถานะของระบบและระบุการอ้างอิงที่ไม่ได้ปักหมุดวัตถุที่สามารถเข้าถึงได้สามารถตัดค่าใช้จ่ายที่เกี่ยวข้องกับ GC จำนวนมากในรูปแบบที่ไม่สามารถทำได้ใน C ++ ใน Java หรือ C # ให้String foo,bar;คำสั่งfoo=bar;จะดำเนินการสองคำสั่ง - โหลดลงทะเบียนและที่เก็บการลงทะเบียน เวลาดำเนินการคงที่โดยไม่คำนึงถึงความยาวของสตริง C ++ สามารถเข้ามาใกล้ได้หรือไม่
supercat

2

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

Btw สำหรับระดับความเป็นนามธรรมของ C # นั้นรวดเร็วอย่างเหลือเชื่อไมโครซอฟท์ทำได้ดี


2

มีโปรแกรมเมอร์ที่ชำนาญไม่ภาษาไม่ชำนาญ ภาษาที่พวกเขามีทั้งหมด (ดีส่วนใหญ่อย่างน้อย) วัตถุประสงค์ของพวกเขา

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

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

และฉันไม่รู้สึกชำนาญไม่ว่าฉันจะใช้ภาษาใดฉันก็รู้สึกอย่างนั้นถ้าฉันทำสิ่งที่โง่ที่ไม่ควรเกิดขึ้น


1

ปีที่แล้ว บริษัท ที่ฉันทำงานอยู่นั้นกลับทำวิศวกรรมการสื่อสารรหัส CRC โดยใช้กำลังดุร้าย 3 นักพัฒนาแต่ละคนมีเวอร์ชั่นของตัวเอง Borland C, C # .Net 2008, VB6 เห็นได้ชัดว่า VB6 ช้า Borland C นั้นรวดเร็ว แต่ C # .net เพิ่งเฆี่ยนด้วยความเร็ว 12 เท่า ไม่ใช่สิ่งที่เราคาดหวังเลย


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

คอมไพเลอร์ C รุ่นเก่าอาจไม่ใช้คำสั่งตัวประมวลผลล่าสุด (เช่น SSE2 และใหม่กว่า)
GrandmasterB

1
ทั้งสามภาษาได้คอมไพล์โค้ดเนทีฟที่ปรับปรุงแล้ว (VB6 / C ++ ระหว่างการคอมไพล์,. NET ระหว่าง JIT) ดังนั้นคุณอาจวัดความแตกต่างระหว่างโปรแกรมเมอร์ของคุณมากกว่าระหว่างภาษาการเขียนโปรแกรม
nikie

@nikie JIT! = การรวบรวม และคุณภาพของคอมไพเลอร์ก็แตกต่างกัน ฉันเห็นว่าอัลกอริทึมเดียวกันทำงานได้เร็วขึ้นมากเมื่อเขียนใน C ++ (ไม่มีการเรียก API เพียงแค่การอ้างอิงอาร์เรย์ลูปและเลขคณิตอย่างง่าย) กว่าใน Java แม้จะมีการพูดคุยทั้งหมดเกี่ยวกับ JIT
quant_dev

1
@quant_dev: จากประสบการณ์ของผมมีคือไม่มี bullet เงิน ;-) ประสบการณ์ของฉันกับ JIT .NET ก็คือความแตกต่างระหว่าง JIT และ MSVC ++ มีขนาดเล็กมาก ฉันสงสัยมาก 12x ทั้งสองทางสำหรับรหัสเดียวกัน
nikie

1

มันขึ้นอยู่กับการผสมผสานของสิ่งต่าง ๆ แต่โดยพื้นฐานแล้วสิ่งอื่นนั้นเท่ากันใช่รหัสเนทีฟนั้น "ง่าย ๆ " มากกว่าโค้ดที่ได้รับการจัดการ

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


1

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


1

นักพัฒนาท้องถิ่นมักจะได้รับชื่อเสียงว่าเป็นคนง่าย ๆ เพราะพวกเขารู้สึกว่าง่ายขึ้นและลงมือทำเช่นนั้น ผู้พัฒนาเนทีฟได้รับการฝึกฝนในระบบที่ไม่สามารถทนต่อความผิดพลาดใด ๆ ได้เนื่องจากพวกเขานำไปสู่การล่มอย่างหนักหรือการรั่วไหลของหน่วยความจำที่ไม่ได้ จำกัด อย่างหลีกเลี่ยงไม่ได้ โดยเฉพาะอย่างยิ่ง. NET ช่วยให้แฮ็กขี้เกียจเช่นใส่ลอง / จับทุกอย่างช่วยให้นักพัฒนาจากการคิดว่าพวกเขาต้องเข้าใจปัญหาหลัก (" บางครั้งมันก็แค่โยน InvalidOperationException ฉันไม่สามารถอธิบายได้ รหัสมีความสำคัญ! ") นี่ไม่ใช่ขาวดำ แต่การสังเกตของฉันเติบโตขึ้นในโลกที่ไม่มีการจัดการและตอนนี้ทำงานในรหัสที่ได้รับการจัดการเต็มเวลา

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

ที่กล่าวว่าการเขียนโปรแกรมที่มีการจัดการที่ดีและ shippable นั้นใช้งานได้มาก นั่นหมายถึงการทำหน่วยความจำและการทำโปรไฟล์ CPU การทดสอบหน่วยและการวิเคราะห์รหัสด้วยวิธีการที่คล้ายกันซึ่งนักพัฒนาที่ไม่มีการจัดการทำได้ นักพัฒนาที่ไม่มีการจัดการมักจะเข้าใจสิ่งนี้เกิดขึ้นและนักพัฒนาที่มีการจัดการมักจะรวมผู้ที่ไม่มี

อีกครั้งไม่ใช่ขาวดำ มีนักพัฒนาที่ไม่มีการจัดการที่ขี้เกียจจำนวนมากและผู้พัฒนาที่มีการจัดการที่ไม่ยอมใครง่ายๆ ไม่มีคำจำกัดความที่ยอดเยี่ยมกว่าอีกคำ


0

คุณเห็นโค้ดที่ถูกจัดการในรูปแบบ amateur-ish หรือไม่? คุณเห็นโค้ดเนทีฟเป็นฮาร์ดคอร์มากกว่าหรือไม่

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


ระบบการสร้างแอปพลิเคชันตามที่คุณอธิบายเป็นเพียงภาษาการเขียนโปรแกรม (และหวังว่าดีกว่า)
David Thornley

ฉันไม่คุ้นเคยกับ. NET แต่ AFAIK เป็นระบบภาษาแบบผสมซึ่งมีรูปแบบการปฏิบัติการทั่วไปที่เรียกใช้โดย VM และไลบรารีขนาดใหญ่ซึ่งสามารถใช้กับภาษา. NET ใด ๆ ระบบเดียวกันจะดีในโลกพื้นเมือง / คอมไพล์ แน่นอนว่าเป็นแพลตฟอร์มอิสระ
ern0

0

รหัสพื้นเมืองได้ง่ายขึ้นตั้งแต่ไปได้รับการปล่อยตัว ฉันพบว่าทั้งอ่านและเขียนง่ายกว่า Java และ C # แม้ว่าการเขียนโปรแกรม GUI ด้วย Go ในตอนนี้ยังไม่ดีมาก (ฉันลองดูที่ตัวเลือกอย่างรวดเร็ว)
พยายามอย่าตัดสินเพราะชุมชนขนาดใหญ่และห้องสมุดต่าง ๆเมื่อเทียบกับ C # (ตัวอย่าง) เพราะมันยังถือว่าใหม่

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