การเขียนโปรแกรมทั่วไปใช้บ่อยแค่ไหนในอุตสาหกรรม


11

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

ฉันอยากรู้อยากเห็น - การเขียนโปรแกรมทั่วไป (GP) มีการใช้งานมากในอุตสาหกรรมหรือไม่ ฉันเดาว่าโปรแกรมเมอร์ส่วนใหญ่คุ้นเคยกับ OOP หรือใช้ภาษาที่ไม่เน้นหรือสนับสนุน GP ดังนั้นนอกการเรียก STL โครงสร้างข้อมูล / ฟังก์ชั่นใน C ++ ความประทับใจของฉันคือ GP ไม่ได้ใช้ทั้งหมดบ่อยนัก ในทางปฏิบัติ แต่การอยู่นอกอุตสาหกรรมในขณะนี้เป็นเรื่องดีที่ได้ยินจากผู้ฝึกสอนในเรื่องนี้

(ขณะที่ฉันกำลังเขียนสิ่งนี้ฉันเห็นว่าการเขียนโปรแกรมทั่วไปไม่ใช่แท็กที่ถูกต้อง!)


การแจกจ่ายแท็กบน StackOverflow น่าจะมีประโยชน์มากกว่าเป็นหลักฐานทางสถิติมากกว่าที่นี่ ดูstackoverflow.com/questions/tagged/generic-programming , stackoverflow.com/questions/tagged/generics
PéterTörök

คำตอบ:


7

ฉันอยากรู้อยากเห็น - การเขียนโปรแกรมทั่วไป (GP) มีการใช้งานมากในอุตสาหกรรมหรือไม่

มันขึ้นอยู่กับบริบทของทีมและโครงการเป็นอย่างมาก

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

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

แต่ในเกม dev ผู้คนส่วนใหญ่จะหลีกเลี่ยงการเปรียบเทียบโปรแกรมใด ๆ

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

มันไม่ธรรมดา แต่มีอยู่แล้วและโดเมนเฉพาะ (ในบริบททางวิทยาศาสตร์หรือตัวเลขที่ฝังตัวบางส่วน) ต้องการผู้ที่รู้มากเกี่ยวกับ metaprogramming หรือต้องการเรียนรู้

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

