ต้นแบบในภาษาระดับที่สูงขึ้นเป็นเรื่องปกติหรือไม่? [ปิด]


18

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

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

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


4
ฉันเคยได้ยินคนที่จะเขียนแอสเซมเบลอร์ด้วยการเขียนโค้ดสิ่งที่พวกเขาต้องการในซีก่อนจากนั้นก็แยกชิ้นส่วนออกแล้วปรับแต่งชุดประกอบที่เกิดขึ้นด้วยมือ
user16764

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

1
@ user16764: ทำเช่นนั้นจริง ๆ ยกเว้นภาษาที่เป็น Fortran แต่เราปรับแต่งคอมไพเลอร์เอาต์พุตตามที่คุณอธิบาย
S.Lott

C ไม่จำเป็นต้องเร็วกว่า โดยเฉพาะอย่างยิ่งหากประสิทธิภาพนั้นผูกไว้กับ IO แม้แต่ประสิทธิภาพที่เชื่อมโยงกับ CPU หากคุณไม่ใช่ผู้เชี่ยวชาญ C ดังนั้น VM ที่ปรับให้เหมาะสมอาจมีประสิทธิภาพเหนือกว่าสิ่งใดก็ตามที่คุณเขียนเอง
jiggy

ฉันมักจะใช้เทคนิคการสร้างต้นแบบนี้: ปัญหาแสดงในภาษาที่เป็นธรรมชาติที่สุดซึ่งจบลงด้วยการใช้งานเป็น DSL จากนั้นเมื่อต้นแบบเสร็จสิ้นแทนที่จะบันทึกส่วน DSL เป็นภาษาระดับต่ำกว่าฉันจะปรับปรุงการใช้งานคอมไพเลอร์ DSL นี้จนกว่าประสิทธิภาพจะเป็นที่ยอมรับ
SK-logic

คำตอบ:


27

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

ตามที่Bill Harlan กล่าวว่า :

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

หากคุณสามารถทำนายปัญหาประสิทธิภาพได้ให้ลองใช้ C ++ คำ cprogramming.com มันเป็นอย่างดี :

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


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


25
+1: นอกจากนี้ Perl, Python และ Ruby สามารถเรียกใช้ฟังก์ชัน C เพื่อให้คุณสามารถเขียนส่วนที่ไวต่อประสิทธิภาพใน C หากจำเป็น
Larry Coleman

ฉันสร้างรหัสวิชันซิสเต็มเป็นภาษาจาวา ซึ่งมันกลับกลายเป็นว่าเร็วพอจริง recoding เป็น C จะได้รับสวยง่าย (คุณเพียงแค่เขียนมันเหมือนเซลเซียสโดยใช้ antipattern ตรึงดั้งเดิม)
ทิม Williscroft

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

@ ทิม Williscroft: ฉันดูเหมือนจะเปิดขึ้นหน้านี้มากเมื่อฉัน google สำหรับ "antipattern ตรึงดั้งเดิม" นั่นคืออะไร?
SingleNegationElimination

@TokenMacGuy: ความหลงใหลดั้งเดิมมีความนิยมมากขึ้น (antipattern เดียวกัน)
ทิม Williscroft

7

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


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

ใช่แล้ว ฉันกังวลว่าฉันยังอาจกำลังคิดในแนวคิดที่สูงกว่าซึ่งไม่สามารถแปลเป็น C ได้ง่ายเช่นถ้าฉันใช้เวทย์มนตร์หรือน้ำตาลมากเกินไป
Mark Canlas

4

นี่ไม่ใช่คำถามที่มีคำตอบใช่หรือไม่มีหมวดหมู่ ให้ฉันชั่งน้ำหนักด้วยเกร็ดเล็กเกร็ดน้อย

ตัวอย่างที่ 1

