क्या उच्च स्तर की भाषा में प्रोटोटाइप करना आम है? [बन्द है]


18

मैं वर्तमान में एक ऐसी परियोजना को शुरू करने के विचार के साथ कर रहा हूँ, जिसमें मैं अपनी वर्तमान प्रोग्रामिंग क्षमता को उस भाषा में पार कर लेता हूँ जिसमें मुझे (सी) में बहुत कम वास्तविक दुनिया का अनुभव है। क्या यह उच्च स्तरीय भाषा में प्रोटोटाइप के लिए मूल्यवान होगा, जिससे मैं अधिक परिचित हूं (जैसे पर्ल / पायथन / रूबी / सी #) ताकि मैं समग्र डिजाइन प्राप्त कर सकूं?

अंत में, अंतिम उत्पाद प्रदर्शन संवेदनशील है (यह एक डेटाबेस इंजन है), इसलिए सी की पसंद है, लेकिन मुझे डर नहीं है कि सी अच्छी तरह से नहीं जानता मुझे पेड़ों के लिए जंगल खो देगा।

इसी तरह के प्रश्नों की खोज करते हुए, मैंने एक साथी उल्लेख पर गौर किया कि प्रोग्रामर प्रोलॉग में प्रोटोटाइप करते थे, फिर इसे कोडांतरक में क्रैंक किया।


4
मैंने ऐसे लोगों के बारे में सुना है जो सी में पहली बार कोडिंग करके कोडांतरक लिखेंगे जो वे सी में चाहते थे, फिर उसे असंतुष्ट कर रहे थे और परिणामस्वरूप विधानसभा को हाथ से ट्यूनिंग कर रहे थे।
user16764

9
एल्गोरिथ्म चयन और कार्यान्वयन को सही ढंग से करने के लिए फोड़े जाने की तुलना में उस प्रदर्शन को अधिक बार न भूलें, समान रूप से समानांतर समस्याओं के लिए समानांतर कोड लिखना और अच्छा डेटा प्रतिनिधित्व। सी के बारे में चिंता मत करो जब तक आप सही डिजाइन प्राप्त नहीं करते हैं।
पीटर स्मिथ

1
@ user16764: वास्तव में ऐसा किया था। भाषा को छोड़कर फोरट्रान था। लेकिन हमने संकलक आउटपुट को ठीक उसी तरह हाथ से घुमाया जैसा आप वर्णन करते हैं।
S.Lott

सी जरूरी तेज नहीं है। खासकर अगर प्रदर्शन आईओ-बाउंड है। यहां तक ​​कि सीपीयू-बाउंड प्रदर्शन के लिए, यदि आप सी विशेषज्ञ नहीं हैं, तो एक अनुकूलित वीएम शायद आपके द्वारा लिखे गए कुछ भी बेहतर प्रदर्शन कर सकता है।
जिगी

मैं अक्सर इस प्रोटोटाइप तकनीक का उपयोग कर रहा हूं: इसकी प्राकृतिक भाषा में एक समस्या व्यक्त की जाती है, जो कि DSL के रूप में लागू की जाती है। फिर, जब प्रोटोटाइप समाप्त हो जाता है, तो एक डीएसएल भाग को निचले स्तर की भाषा में रीकोड करने के बजाय, मैं इस डीएसएल कंपाइलर के कार्यान्वयन में सुधार करता हूं, जब तक कि प्रदर्शन स्वीकार्य न हो।
तर्क

जवाबों:


27

C का उपयोग करने से आपका एप्लिकेशन स्वचालित रूप से तेज़ नहीं होता है। जब आपके पास अपने मंच के लिए एक अलग प्रोग्रामिंग भाषा चुनने की क्षमता होती है तो मैं इसकी अत्यधिक अनुशंसा करता हूं।

जैसा कि बिल हरलान ने कहा :

अनुकूलित कोड को सही करने की तुलना में सही कोड को अनुकूलित करना आसान है । समयपूर्व अनुकूलन वास्तव में लंबे समय में अनुकूलन में बाधा उत्पन्न करता है। अनावश्यक अनुकूलन डिजाइनों को विकृत करता है, मॉड्यूलरिटी और सूचना को छुपाता है, और कोड को संशोधित करने के लिए बहुत कठिन बनाता है। अव्यक्त कीड़े को खोजने में अधिक समय लगता है। हम अक्सर प्रोफाइलिंग, या मशीनों या कंपाइलरों को बदलकर खोजते हैं, कि हमने अपने कोड के कम्प्यूटेशनल प्रयास को गलत बताया। अंदाज़ा लगाओ? अब, ऑप्टिमाइज़ेशन की तुलना में यह बहुत कठिन है।

यदि आप वास्तव में प्रदर्शन के मुद्दों की भविष्यवाणी कर सकते हैं, तो C ++ का उपयोग करने पर विचार करें। cprogramming.com यह बहुत अच्छी तरह से शब्द :

आप आश्चर्यचकित हो सकते हैं, हालांकि, क्या यह C के साथ छोटे प्रदर्शन को प्राप्त करने के लिए C ++ की पुन: प्रयोज्य देने के लायक है, खासकर जब C ++, जहां आवश्यक हो, C प्रोग्रामिंग शैली में लिखा जा सकता है


अपने वास्तविक प्रश्न का बेहतर उत्तर देने के लिए: मैं एक उच्च स्तरीय भाषा में कोड लिखूंगा, न कि केवल इसे प्रोटोटाइप के रूप में, और जब आप प्रदर्शन समस्याओं का सामना करते हैं तो केवल निचले स्तर की भाषाओं में अनुकूलन करते हैं।


25
+1: इसके अलावा, पर्ल, पायथन और रूबी C फ़ंक्शन को कॉल कर सकते हैं, इसलिए यदि आवश्यक हो, तो आप C में प्रदर्शन-संवेदनशील भागों को लिख सकते हैं।
लैरी कोलमैन

मैंने जावा में मशीन विज़न कोड प्रोटोटाइप किया है; यह वास्तव में काफी तेजी से निकला था। C में रिकोडिंग करना बहुत आसान होता (आप इसे सिर्फ C की तरह लिखते हैं; आदिम निर्धारण
एंटीपैटर्न

मैंने जावा में वास्तविक समय कोड लिखा है। उस विशेष परियोजना में, फ़ाइल एक्सेस C ++ के साथ किया गया था, और वास्तविक समय कोड जावा में था - पागल! हालांकि, वास्तविक समय कोड धधकते हुए तेज था। यह बहुत जटिल नहीं था, लेकिन इसने बिना समय के अविश्वसनीय मात्रा में डेटा को संभाल लिया। इसलिए मैं कहता हूँ कि आप प्रदर्शन-संवेदनशील अनुप्रयोगों के लिए निश्चित रूप से उच्च-स्तरीय भाषाओं का उपयोग कर सकते हैं।
विन्यासकर्ता

@ टिम विलिसक्रॉफ्ट: मैं केवल इस पृष्ठ को चालू करने के लिए लगता हूं, जब मैं "आदिम निर्धारण एंटीपैटर्न" के लिए Google करता हूं। वो क्या है?
एकलकरण २

@TokenMacGuy: आदिम जुनून में अधिक हिट (एक ही
एंटीपेटर्न

7

ऐसा करना मूल्यवान नहीं होगा, क्योंकि a) उन भाषाओं के भाग जो सीधे C में अनुवाद करते हैं, कोई सरल नहीं होगा, और b) वे भाग जो C से सीधे अनुवाद नहीं करते हैं, C की तुलना में पुन: लिखना अधिक कठिन होगा। यदि आपने उन्हें पहली जगह में सी लिखा है।


+1 - विशेष रूप से चूंकि ओओ कोड को सी में स्थानांतरित करना कठिन होगा यदि आप भाषा से परिचित नहीं हैं, या यदि आप प्रक्रियात्मक तरीके से लिखते हैं तो यह उच्च स्तर की भाषा का उपयोग अधिक अजीब होगा।
जेटी

हाँ बिल्कुल। मुझे चिंता है कि मैं अभी भी उच्च अवधारणाओं में सोच रहा हूं जो आसानी से सी के लिए अनुवादित नहीं हैं, जैसे कि मैं बहुत अधिक जादू या चीनी का उपयोग करता हूं।
मार्क कैनलास

4

यह एक स्पष्ट हाँ या कोई जवाब नहीं के साथ एक सवाल नहीं है। मुझे एक किस्से के साथ तौलना करने की अनुमति दें।

उदाहरण 1

मुझे जावा में फ्लैश, एएस 3 में लिखे गए गेम को पोर्ट करने का काम सौंपा गया था। सतह पर, यह अपेक्षाकृत आसानी से जाने की क्षमता रखता है। आखिरकार, आप इस तरह के काम को अपने औसत ग्राहक के काम की तुलना में अधिक स्पष्ट रूप से काट सकते हैं, क्योंकि आप पहले से ही स्रोत गेम के रूप में पूरी तरह से बिल्ट-आउट कार्यात्मक कल्पना प्राप्त कर चुके हैं। जावा और एएस 3 दोनों उच्च स्तरीय भाषाएं हैं, और एएस 3 जावा के साथ आम तौर पर कई लक्षण साझा करता है, जैसे पैकेज संरचना, एकल-विरासत / कई-इंटरफ़ेस, (ऑप्ट-इन) मजबूत टाइपिंग, और सार्वजनिक / संरक्षित / निजी चर की धारणाएं और फ़ंक्शन घोषणाएँ। उस समय मैं अभी भी जावा पर बहुत हरा था, और मूल स्रोत कोडबेस के लिए पूरी तरह से नया था। इसलिए मैं बस यह देखने के लिए तैयार हूं कि मुझे क्या उम्मीद है कि यह त्वरित और आसान होगा।

जैसा कि यह निकला, कोड के लेखक ने एक अमूर्त इंजन बनाने का प्रयास किया था जिसे जावा से कुछ अपरिभाषित अन्य वातावरण में पोर्ट किया जा सकता था। इससे मुझे उम्मीद थी कि यह पोर्ट के लिए सीधा होगा। दुर्भाग्य से, मुझे इसके बजाय जो पता चला वह यह था कि मैं थ्रेड्स के लाभ के बिना फ्लैश के शीर्ष पर फिर से फ्लैश का आविष्कार करने की संभावना देख रहा था। एक शाब्दिक बंदरगाह, जैसा कि यह निकला, बस एक बुरा विचार होगा ... एक प्रदर्शन दुःस्वप्न। उस गेम के शीर्ष पर, खेल ने अपनी स्वयं की कस्टम बाहरी स्क्रिप्टिंग भाषा को लागू किया, जिसका मतलब उस भाषा के लिए एक पार्सर और लेक्सर बनाना होगा यदि मैं सभी मूल स्रोत डेटा फ़ाइलों का उपयोग करने की उम्मीद कर रहा था।

अंत में, समय और बजट की कमी को देखते हुए, मूल स्रोत कोड वास्तव में बहुत मदद नहीं करता था। यह होने के बारे में सबसे उपयोगी हिस्सा यह था कि मुझे पता था कि गेम के तर्क के नियंत्रण प्रवाह की सटीक नकल कैसे करें ... लेकिन क्या मुझे वास्तव में इसके लिए मूल स्रोत की आवश्यकता थी? शायद ऩही।

लेकिन यह उदाहरण उतना प्रासंगिक नहीं हो सकता है क्योंकि यह आपकी स्थिति के विपरीत है। मैं एक कोडबेस का उपयोग करने की उम्मीद कर रहा था जिसे मैंने नहीं लिखा था, एक ऐसी भाषा में जब मैं उस समय एक ऐसे वातावरण में विकास करना नहीं जानता था जिससे मैं अत्यधिक परिचित था। तो यहाँ एक अलग उदाहरण है

उदाहरण 2

यह देखते हुए कि जावा डेवलपर पोर्टेबल कोडबेस बनाने की कोशिश में क्या कर रहा था, मैंने अपने फ्लैश वर्क में खुद के लिए कुछ ऐसा करने के बारे में सोचा ... कोड लिखना जो कि फ्लैशडाईसप्ले का विस्तार करने पर इतना भरोसा नहीं करता था। * उदाहरण के लिए कक्षाएं। और दृश्यों का निर्माण करने के लिए रचना का उपयोग करना। फ्लैश.इनवेंट पर इतना अधिक भरोसा नहीं। * और इसके बजाय अपने स्वयं के हल्के संदेश पासिंग सिस्टम को लिखना, विशेष रूप से किसी भाषा या मंच से बंधा हुआ नहीं। मैंने हाल ही में कहा फ्रेमवर्क का उपयोग करते हुए एक खेल समाप्त किया और यह देखना चाहता था कि क्या इसे सी # में पोर्ट करना आसान होगा (एक भाषा जिसे मैं जानता हूं कि यह जावा और एएस 3 के समान है) एक यूनिटी 3 डी प्रोजेक्ट के रूप में। जैसा कि यह पता चला है, यह बहुत अधिक सफल था! क्योंकि मुझे लगता है कि सी # की तुलना में एएस 3 में अधिक धाराप्रवाह है, एल्गोरिदम होने से पहले से ही एक टन की बचत हुई। बस मुझे सिंटैक्स को बदलना था, जो कि नहीं है '

इसलिए, सिर्फ अपने निजी अनुभव में, मैं यह नहीं कह सकता कि इसका उत्तर हमेशा हां या ना में होना है। आपको बस इस बात पर ध्यान देना चाहिए कि आप अपनी पसंद की उच्च-स्तरीय भाषा में होने वाली विशेष भाषा के मुहावरों पर कैसे निर्भर होते हैं, और क्या फिर से उन्हें बनाना C में आसान या कठिन होगा।


आपकी दूसरी कहानी बताती है कि मुझे कैसा लगता है। मैं प्रोटोटाइप के कार्यान्वयन को सामान्य और जादू / चालबाज़ी से मुक्त रखने की कोशिश करूँगा, जैसे कि यदि सभी विचारों का अनुवाद सी में नहीं किया जा सकता है। ईज़ी ने कहा की तुलना में अधिक है, लेकिन मुझे लगता है कि यह अभी भी एक उच्च स्तर पर है। जाहिर है कि शैतान विवरण में है।
मार्क कैनलस

@ मर्क कान्स "शैतान विवरण में है।" पूर्ण रूप से। मुझे लगता है कि यह संभव है कि आपका पहला प्रयास तब तक खराब हो सकता है यदि आपने कभी भी भाषा या वातावरण के बीच कोड को सिर्फ इससे पहले ही पोर्ट नहीं किया है क्योंकि आपके द्वारा सामना किए जाने तक सभी संभावित मुद्दों को दूर करना मुश्किल है।
स्क्रिप्टलेक जूल

2

मुझे लगता है कि स्यूडोकोड से शुरू करना मूल्यवान होगा। किसी अन्य भाषा में एक प्रोटोटाइप लिखना समय की एक संभावित बर्बादी की तरह लगता है, क्योंकि आपकी उच्च स्तरीय भाषा लगभग 'सी' के साथ-साथ स्यूडोकोड इच्छा का अनुवाद करने की संभावना नहीं है।

इसके अलावा, स्यूडोकोड का उपयोग करके, आप बेहतर समझ विकसित करेंगे कि आपका सिस्टम वास्तव में कैसे काम करता है।

उसी समय अवधि के दौरान जब आप छद्मकोड पर काम कर रहे होते हैं, आपको सी का अध्ययन करना चाहिए। फिर, जब तक आप अपनी योजना के साथ काम नहीं करते हैं, तब तक आप वास्तव में इस चीज को लागू करने के लिए तैयार हो सकते हैं।

चूँकि आपके द्वारा इसे किसी अन्य भाषा में लिखने का प्रस्तावित कारण डिज़ाइन को प्राप्त करने में मदद करना था, आप इसके बजाय कुछ यूएमएल आरेखों या उस प्रकृति की कुछ चीज़ों का उपयोग कर सकते हैं जिन्हें आप शुरू कर सकते हैं।


2

आप एल्गोरिथ्म को प्रोटोटाइप कर सकते हैं - निश्चित रूप से "बहुत उच्च स्तर" भाषा (कहते हैं, माटलैब, शायद रूबी) का उपयोग करके, कोर तर्क की डिजाइन त्रुटियों को बाहर निकालते हैं। अपने एल्गोरिथ्म कार्यों और सही ढंग से काम करने के लिए इसे साबित करने के लिए इसका उपयोग करें, फिर इसे "निम्न-स्तरीय" भाषा में खरोंच से लागू करें।

यदि आप C ++ या यहां तक ​​कि जावा या C # को "उच्च स्तर" और C को "निम्न स्तर" के रूप में चुनते हैं तो आपको अधिक लाभ नहीं होगा क्योंकि पठनीयता में लाभ महत्वपूर्ण नहीं होगा और "अनुवाद" अभी भी बहुत दर्दनाक और काफी बग- होगा होने का खतरा। विचार सार है, उच्च-स्तरीय कार्यान्वयन में आपकी परियोजना का इंजन एक स्क्रीन या दो से अधिक पर कब्जा नहीं करना चाहिए, आसानी से समझ सकता है, पढ़ने में आसान हो सकता है, और सभी कष्टों को स्पष्ट रूप से स्पष्ट किया जा सकता है - अनिवार्य रूप से, एक कामकाजी, रननेबल ब्लॉक आरेख।


2

एक डेटाबेस इंजन ज्यादातर निम्न स्तर I / O को एक इष्टतम तरीके से संभालने और बी-पेड़ और जटिल सूचियों जैसे जटिल संरचनाओं को कुशलता से संभालने के बारे में है।

तो इसकी निश्चित रूप से एक C / C ++ समस्या है, इसके बारे में कुछ अच्छे जावा कार्यान्वयन हैं।

सही एल्गोरिदम विकसित करना जो उच्च स्तर की भाषा में अच्छा प्रदर्शन करता है। आमतौर पर कई बदलावों की कोशिश करने और परिणामों की तुलना करने का मामला है। आप तब सी के लिए "विजेता" एल्गोरिथ्म का अनुवाद कर सकते हैं।

एक समझौता समाधान उच्च स्तर की JVM भाषाओं (Jython, Groovy के दिमाग में आना) में से एक में प्रारंभिक कार्यान्वयन को लिखने के लिए हो सकता है और फिर कार्यान्वयन के स्थिर होने पर कक्षा को जावा से कक्षा में स्थानांतरित कर सकता है।


2

मुझे नहीं लगता कि यह आम है, लेकिन यह किया जाता है। सबसे तेज आर्किटेक्ट्स में से एक जो मैंने कभी पायथन में अपनी मॉडलिंग करने के लिए काम किया था और फिर उस कोड को C ++ में लागू किया।

सामान्य रूप से इस लायक बनाने के लिए मुझे लगता है कि आपको वास्तव में जटिल और उच्च अनुकूलन योग्य एल्गोरिदम का प्रदर्शन करना होगा जो लक्ष्य भाषा में सीधे तरीके से आसानी से व्यक्त नहीं किए जाते हैं। अधिकांश "वास्तविक दुनिया / व्यापार" स्थितियों के लिए, इसकी अपेक्षाकृत आसान उसी भाषा में उच्च स्तर के इरादे को व्यक्त करना है जिसे हम लक्षित कर रहे हैं, और कहा गया है कि भाषा में कार्यान्वयन हमारे प्रदर्शन की आवश्यकताओं को पूरा करता है इसलिए उच्च में मॉडल की कोई आवश्यकता / इच्छा नहीं है। स्तर की भाषा।

आपकी स्थिति को देखते हुए, जहां आपको उच्च स्तरीय भाषा का बेहतर ज्ञान है, मैं इस पद्धति को अल्पावधि में अच्छी तरह से काम कर सकता था। न केवल यह आपको चीजों को ट्रैक पर रखने के लिए एक रोडमैप प्रदान करेगा, लेकिन यदि आपके पास प्रश्न हैं तो आप अधिक सटीकता के साथ पूछ सकेंगे।


1

वर्तमान में मैं एक ऐसी परियोजना पर काम कर रहा हूं जो C "प्रदर्शन के कारण" में लिखा गया है (यह मूल प्रेरणा थी), लेकिन वास्तव में अगर प्रोफाइल में यह पता चलता है कि यह अपना अधिकांश समय अन्य प्रणालियों (एक डीबी, अन्य ऐप्स में लिखे गए) के इंतजार में बिताता है जावा, एक सॉकेट पर "घटनाएँ"।

यदि आप गलत एल्गोरिथ्म का उपयोग करते हैं, तो आप C में भी खराब प्रदर्शन प्राप्त करते हैं (जैसे यदि आप एक कुंजी के लिए एक रेखीय खोज करते हैं, "चूंकि C में हैश टेबल नहीं हैं और हम अन्य पुस्तकालयों का उपयोग नहीं करना चाहते हैं", तो आप की तुलना में धीमी गति से चलते हैं। इसे ऐसी भाषा के साथ करें जिसमें हैश टेबल हो या जैसे सी ++, जावा, सी #, पायथन ... और इसी तरह)।

यदि आप C को किसी भी कारण से इसे करने के लिए मजबूर हैं, तो आप जिस अन्य भाषा को जानते हैं, उसमें प्रोटोटाइपिंग करना मेरे लिए इतना बुरा विचार नहीं है, यदि आप यह जानते हुए भी कि "समस्याएँ" आप वास्तविक C लागू कर रहे हैं, तो यह मुश्किल है आप सी के साथ आश्वस्त नहीं हैं (आपको जल्द ही पता चलेगा कि C / C std libs में कोई कंटेनर नहीं है, बस "सादे" सरणी है; आपको गैर-एसटीडी पुस्तकालयों की आवश्यकता है)। इसके अलावा C OO नहीं है, इसलिए यदि आप OO फैशन में प्रोटोटाइप बना रहे हैं, तो यह कठिन होगा।

संक्षेप में, सबसे अच्छी बात यह है कि अपनी "प्रोटोटाइप" भाषा में वास्तविक कार्यान्वयन करना है, और फिर, अगर वास्तव में ज़रूरत है, तो सी में सीपीयू-गहन कार्यों को लिखें, लेकिन यदि केवल सी स्वीकार्य है, तो दूसरे में प्रोटोटाइप करने से पहले इसे बेहतर तरीके से सीखें। भाषाओं और निश्चित रूप से कार्यान्वयन लिखने से पहले।


1

उच्च स्तरीय भाषा में लिखे गए कई प्रदर्शन महत्वपूर्ण अनुप्रयोग हैं।

मैंने पिछले दिनों असेंबलर और सी में प्रोग्राम किया है, और जब यह थोड़े शांत लग रहा है तो धातु के करीब है, उनका उपयोग आजकल बहुत सीमित है।

प्रदर्शन में बाधा डालने वाली कई चीजें हैं, मुझे संदेह है कि आप कभी उस हिस्से तक पहुंचेंगे जहां भाषा स्वयं सीमित कारक है। यह C बनाम C # है।

मान लें कि आपको भाषा द्वारा 10% -15% प्रदर्शन में वृद्धि हुई है। यह सही एल्गोरिदम को लागू करने में परिमाण वृद्धि के आदेश की तुलना में कुछ भी नहीं है।

जब आप C # में प्रोग्रामिंग कर रहे हैं, तो आपके पास एल्गोरिदम / डेटा संरचनाओं के आर्किटेक्चर और कार्यान्वयन पर ध्यान केंद्रित करने के लिए बहुत अधिक समय होगा, जिससे बेहतर उच्च-स्तरीय अनुकूलन हो सकते हैं।

वास्तविक दुनिया में आपको हमेशा समय की कमी होती है, इसलिए अपना समय परियोजना के दाहिने हिस्से पर बिताएं।


0

मैं उत्सुक हूं कि आपकी योजना वास्तव में सी में इसे बनाने के लिए क्या है? क्या आप प्रोटोटाइप में जा रहे हैं और फिर C सीखते हैं, और फिर C में फिर से कोड करते हैं? मेरे लिए, यह कहावत की तरह लगता है "पेट से बड़ी होने वाली आँखें" जो मुझे लगता है कि बहुत सारे प्रोग्रामर नई तकनीकों को सीखते हुए पकड़े जाते हैं (मुझे पता है कि मेरे पास है)। मेरा मतलब यह है कि आप कुछ ऐसा डिज़ाइन करने की कोशिश कर रहे हैं जो स्पष्ट रूप से संवेदनशील प्रदर्शन के बिना संवेदनशील है, यहां तक ​​कि भाषा के ins और बहिष्कार को जानने के बिना भी जो आपको लगता है कि अंततः इसे लिखा जाना चाहिए, मूल रूप से आप पहले से ही एक C ऐप डिज़ाइन करना शुरू कर देना चाहते हैं। C को जानें जब समय पहले सीखने में बेहतर ढंग से व्यतीत हो सकता है और तब आप अपने इच्छित एप्लिकेशन को लिखने के लिए अधिक जानकारी प्राप्त कर सकते हैं। शायद मैंने इस सवाल को गलत समझा और आपने इस प्रोग्राम को C में प्रोग्राम बनाने के लिए किसी दूसरे प्रोग्रामर को सौंपने का इरादा किया,


कभी-कभी "ऐसा मत करो।" है करने के लिए सही जवाब "मैं कैसे करते हैं एक्स?"
लैरी कोलमैन

0

आप जिस समस्या को हल करने का प्रयास कर रहे हैं, उसमें समझ हासिल करने के लिए, कभी-कभी प्रोटोटाइपिंग की जाती है। और कभी-कभी, अंतर्निहित प्रौद्योगिकियों को जानने के लिए यदि आप पहले से ही परिचित नहीं हैं।

वर्णित मामले के लिए, आप एक स्क्रिप्टिंग भाषा में प्रोटोटाइप पर विचार कर रहे हैं, कहते हैं, अजगर और सी में वास्तविक कोड बनाने के लिए।

कुछ संभावनाओं का मूल्यांकन:

1 है । आप अजगर में प्रोटोटाइप बनाते हैं और सी में सॉफ्टवेयर लिखते हैं।

स्क्रिप्टिंग भाषा में प्रोटोटाइप मदद कर सकता है जहां आप इनपुट के खिलाफ आउटपुट की जांच करना चाहते हैं । यह तब उपयोगी होता है जब आपको किसी समस्या के समाधान के लिए मुख्य रूप से अपने तर्क का परीक्षण करने की आवश्यकता होती है। इसके अलावा, उपयोगी यदि आप जल्दी से एक साथ अन्य लोगों के लिए एक डेमो रखना चाहते हैं ।

आपने अजगर में जो भी कोड लिखा होगा, उसका उपयोग अंतिम सॉफ्टवेयर में नहीं किया जाएगा। लेकिन, यह मदद कर सकता है यदि आप अपने प्रोटोटाइप पर किसी ऐसे व्यक्ति के पास जा रहे हैं जो अजगर को पढ़ सकता है और सी में लिख सकता है। यहां, प्रोटोटाइप एक विचार को संवाद करने में मदद कर सकता है

यह विधि समाधान की तार्किक व्यवहार्यता का परीक्षण करने के लिए उपयुक्त है।

। आप C में प्रोटोटाइप बनाते हैं और C में सॉफ्टवेयर लिखते हैं।

सी में प्रोटोटाइप, जो आपके लिए नया है, दो फायदे हैं। एक, जब आप प्रोटोटाइप लिखते हैं, तो आपको भाषा , लाइब्रेरी, एपीआई, नुकसान आदि के प्रासंगिक हिस्सों को समझने में मदद मिलती है । दो, जबकि आप अंतिम सॉफ्टवेयर का निर्माण करते हैं, आप स्वयं प्रोटोटाइप से शुरू कर सकते हैं जो आपको समय बचाता है और कोड का पुन: उपयोग करता है।

यह विधि दोनों के परीक्षण के लिए उपयुक्त है, समाधान की तार्किक और तकनीकी व्यवहार्यता।

। आप हाथ में समस्या के आधार पर प्रोटोटाइप के गैर-कोडिंग तरीकों पर विचार कर सकते हैं।

यदि यह तर्क और विचारों के कुछ टुकड़े आप प्रोटोटाइप करना चाहते हैं; छद्म कोड , फ्लोचार्ट और कागज पर ब्लॉक आरेख भी अच्छा है।

यदि यह UI प्रोटोटाइप है, तो कुछ UI मॉक-अप टूल या फिर से, कुछ पेपर पर विचार करें।


0

मुझे लगता है कि आपको एक ऐसी भाषा में प्रोटोटाइप बनाना चाहिए जिससे आप परिचित हों (पायथो / रूबी / सी # क्या नहीं) ताकि:

  1. आप उन सुविधाओं / पुस्तकालयों का सबसे अच्छा लाभ उठाते हैं जो भाषा प्रदान करती है।
  2. आप अपना समय भाषा की सीमाओं के बजाय डिजाइन विकल्पों पर निर्णय लेने में बिताते हैं।

बाद में, आप बोतल गर्दन के क्षेत्रों को खोजने के लिए एक रूपरेखा उपकरण का उपयोग कर सकते हैं। C / C ++ में पुनः कार्यान्वयन। कुछ बार चरण से ऊपर दोहराएं, जो जानता है कि आपका प्रोटोटाइप 'काफी तेज' हो सकता है!


0

मुझे नहीं लगता कि आपके द्वारा बताए गए दृष्टिकोण से आप कुछ हासिल कर रहे हैं, और कई लोगों ने वर्णन किया है कि कुछ विस्तार से क्यों।

एक परियोजना जिसे मैंने शामिल किया है, इस तरह के दृष्टिकोण का उपयोग किया है: सेल / बीई और पावर 7 आर्किटेक्चर के लिए गणित पुस्तकालय विकास। फ़ंक्शंस हास्केल (CoCoNUT का उपयोग करके) में मॉडल किए गए थे, और आउटपुट फ़ंक्शंस एक विशेष लक्ष्य वास्तुकला के लिए अनुकूलित असेंबली में थे।

इस मामले में लक्ष्य ट्यून किए गए विधानसभा निर्देशों और कई आर्किटेक्चर को लक्षित करने की क्षमता के साथ उच्च प्रदर्शन थे।

भोजन के लिए हालांकि, मुझे आशा है कि आप भूखे नहीं हैं :)


0

एक उच्च प्रदर्शन डेटाबेस इंजन के लिए आपको संभवतः आवश्यकता होगी:

  • बहु सूत्रण,
  • स्पष्ट स्मृति प्रबंधन,
  • अतुल्यकालिक सूचनाएं,
  • सेमाफोरस या सिंक्रोनाइज़ेशन प्राइमेटिव्स
  • निम्न स्तर की फ़ाइल सिस्टम फ़ंक्शंस के लिए आसान पहुँच।

आपके द्वारा चुने गए एल्गोरिदम प्रदर्शन के लिए महत्वपूर्ण हैं।

सामान्य सलाह उच्च स्तर की भाषा के साथ शुरू करना है, फिर केवल उन बिट्स को माइग्रेट करें जिन्हें निचले स्तर की भाषा में अनुकूलन की आवश्यकता है।

तथापि , आपके द्वारा चुनी गई उच्च स्तरीय भाषा को आपके द्वारा लिखे जाने वाले एल्गोरिदम का समर्थन करने में सक्षम होना चाहिए: और कुशल एल्गोरिदम यहाँ अंततः थ्रेडिंग, स्मृति के कुशल उपयोग, और सर्वोत्तम निम्न स्तर की फाइल सिस्टम संचालन के नियंत्रण में हावी हो सकते हैं। उपलब्ध। इसलिए यदि अंतिम लक्ष्य प्रदर्शन है, तो आप उन भाषाओं में प्रोटोटाइप नहीं बना सकते हैं जो उन प्राथमिकताओं का समर्थन नहीं करती हैं जिन्हें आपको उपयोग करने की आवश्यकता है।

यदि आपको अपने प्रोटोटाइप का परीक्षण करने की आवश्यकता है (या अन्य लोगों को इसके इंटरफेस के खिलाफ सॉफ़्टवेयर विकसित करने की आवश्यकता है), तो आपको उस भाषा में भी काम करने की आवश्यकता है जो इच्छित एपीआई का समर्थन करती है। फिर आप अन्य लोगों को अपने कोड का परीक्षण करने और अनुकूलन करते समय अपने स्वयं के प्रतिगमन परीक्षण करने की अनुमति दे सकते हैं।

ये विचार शायद इस मामले में उच्च स्तरीय प्रोटोटाइप के लिए कई भाषाओं को खारिज करते हैं - और शायद उन सभी का उल्लेख किया है (संभवतः सी # को छोड़कर)। लेकिन, आप निश्चित रूप से, किसी भी भाषा (अंग्रेजी सहित) में छद्म कोड कर सकते हैं और, यदि आवश्यक हो, तो आप अपनी पसंदीदा भाषा में परियोजना के कुछ हिस्सों (उदाहरण के लिए फ़ंक्शन, उदाहरण के लिए) का प्रोटोटाइप कर सकते हैं।

C ++ और C (और नगण्य प्रदर्शन अंतर) के बीच घनिष्ठ संबंध का अर्थ है कि अंतिम उत्पाद में C ++ को C पसंद नहीं करने के बहुत कम कारण हैं।

(मैं इस धारणा पर जवाब दे रहा हूं कि आपको किसी विशेष उद्देश्य के लिए उच्च प्रदर्शन डेटाबेस इंजन की आवश्यकता है: यदि आपके इरादे अधिक विनम्र हैं, तो संभवतः आप शेल्फ से एक मौजूदा इंजन उठा रहे होंगे)।


-2

मुझे लगता है कि सी की प्रसिद्धि अच्छी तरह से लायक है, क्योंकि शानदार उत्पाद यूनिक्स सी में लिखा गया था। हालांकि, सी बेस्ट को जानने वाले लोगों की तुलना में, मुझे इस बात पर संदेह है कि इसका उपयोग क्यों किया जाना चाहिए। ऐसा कहा जाता है कि केन थॉम्पसन (असेंबली भाषा में यूनिक्स का पहला संस्करण लिखने के बाद) ने यूनिक्स को फोरट्रान में लिखना शुरू किया, लेकिन एक सप्ताह या एक महीने के बाद छोड़ दिया, और सी का उपयोग करना शुरू कर दिया, जिसे उनके सहयोगी केन रिची द्वारा विकसित किया जा रहा था उसी समय।

मुझे हाल ही में यह पढ़कर अचरज हुआ कि फोरट्रान सी और सी ++ से तेज है।

रिचर्ड मुलिंस


1
यह पूछे गए प्रश्न का उत्तर कैसे देता है?
gnat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.