Boost (http://boost.org) เป็นชุดของห้องสมุดบางส่วนถูกสร้างขึ้นมาจากเวทมนตร์ดำที่ใช้เมตาโปรแกรมและใช้ในร้านค้า C ++ หลายแห่งในชื่อ "STL ++" ซึ่งเป็นส่วนเสริมของ STL (และเป็น) ไม่ใช่ทุกร้านค้าที่ใช้ด้วยเหตุผลหลายประการเช่นความเข้ากันได้ของคอมไพเลอร์ (บางบูสเตอร์สามารถทำให้คอมไพเลอร์ของคุณขอโทษสำหรับทุกครั้งที่เขาทำร้ายความรู้สึกของคุณ ... ) และบ่อยครั้งขึ้นเพราะนักพัฒนาบางคนไม่ชอบ เครื่องมือทำงานอย่างไรภายใน (พยายามทำความเข้าใจกับ Boost.Spirit ... )

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

ไม่มีมติเพราะไม่มีใครมีความต้องการบริบทหรือทีมเดียวกัน

แต่ถึงกระนั้นก็มีการใช้งาน อาจถามว่าใครใช้การเพิ่มในรายการส่งเมล์เพื่อให้มีตัวอย่างจริงมากขึ้น?


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

ขอบคุณสำหรับคำตอบโดยละเอียด ฉันเป็นแฟนตัวยงของ Boost เองและพิจารณาว่าจะขุดลงใน BGL ซึ่งต้องการความรู้เกี่ยวกับ GP มากกว่าห้องสมุด Boost อื่น ๆ หรือไม่เป็นสิ่งที่ทำให้ฉันถามสิ่งนี้ ความคิดเห็นของคุณเกี่ยวกับโลกการพัฒนาเกมนั้นค่อนข้างน่าสนใจ ฉันประหลาดใจกับการพัฒนาเกมที่ทันสมัยและน่าสนใจที่ได้ยินว่าพวกเขาอาจมีฉนวนจากวิธีการเขียนโปรแกรมแบบใหม่มากกว่าในระดับแนวหน้าของพวกเขา
bd1

นักพัฒนาเกมกำลังจัดการลำดับความซับซ้อนสูงโดยเพียงแค่มีแนวคิดเกี่ยวกับสถาปัตยกรรมเกม การเพิ่มคำแนะนำเมตาจะทำให้ทุกอย่างซับซ้อนขึ้นดังนั้นจึงจำเป็นต้องมีเหตุผลที่ดี อีกสิ่งหนึ่งคือเกม devs จำนวนมากทำงานบนคอนโซลที่มีฮาร์ดแวร์เฉพาะพร้อมคอมไพเลอร์เฉพาะที่ไม่อนุญาตให้ทุกอย่างพยายามเพิ่ม (ตัวอย่างเช่นไม่มีข้อยกเว้นหรือไม่มีการสืบทอดหลายครั้งหรือทำงานไม่ถูกต้องจากเอกสารของ คอมไพเลอร์ (เรื่องจริง) ดังนั้นจึงมีเหตุผลที่ดี
Klaim

5

ฉันอยากรู้อยากเห็น - การเขียนโปรแกรมทั่วไป (GP) มีการใช้งานมากในอุตสาหกรรมหรือไม่

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

ฉันเดาว่าโปรแกรมเมอร์ส่วนใหญ่คุ้นเคยกับ OOP หรือใช้ภาษาที่ไม่เน้นหรือสนับสนุน GP ดังนั้นนอกการเรียก STL โครงสร้างข้อมูล / ฟังก์ชั่นใน C ++ ความประทับใจของฉันคือ GP ไม่ได้ใช้ทั้งหมดบ่อยนัก ในทางปฏิบัติ

อย่างน้อยจากประสบการณ์ของฉันมุมมองของคุณผิด การเขียนโปรแกรม OOP และโปรแกรมทั่วไปไม่ได้เกิดขึ้นพร้อมกัน ในความเป็นจริงคุณควรใช้ผลการทำงานร่วมกันของการรวมพวกเขา อย่างที่ฉันบอกไปก่อนเหตุผลที่คุณไม่เห็นมันปรากฏบ่อยเท่าเทคนิคอื่น ๆ ก็เพราะคุณไม่ต้องการมันบ่อยนัก แต่มันเป็นคุณสมบัติที่แข็งแกร่งที่จะมีและช่วยให้คุณรักษารหัสDRYของคุณไว้อย่างมาก ภาษาใดไม่เน้นการสนับสนุนของ GP ในการเขียนโปรแกรมระดับสูง 3 จาก 5 ภาษาของTiobe Top 5รองรับ generics / template และ PHP ก็ถูกพิมพ์แบบไดนามิกดังนั้นจึงไม่ต้องการมันจริงๆ แล้วอะไรล่ะ


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

@ bd1: แอปพลิเคชันรุ่นเก่าที่เขียนก่อนหน้าจาวาที่รองรับ generics หรือก่อนชุดเครื่องมือเฉพาะที่รองรับ Java รุ่นนั้นจะไม่มี generics และนักพัฒนาอาจหลีกเลี่ยง generics ในโครงการนั้น ๆ เพื่อให้รหัสสอดคล้องกัน ฉันเคยเห็นมันและมันก็แตกต่างกันไปตามโครงการและโดยนักพัฒนา โครงการใด ๆ ที่ฉันเห็นว่าเริ่มต้นหลังจากการสนับสนุน Java generics อย่างกว้างขวางมีแนวโน้มที่จะใช้บ่อยครั้งเมื่อเหมาะสม
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner: Generics ใน Java แตกต่างจากแม่แบบ C ++ โดยสิ้นเชิง Java generics นั้นเป็นน้ำตาลซินแทคติกบริสุทธิ์ 100% และไม่รองรับการเขียนโปรแกรมเมตา
วินไคลน์

"OOP และการเขียนโปรแกรมทั่วไปไม่ได้เกิดขึ้นพร้อมกันโดยเฉพาะ": แน่นอนว่าทั้งสองรูปแบบเป็นรูปแบบความหลากหลายตามลำดับ ad-hoc และตัวแปรหลากหลาย ดังนั้นมันจึงเป็นเครื่องมือสองชนิดที่แตกต่างกันสำหรับความแตกต่างหลากหลาย
Giorgio

4

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

ผู้คนใช้เพื่อหลีกเลี่ยงการทำซ้ำรหัสและเพื่อให้เกิดความหลากหลายเวลารวบรวม (โดยไม่ต้องส่งเสมือน)

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