ฉันได้รับมอบหมายให้ย้ายเกมที่เขียนใน Java เป็น Flash, AS3 บนพื้นผิวสิ่งนี้มีศักยภาพในการเคลื่อนที่ได้ค่อนข้างราบรื่น ท้ายที่สุดคุณสามารถพิจารณางานดังกล่าวให้ชัดเจนยิ่งกว่างานของลูกค้าโดยเฉลี่ยเพราะคุณมีสเปคการใช้งานที่สมบูรณ์ในตัวในรูปแบบของเกมต้นทาง Java และ AS 3 เป็นทั้งภาษาระดับสูงและ AS3 ใช้คุณสมบัติหลายอย่างร่วมกันกับ Java เช่นโครงสร้างแพ็คเกจ, การสืบทอดเดี่ยว / หลายอินเตอร์เฟส, (เลือกใช้) การพิมพ์ที่รัดกุมและความคิดเห็นของตัวแปรสาธารณะ / การป้องกัน / ส่วนตัว และการประกาศฟังก์ชั่น ในขณะที่ฉันยังคงเป็นสีเขียวที่ Java และใหม่ทั้งหมดในรหัสต้นฉบับแหล่งที่มา ดังนั้นฉันเพิ่งเข้ามาเพื่อดูว่าฉันจะพบความหวังว่ามันจะง่ายและรวดเร็ว

เมื่อมันปรากฏออกมาผู้เขียนรหัสได้พยายามสร้างเอนจิ้นนามธรรมที่สามารถย้ายออกจาก Java ไปยังสภาพแวดล้อมอื่นที่ไม่ได้กำหนดได้ สิ่งนี้ทำให้ฉันมีความหวังว่ามันจะตรงไปยังท่าเรือ น่าเสียดายที่สิ่งที่ฉันค้นพบแทนคือฉันกำลังมองหาโอกาสในการประดิษฐ์ Flash ใหม่อีกครั้งด้วยตัวเองโดยไม่ใช้ประโยชน์จาก Threads พอร์ตตัวอักษรตามที่ปรากฏจะเป็นความคิดที่ไม่ดี ... ฝันร้ายของการแสดง ด้านบนของเกมที่ใช้ภาษาสคริปต์ภายนอกที่กำหนดเองซึ่งจะหมายถึงการสร้าง parser และ lexer สำหรับภาษานั้นถ้าฉันหวังว่าจะใช้ไฟล์ต้นฉบับทั้งหมด

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

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

ตัวอย่างที่ 2

เมื่อสังเกตสิ่งที่นักพัฒนา Java กำลังพยายามสร้าง codebase แบบพกพาฉันตั้งค่าเกี่ยวกับการทำสิ่งที่คล้ายกันสำหรับตัวฉันในงาน Flash ของฉัน ... การเขียนโค้ดที่ไม่พึ่งพาการขยาย flash.display เป็นอย่างมาก * คลาสเช่น และการใช้องค์ประกอบเพื่อสร้างมุมมอง ไม่ต้องพึ่งพา flash.event อย่างหนัก * และแทนที่จะเขียนระบบส่งข้อความที่มีน้ำหนักเบาของฉันเองโดยไม่ได้ผูกกับภาษาหรือแพลตฟอร์มโดยเฉพาะ ฉันเพิ่งเสร็จสิ้นเกมโดยใช้เฟรมเวิร์กดังกล่าวและต้องการดูว่ามันจะง่ายต่อการย้ายไปที่ C # (ภาษาที่ฉันรู้จักมากที่สุดคล้ายกับ Java และ AS3) เป็นโครงการ Unity 3D มันกลับกลายเป็นว่าประสบความสำเร็จมากกว่านี้! เพราะฉันคิดอย่างคล่องแคล่วใน AS3 มากกว่าใน C # การมีอัลกอริทึมที่เขียนแล้วช่วยประหยัดเวลาได้มาก สิ่งที่ฉันต้องทำคือเพียงแค่เปลี่ยนไวยากรณ์ซึ่งไม่ใช่

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


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

@ Mark Canlas "ปีศาจอยู่ในรายละเอียด" อย่างแน่นอน ฉันคิดว่าเป็นไปได้ว่าความพยายามครั้งแรกของคุณอาจผิดพลาดหากคุณไม่เคยย้ายรหัสระหว่างภาษาหรือสภาพแวดล้อมมาก่อนเพราะเป็นการยากที่จะคาดการณ์ปัญหาที่อาจเกิดขึ้นทั้งหมดจนกว่าคุณจะพบพวกเขา
scriptocalypse

2

