ถ้าใช่คุณจะใช้ที่ไหนและทำไม
หากไม่มีโปรดอธิบายเหตุผลที่ C ไม่เป็นที่ยอมรับของคุณ
ถ้าใช่คุณจะใช้ที่ไหนและทำไม
หากไม่มีโปรดอธิบายเหตุผลที่ C ไม่เป็นที่ยอมรับของคุณ
คำตอบ:
ฉันจะใช้ C หากฉันติดตั้งไดรเวอร์ฮาร์แวร์บางตัว และฉันจะใช้ C ถ้าฉันใช้เคอร์เนลระบบปฏิบัติการของฉันเองหรือ Virtual Machine ของตัวเอง
มันเป็นภาษาที่ดีมากในการทำสิ่งต่าง ๆ ในระดับต่ำหากคุณต้องจัดการกับฮาร์ดแวร์หรือ OS API ระดับต่ำสำหรับ Windows API, Linux, Mac OS X, Solaris และอื่น ๆ ... ระบบสมองกลฝังตัวมักจะสนับสนุน C ด้วยชุดคอมไพเลอร์ + การพัฒนา
ใช่แน่นอน ฉันจะใช้ C เพื่อเขียนชิ้นส่วนที่สำคัญของระบบหรือส่วนการสื่อสารระดับต่ำ ตัวอย่างเช่นฉันจะใช้ C เพื่อเขียนNIFsในโครงการ Erlang เพียงเพราะมันเป็นเครื่องมือที่เหมาะสม (tm) สำหรับงานประเภทนี้ หรือฉันจะใช้ C เพื่อเขียนส่วนที่คล้ายกัน (XS) ในโครงการ Perl
ฉันใช้ C อย่างมืออาชีพเกือบทุกวัน ในความเป็นจริง C เป็นภาษาระดับสูงสุดที่ฉันเขียนโปรแกรมเป็นประจำ
ตำแหน่งที่ฉันใช้ C:ฉันเขียนรหัสไลบรารี่ระดับต่ำที่มีข้อกำหนดให้มีประสิทธิภาพมากที่สุด รหัสกาวของฉันเขียนด้วยภาษา C วงวนด้านในจะถูกเขียนขึ้นในชุดประกอบ
ทำไมฉันถึงใช้ C:มันง่ายกว่ามากในการจัดการโครงสร้างอาร์กิวเมนต์ที่ซับซ้อนและเงื่อนไขข้อผิดพลาดมากกว่าในแอสเซมบลีและค่าใช้จ่ายด้านประสิทธิภาพสำหรับการตรวจสอบเงื่อนไขประเภทนั้นก่อนเริ่มการคำนวณจริงมักไม่สำคัญ เนื่องจาก C เป็นภาษาที่เรียบง่ายและเจาะจงดีฉันจึงมีเวลาทำงานร่วมกับทีมคอมไพเลอร์ที่ทำงานเพื่อปรับปรุงการสร้างรหัสเมื่อใดก็ตามที่ฉันเห็นโค้ดที่คอมไพล์ด้วยอันตรายจากประสิทธิภาพที่ยอมรับไม่ได้
การพกพาเป็นข้อดีอีกอย่างหนึ่งของ C. รหัสกาวของฉันถูกใช้ร่วมกันในการใช้งานฮาร์ดแวร์เฉพาะของห้องสมุดที่ฉันทำงานซึ่งทำให้การสนับสนุนแพลตฟอร์มใหม่ ๆ ง่ายขึ้น แพลตฟอร์มส่วนใหญ่ไม่มีเครื่องเสมือนหรือล่ามสำหรับรสชาติภาษาของเดือน บางแพลตฟอร์มไม่มีคอมไพเลอร์ C ++ ที่ดี มีแพลตฟอร์มน้อยมากที่ไม่มีคอมไพเลอร์ C ที่ใช้งานได้ (และเนื่องจากฉันมีความสัมพันธ์ที่ดีในการทำงานกับทีมคอมไพเลอร์ของเราฉันมักจะไม่ได้รับการสนับสนุนที่ฉันต้องการ)
ใช่ฉันจะใช้ C ในระบบฝังตัวที่ จำกัด ทรัพยากรอย่างรุนแรง ฉันอาจใช้ C ++ แทนเพราะทำให้ง่ายต่อการส่งเสริมการเชื่อมต่อที่แข็งแกร่งระหว่างส่วนประกอบซอฟต์แวร์ แต่เฉพาะในกรณีที่วิศวกรทุกคนที่ทำงานในโครงการเข้าใจว่า C ++ นั้นง่ายต่อการใช้งานในทางที่ผิดที่นำไปสู่การขยายขนาดโค้ด )
ฉันเห็นโปรแกรมเมอร์ C ++ ที่พยายามสร้างวัตถุ 10K บนสแต็ก 1K ไม่ใช่ความคิดที่ดี
virtual
ฟังก์ชั่นก็โอเคเพราะพวกเขาทำตามหลักการ "คุณไม่จ่ายเงินสำหรับสิ่งที่คุณไม่ได้ใช้" แต่ในสภาพแวดล้อมที่มีข้อ จำกัด ของหน่วยความจำคุณอาจต้องการปิดการใช้งานข้อยกเว้นและ RTTI
ฉันทำงานส่วนใหญ่กับ Xen hypervisor, ไลบรารีต่าง ๆ ที่มีคุณสมบัติและเคอร์เนล Linux ในบางครั้งฉันต้องเขียนโปรแกรมควบคุมอุปกรณ์ (หรือเขียนใหม่เพื่อให้เครื่องเสมือน nxx สามารถแบ่งปันอุปกรณ์เดียวเช่น HRNG) C เป็นภาษาหลักของฉันและฉันก็มีความสุขมาก
ฉันจะพยายามเขียนโปรแกรมสเปรดชีตโดยใช้มันได้หรือไม่ ไม่มีทาง. เครื่องมือแต่ละอันมีแอพพลิเคชั่นและฉันดีใจที่มีเครื่องมือมากมาย
ฉันรักซี แต่ฉันไม่ได้ลองใช้สกรูด้วยค้อน
ถ้า C เป็นตัวเลือกที่สมเหตุสมผลสำหรับโครงการใหม่แน่นอน ถ้าไม่ฉันจะใช้อย่างอื่น
ฉันต้องการบางโครงการ ถ้าฉันจะต้องติดตั้งระบบสมองกลฝังตัวเอาไว้พูดสำหรับผู้ควบคุมเครื่องบินของตนเอง อาจถึงระดับต่ำกว่าในบางส่วนที่มีการชุมนุม
ถ้ามันเหมาะกับโครงการฉันไม่มีปัญหากับมัน
หากคุณต้องการพัฒนาแอปพลิเคชันบนเว็บ hmm อาจไม่ใช่ (หรือฉันต้องการเห็นเหตุผลที่ดีและสนับสนุนข้อเท็จจริง)
ฉันจะใช้มันจากโครงการอื่น ๆ ส่วนใหญ่ที่พัฒนาด้วยภาษาอื่น ๆ เมื่อมีการระบุคอขวดอย่างชัดเจนและการเพิ่มประสิทธิภาพสามารถดำเนินการได้โดยใช้รหัสเนทีฟ ตัวอย่างเช่นโซลูชัน Java ที่ต้องมีการคำนวณอย่างละเอียดสำหรับการเรนเดอร์ขั้นสูงบางอย่าง (เช่น, เอ็นจิ้นการเรนเดอร์หรือบางอย่าง) คุณสามารถตั้งค่าเริ่มต้นให้กับการใช้งานจาวาได้หากไม่ใช่แพลตฟอร์มที่รองรับ แต่มีการติดตั้งใช้งานที่รวบรวมจาก C สำหรับแพลตฟอร์มที่รองรับและรับประสิทธิภาพที่ดี
ทุกภาษามีการใช้งานที่เหมาะสม ฉันพบว่าตัวเองกำลังนำสิ่งต่าง ๆ ไปใช้ในภาษาระดับสูงกว่าจากนั้นค่อยนำพวกเขาลงไปที่ C-land หากฉันต้องการให้พวกเขามีประสิทธิภาพที่สูงขึ้นหรือแม้แต่พกพาง่ายขึ้น มีคอมไพเลอร์ C สำหรับเกือบทุกอย่างที่มีอยู่และถ้าคุณเขียนไปยัง API ที่ใช้ได้ในระดับสากล (เช่น POSIX) ก็มีประโยชน์มาก
สิ่งที่ฉันมักจะบอกคนที่มีความสนใจในการเรียนรู้การเขียนโปรแกรมวันนี้คือเพื่อให้แน่ใจว่าในบางครั้งพวกเขาเรียนรู้ C และคุ้นเคยกับมัน คุณอาจพบว่าตัวเองอยู่ในสถานการณ์ที่คุณต้องการ มากกว่าหนึ่งครั้งฉันต้องรวบรวมโปรแกรม "รีบูตเร็ว" แบบลิงก์เล็ก ๆ และใช้ scp เพื่อวางลงบนดิสก์ RAM บนเซิร์ฟเวอร์ที่ระบบย่อยของดิสก์หายไปโดยสิ้นเชิง (เซิร์ฟเวอร์ราคาถูก, ราคาถูก, ไม่มีการสำรองข้อมูลออนไลน์และมีความสามารถในการโหลดโปรแกรมขนาดเล็กเท่านั้น? C เป็นวิธีการที่จะไป)
นอกจากนี้การเรียนรู้วิธีการทำงานใน C โดยไม่ต้องยิงตัวคุณเองสามารถช่วยให้ความสามารถในการเขียนอย่างมีประสิทธิภาพในภาษาและสภาพแวดล้อมอื่น ๆ อย่างน้อยนั่นก็เป็นประสบการณ์ของฉัน
แม้ว่าฉันจะไม่ใช้มันสำหรับทุกสิ่งหรือแม้กระทั่งสิ่งส่วนใหญ่ แต่ก็มีสถานที่และเป็นสากลมาก: ใช่ฉันเคยใช้ในอดีตและจะใช้ในอนาคต (แม้ว่าฉันจะไม่ รู้ว่าในขณะนี้)
ใช่ฉันทำมันตลอดเวลา
หากคุณไม่เรียกไลบรารีใด ๆ รหัสที่สร้างจาก C ไม่ต้องการการสนับสนุนระบบปฏิบัติการ นอกจากนี้ยังช่วยให้คุณสามารถควบคุมภาษาเครื่องที่สร้างขึ้น ดังนั้นจึงเหมาะอย่างยิ่งสำหรับการเขียนไดรเวอร์หรือรหัสอื่น ๆ ที่อาศัยอยู่ในพื้นที่เคอร์เนลและสถานการณ์ที่ จำกัด อื่น ๆ เช่นระบบฝังตัวหลายชนิดทำงานได้ นอกจากนี้ยังเป็นภาษาหลักสำหรับโครงการโอเพนซอร์ซที่ฉันทำงานด้วยเช่น X Windows, GTK + และ Clutter
ในขณะที่คุณสามารถทำทุกอย่างใน C คุณสามารถทำได้ใน C ++ แต่กลไกของ C ++ มักจะทำให้การเขียนโค้ดรวดเร็วและง่ายขึ้น ฉันรัก OOP และวิธีการที่คลาส C ++ นั้นมีฟังก์ชั่นการใช้งานมากมาย การใช้การร้องขอ destructor อัตโนมัติอย่างระมัดระวังเมื่อวัตถุไม่อยู่ในขอบเขตจะกำจัดการรั่วไหลของหน่วยความจำและทรัพยากรส่วนใหญ่ซึ่งเป็นข้อ จำกัด ของการเขียนโปรแกรม C STL นั้นเป็นห้องสมุดขนาดใหญ่ของอัลกอริธึมและโครงสร้างข้อมูลที่มีประสิทธิภาพสูงสุด ถ้าคุณต้องการที่จะใช้พวกเขาจาก C คุณต้องเขียนด้วยตัวเองหรือซื้อที่ไหนสักแห่ง
น่าเสียดายด้วยเหตุผลที่ฉันไม่เข้าใจระบบรันไทม์บน Linux ต้องใช้ไลบรารีวัตถุที่ใช้ร่วมกันแบบพิเศษ (เทียบเท่ากับ DLL บน Windows, dylib บน Mac) เพื่อเรียกใช้ C ++ และไม่พบเมื่อคุณเรียกใช้โปรแกรม C ดังนั้นฉันจึงไม่สามารถทำหนึ่งในเทคนิค Mac และ Windows ที่ชื่นชอบได้ซึ่งก็คือการเขียนวัตถุที่ใช้ร่วมกับ C ++ ด้วย API แบบ C และเรียกมันจากโปรแกรม C
ดังนั้นนี่คือกระบวนการตัดสินใจของฉัน:
สิ่งหนึ่งที่ดีคือเนื่องจาก C ++ สามารถคอมไพล์ C ได้หากคุณต้องการการควบคุมโค้ดที่สร้างขึ้นสำหรับสถานการณ์เฉพาะคุณสามารถเขียน C สำหรับสิ่งนั้นและ C ++ สำหรับส่วนที่เหลือและรวบรวมทั้งหมดด้วยคอมไพเลอร์ C ++ .
ใช่ แต่ขึ้นอยู่กับโครงการ C ดีมากสำหรับโครงการระดับต่ำหรือเป็นส่วนหนึ่งของโซลูชันที่ใหญ่ที่สุด
เช่น. สำหรับ bussines logic ตกลง แต่ไม่ใช่สำหรับส่วนต่อประสานผู้ใช้
ถ้ามันจะต้องมีทั้ง
จากนั้นฉันใช้ C. อาจ C ++
ใช่อันที่จริงฉันเพิ่งมี!
ฉันชอบการเขียนโปรแกรมใน C. ฉันทำการเขียนโปรแกรมส่วนใหญ่ในหลาม แต่มีบางครั้งที่ฉันต้องการรหัสที่รวดเร็วและฉันสนุกกับความงดงามที่มาจากความเรียบง่ายของภาษา
โครงการที่ฉันกำลังดำเนินการอยู่ในขณะนี้คือฐานข้อมูลซึ่งคุณสามารถจินตนาการได้ว่าเป็นเรื่องสำคัญยิ่งสำหรับประสิทธิภาพ ตอนนี้ฉันใช้ C และ python บางตัว แต่ในที่สุดมันก็จะเด่นชัดถ้าไม่ใช่ C ทั้งหมด
C เป็นภาษาระดับต่ำและมีสถานการณ์ที่ C เกือบจะเป็นตัวเลือกเดียวเช่นฉันใช้ C สำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์หรือวางโค้ดไว้ด้วยกันเพื่อโต้ตอบกับอุปกรณ์จากพอร์ตคลาสสิกเช่น Parallel, Serial หรือแม้แต่โมเด็ม!
ใช่. ฉันใช้เวลาส่วนใหญ่ในการเขียนโปรแกรม C ++ ของฉัน แต่ตอนนี้ฉันเขียนโค้ดส่วนใหญ่ใน Ruby และถ้าฉันต้องการประสิทธิภาพหรือการเข้าถึงสิ่งระดับต่ำฉันเขียนส่วนขยาย C มันเป็นผู้ชายในอนาคต!
ฉันจะใช้ C หากฉันเขียนระบบปฏิบัติการ ตั้งแต่นั้นจะไม่เกิดขึ้นในอีกยี่สิบปีถัดไปเว้นแต่ฉันจะเข้าสู่เกมล็อตโต้และไม่มีอะไรอื่นนอกจากทำลีนุกซ์ดิสทริบิวเตอร์ที่ยอดเยี่ยมของฉันเองฉันอาจจะติด C #, Java, Python และอื่น ๆ อีกมากมาย ไม่ได้ใช้ C ในเวลานานมาก แต่ฉันก็ชอบมันเสมอ ฉันคิดว่าวันนี้หัวฉันห่อรอบ OO ถ้าฉันต้องกลับไปที่มันมันจะพาฉันไปเล็กน้อยเพื่อกลิ้งอีกครั้ง
C ++เป็นแบบพกพาข้ามแพลตฟอร์มและอุปกรณ์ฝังตัวเช่นไมโครคอนโทรลเลอร์ (C ++ สามารถคอมไพล์ไปที่ C ได้ดังนั้นไมโครคอนโทรลเลอร์)
Cเป็นแบบพกพา (เป็นฟังก์ชั่นต่างประเทศ) กับภาษาอื่น ๆ ดังนั้นถ้าฉันเขียนโปรแกรมไลบรารีระดับต่ำแล้วฉันต้องการความเข้ากันได้มากกว่า C ++
Haskellเป็นอุปกรณ์พกพาข้ามแพลตฟอร์ม (ARM กำลังจะเปิดตัวเร็ว ๆ นี้) แต่ไม่มีอุปกรณ์ฝังตัวเช่นไมโครคอนโทรลเลอร์ ความเร็วของมันเทียบได้กับ C และ C ++; แต่เนื่องจากมันใช้งานได้มันใช้ garbage-collector แทน runtime-stack ดังนั้นจึงสามารถเร็วและช้ากว่า C ในเวลาที่ต่างกัน (การรวบรวมขยะ) และในสถานการณ์ที่แตกต่างกัน (การดำเนินการต่อ
ฉันเลือกภาษาที่เป็นนามธรรมที่สุดเท่าที่จะเป็นไปได้เนื่องจากความเร็วของโปรแกรมไม่แตกต่างกัน แต่เวลาในการพัฒนาและอัตราบั๊ก C และ C ++ แตกต่างกันมาก แต่ไม่ใช่จากมุมมองของ Haskell
ฉันไม่ชอบภาษาอื่นแม้ว่าฉันจะรู้ว่ามือเดียวหรือสองมือเต็ม ... ยกเว้นในบางกรณีดีทุบตี
ระบบสมองกลฝังตัวมักมี RAM ไม่เกินสองสามกิโลไบต์และอาจมีแฟลชสักสองสามสิบกิโลไบต์โดยมีอัตรานาฬิกาโปรเซสเซอร์ของ MHz ไม่กี่ตัว C เป็นตัวเลือกเดียวที่เหมาะสมในสภาพแวดล้อมที่เป็นโลหะเปลือย