ฉันคิดว่ามันจะมีค่าถ้าเริ่มต้นด้วย pseudocode การเขียนต้นแบบในภาษาอื่นดูเหมือนจะเป็นการเสียเวลาเนื่องจากภาษาระดับสูงของคุณไม่น่าจะแปลเป็น 'C' ได้เกือบจะเหมือนกับ pseudocode

นอกจากนี้ด้วยการใช้ pseudocode คุณจะได้พัฒนาความเข้าใจที่ดีขึ้นว่าระบบของคุณทำงานอย่างไร

ในช่วงเวลาเดียวกันกับที่คุณทำงานกับ pseudocode คุณควรจะศึกษา C จากนั้นเมื่อถึงเวลาที่คุณวางแผนไว้คุณอาจพร้อมที่จะใช้งานจริง

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


2

คุณสามารถสร้างต้นแบบอัลกอริทึม - ขจัดข้อผิดพลาดในการออกแบบของตรรกะหลักโดยใช้ภาษา "ระดับสูงมาก" อย่างแน่นอน (เช่น Matlab หรือ Ruby) ใช้เพื่อพิสูจน์อัลกอริทึมของคุณทำงานและทำงานอย่างถูกต้องจากนั้นนำไปใช้ตั้งแต่เริ่มต้นในภาษา "ระดับต่ำ"

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


2

เอ็นจิ้นฐานข้อมูลส่วนใหญ่เกี่ยวกับการจัดการ I / O ระดับต่ำในวิธีที่ดีที่สุดและการจัดการโครงสร้างที่ซับซ้อนเช่น b-tree และรายการที่เชื่อมโยงอย่างมีประสิทธิภาพ

ดังนั้นมันจึงเป็นปัญหาของ C / C ++ แม้ว่าจะมีการติดตั้ง Java ที่ดีอยู่บ้าง

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

วิธีการประนีประนอมอาจจะเขียนการใช้งานเริ่มต้นในหนึ่งในภาษา JVM ระดับสูงกว่า (Jython, Groovy อยู่ในใจ) แล้วย้ายคลาสตามระดับไปยัง Java เมื่อการปรับใช้มีเสถียรภาพ


2

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

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

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


1

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

หากคุณใช้อัลกอริทึมที่ไม่ถูกต้องคุณจะได้รับประสิทธิภาพที่ไม่ดีใน C เช่นกัน (เช่นหากคุณทำการค้นหาเชิงเส้นสำหรับคีย์ "เนื่องจาก C ไม่มีตารางแฮชและเราไม่ต้องการใช้ไลบรารีอื่น ๆ " คุณจะช้ากว่าถ้าคุณ ทำด้วยภาษาที่มีตารางแฮชหรือคล้ายกันเช่น C ++, Java, C #, Python ... และอื่น ๆ )

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

สรุปสิ่งที่ดีที่สุดที่ต้องทำคือการใช้งานจริงในภาษา "ต้นแบบ" ของคุณจากนั้นถ้าจำเป็นจริงๆต้องเขียนฟังก์ชั่น CPU-CPU ใน C แต่ถ้าเพียง C เป็นที่ยอมรับเรียนรู้มันให้ดีขึ้นก่อนทำต้นแบบอื่น ภาษาและแน่นอนก่อนที่จะเขียนการใช้งาน


1

มีแอปพลิเคชั่นที่สำคัญด้านประสิทธิภาพมากมายที่เขียนด้วยภาษาระดับสูงกว่า

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

มีหลายสิ่งหลายอย่างที่จะขัดขวางประสิทธิภาพการทำงานฉันสงสัยว่าคุณจะไปถึงส่วนที่ภาษาของตัวเองเป็นปัจจัย จำกัด นี่กำลังพิจารณาว่าเป็น C vs C #

สมมติว่าคุณได้รับประสิทธิภาพเพิ่มขึ้น 10% -15% ตามภาษา นี่คือไม่มีอะไรเทียบกับลำดับความสำคัญที่เพิ่มขึ้นในการใช้อัลกอริทึมที่ถูกต้อง

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

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


0

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


บางครั้ง "อย่าทำอย่างนั้น" คำตอบที่ถูกต้องคือ "ฉันจะทำ X ได้อย่างไร"
Larry Coleman

0

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

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

การประเมินความเป็นไปได้บางอย่าง:

1 . คุณสร้างต้นแบบใน python และเขียนซอฟต์แวร์เป็น C

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

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

วิธีนี้เหมาะสำหรับการทดสอบความเป็นไปได้เชิงตรรกะของการแก้ปัญหา

2 . คุณสร้างต้นแบบใน C และเขียนซอฟต์แวร์เป็น C

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

วิธีนี้เหมาะสำหรับการทดสอบทั้งความเป็นไปได้ทางตรรกะและทางเทคโนโลยีของการแก้ปัญหา

3 . คุณสามารถพิจารณาวิธีที่ไม่เข้ารหัสเพื่อสร้างต้นแบบขึ้นอยู่กับปัญหาในมือ

ถ้าเป็นบางส่วนของตรรกะและแนวคิดที่คุณต้องการสร้างต้นแบบ รหัสเทียม , ผังงานและบล็อกไดอะแกรมบนกระดาษเป็นสิ่งที่ดีเกินไป

หากเป็นเครื่องต้นแบบของ UI ให้ลองใช้เครื่องมือจำลอง UI ขึ้นมาใหม่หรือใช้กระดาษอีกชุด


0

ฉันคิดว่าคุณควรสร้างต้นแบบในภาษาที่คุณคุ้นเคย (Pytho / Ruby / C # อะไรไม่) เพื่อที่:

  1. คุณใช้ประโยชน์จากสิ่งอำนวยความสะดวก / ห้องสมุดที่ภาษาให้ดีที่สุด
  2. คุณใช้เวลาในการตัดสินใจเลือกการออกแบบแทนข้อ จำกัด ทางภาษา

ต่อมาคุณสามารถใช้เครื่องมือทำโปรไฟล์เพื่อค้นหาบริเวณส่วนคอขวด นำไปใช้อีกครั้งใน C / C ++ ทำซ้ำขั้นตอนข้างบนสองสามครั้งใครจะรู้ต้นแบบของคุณอาจ 'เร็วพอ'!


0

ฉันไม่คิดว่าคุณจะได้อะไรจากวิธีที่คุณอธิบายและหลายคนอธิบายว่าทำไมในรายละเอียด

โครงการหนึ่งที่ฉันมีส่วนเกี่ยวข้องใช้วิธีการเช่นนี้: การพัฒนาห้องสมุดคณิตศาสตร์สำหรับสถาปัตยกรรม Cell / BE และ Power7 ฟังก์ชั่นถูกสร้างแบบจำลองใน Haskell (โดยใช้ CoCoNUT) และฟังก์ชั่นการส่งออกในการประกอบที่ดีที่สุดสำหรับสถาปัตยกรรมเป้าหมายเฉพาะ

ในกรณีนี้เป้าหมายมีประสิทธิภาพสูงพร้อมคำแนะนำในการประกอบและความสามารถในการกำหนดเป้าหมายสถาปัตยกรรมหลายแบบ

แม้ว่าอาหารฉันหวังว่าคุณจะไม่หิว :)


0

สำหรับเอ็นจิ้นฐานข้อมูลประสิทธิภาพสูงคุณอาจต้องการ:

  • แบบมัลติเธรด,
  • การจัดการหน่วยความจำอย่างชัดเจน
  • การแจ้งเตือนแบบอะซิงโครนัส
  • เซมาฟอร์หรือซิงโครไนซ์ดั้งเดิม
  • เข้าถึงฟังก์ชั่นระบบไฟล์ระดับต่ำได้ง่าย

อัลกอริทึมที่คุณเลือกมีความสำคัญต่อประสิทธิภาพ

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

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

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

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

ความสัมพันธ์ใกล้ชิดระหว่าง C ++ และ C (และความแตกต่างด้านประสิทธิภาพเล็กน้อย) หมายความว่ามีเหตุผลน้อยมากที่ไม่ชอบ C ++ มากกว่า C ในผลิตภัณฑ์ขั้นสุดท้าย

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


-2

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

ฉันประหลาดใจที่ได้อ่านเมื่อเร็ว ๆ นี้ว่า Fortran เร็วกว่า C และ C ++

Richard Mullins


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