उच्च स्तरीय भाषाओं में प्रोग्रामर निम्न स्तर के सॉफ्टवेयर विकास से कैसे निपटते हैं?


20

मैं प्रोग्रामिंग में कुछ नया हूं और इस सवाल का सबसे अच्छा तरीका मैं एक उदाहरण के साथ पूछ सकता हूं।

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

मुझे पता है कि यह सब 1s और 0s के लिए उबला हुआ है और विधानसभा की भाषाएं मूल रूप से 1s और 0s के पैटर्न को कमांड देती हैं, लेकिन ऐसा लगता है कि वहां से यह कूद है: इसके लिए एक पुस्तकालय का उपयोग करें। यह मुझे ऐसा लगता है जैसे बिना पुस्तकालय के सभी सी # कर सकते हैं अंकगणित और द्विआधारी तर्क। इनपुट या आउटपुट प्राप्त करने के लिए, आप पुस्तकालयों आदि का उपयोग करते हैं ...

मुझे पता है कि यह प्रश्न शायद कुछ के लिए स्पष्ट है और मुझे पता है कि मुझे बहुत कुछ सीखना है, लेकिन मुझे यह भी नहीं पता कि इस तरह के प्रश्न की शुरुआत कहां से की जाए। धन्यवाद।

तो मेरा सवाल ये है:

अगर कोई एक वर्चुअल मशीन या एक Playstation एमुलेटर, या एक ऑपरेशन सिस्टम, या एक ड्राइवर बनाने के लिए जा रहा था, या एक मीडिया प्लेयर के लिए एमपी 3 समर्थन जोड़ें, या अपनी खुद की फ़ाइल प्रकार, आदि बनाएं ... कैसे? मैं वह तरीका नहीं देख सकता जो C # या Java के साथ किया जाता है।

दूसरे शब्दों में, अगर मैं ओरियोली द्वारा WROX या प्रोफेशनल सी # की तरह एक किताब पढ़ता हूं, तो क्या मुझे पता होगा कि इन चीजों को कैसे करना है? या क्या आपको C ++ जैसी असेंबली लैंग्वेज या कुछ और निम्न स्तर सीखना है?


7
"हुड के नीचे" क्या चल रहा है, यह समझने के लिए एक चाल ध्यान केंद्रित करने और चीजों को पढ़ने और समझने में आसान बनाने के लिए पैराग्राफ का उपयोग करने के लिए है। कृपया इस प्रश्न को पढ़ने में आसान होने के लिए संपादित करें।
S.Lott

1
आपकी रुचि को देखते हुए आप चार्ल्स पेट्ज़ोल्ड्स कोड: द हिडन लैंग्वेज ऑफ कंप्यूटर हार्डवेयर एंड सॉफ्टवेयर की एक प्रति चुन सकते हैं। अच्छा पढ़ा है। amazon.com/Code-Language-Computer-Hardware-Software/dp/…
DKnight

@ S.Lott टू रेस्क्यू :-)
मार्टिन विकमैन

@ मर्टिन विकमैन: बहुत अच्छा काम करते हुए, @ fender1901 को संपादित करने या ध्यान केंद्रित करने में मदद मिली?
एस.लॉट 20

1
@ मर्टिन विकमैन: परिवर्तनों को पूर्ववत् करना बिंदु नहीं है। दूसरों को सीखने के लिए प्रोत्साहित करना मेरी बात है। आप स्पष्ट रूप से जानते हैं। @ fender1901 को करके सीखने की जरूरत है। मेरा सवाल यह है: "क्या यह @ fender1901 को संपादित करने या ध्यान केंद्रित करने में मदद करता है?" तुम क्या सोचते हो?
लोट

जवाबों:


9

दिलचस्प सवाल! आप पाएंगे कि जावा और सी # जैसी भाषाएं वास्तव में निम्न स्तर की प्रोग्रामिंग का समर्थन करती हैं। उदाहरण के लिए जावा के लिए OpenJDK में कुछ I / O स्रोत कोड देखें। आप देखेंगे कि उच्च स्तर की विधियाँ निचले स्तर के सॉकेट प्रौद्योगिकियों, बाइट सरणियों और बिट ट्विडलिंग के साथ कार्यान्वित की जाती हैं।

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

यदि आप जिस वातावरण में विकास कर रहे हैं, वह इन उच्च स्तरीय वीएम (अक्सर स्थान और प्रदर्शन की आवश्यकताओं के कारण) में से एक की मेजबानी नहीं करता है, तो आपको 'निचले स्तर' की भाषा का उपयोग करने की आवश्यकता है।

मेरा मानना ​​है कि C / C ++ अभी भी निम्न स्तर के ड्राइवरों आदि को लिखने के क्षेत्र में रोस्ट को नियमबद्ध करता है क्योंकि आप मेमोरी प्रबंधन और डेटा संरचनाओं को nth डिग्री तक ट्वीक कर सकते हैं।

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

HTH


क्या आप वास्तव में मध्यवर्ती भाषाओं के साथ कार्यक्रम कर सकते हैं या वे सिर्फ जांच के लिए वहां हैं?
fender1901

क्या आप पूछ रहे हैं कि क्या आप 'bytecode' सोर्स कोड लिख सकते हैं?
मार्टिज्न वर्बर्ग

मुझे लगता है। मैं सोच रहा था कि क्या आप सिर्फ bytecode या il का उपयोग करके कोडिंग शुरू कर सकते हैं जैसे आप java या c #?
fender1901

जावा या सी #, बहुत कम लोगों को बाईटकोड से छेड़छाड़ कर रहे हैं, फिर भी लोगों के अपेक्षाकृत बड़े समूह को अपने विशेष उच्च स्तर कोड करने पर निर्भर करता क्या बाइट कोड पर नज़र करते हैं
मार्टिन Verburg

4

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

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

बेशक, जावा और सी # जैसी उच्च-स्तरीय भाषाओं को भी ऑपरेटिंग सिस्टम के साथ बात करने की आवश्यकता है। हर बार जब आप एक फ़ाइल खोलते हैं या नेटवर्क सॉकेट से पढ़ते हैं, तो आप ओएस के साथ हस्तक्षेप कर रहे हैं। यह सिर्फ इतना है कि जावा और सी # उच्च-स्तरीय अमूर्त में निम्न-स्तरीय ओएस सिस्टम कॉल को एक Socketवस्तु की तरह लपेटते हैं । इस उच्च-स्तरीय दृष्टिकोण का यह लाभ है कि एक ही जावा कोड विभिन्न प्लेटफार्मों पर काम करेगा। जबकि, जिस तरह से आप UNIX पर C में एक सॉकेट खोलते हैं, वह आपके विंडोज पर करने के तरीके से काफी अलग होता है।

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


2

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

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


2

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


2

जब आप C # या Java (या अन्य भाषाओं) के साथ निम्न-स्तरीय सामान कर सकते हैं, तो अधिकांश लोग ऐसा नहीं करते हैं। इसलिए, किसी भी उचित रूप से लोकप्रिय पुस्तक जिसे आप उठाते हैं, वह निम्न-स्तर का सामान छोड़ देगा। वे आपके द्वारा आवश्यक भाषा सुविधाओं को कवर करने की संभावना रखते हैं, लेकिन उन्हें उस तरीके से लागू नहीं करते हैं जिस तरह से आप उत्सुक हैं। इसी तरह, कम-स्तरीय सामान पर किताबें शायद सी में होंगी, शायद थोड़ी असेंबली भाषा के साथ।

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

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


मुझे लगता है कि अभी मेरी सबसे बड़ी समस्या यह है कि इनमें से बहुत सारे विषयों को समझ पाना मुश्किल है क्योंकि मेरे पास पृष्ठभूमि नहीं है। मुझे जरूरत है, मुझे लगता है, उन क्षेत्रों में एक पुल।
fender1901

@ fender1901: यह एक समस्या हो सकती है। लिनक्स कर्नेल कुछ चीजें करता है जो वास्तव में किसी ऐसे व्यक्ति को अजीब लगेगा जो समझ नहीं पाता है कि ऑपरेटिंग सिस्टम क्या करता है। एमुलेटर, आपके द्वारा बताई गई चीजों को समझने में सबसे आसान होगा, और शुरुआती माइक्रो कंप्यूटर के लिए अक्सर सरल एमुलेटर भी होते हैं।
डेविड थॉर्नले

1

आपको यह पता लगाना चाहिए, कि निम्न-स्तरीय फ़ंक्शन का उपयोग किए गए प्लेटफ़ॉर्म / भाषा के साथ करना संभव है या नहीं:

  • एक बाइट को एक चर में संग्रहीत करना,
  • बाइट्स द्वारा फाइल पढ़ना / लिखना,
  • बाइट्स की एक सरणी की स्थापना, तत्वों तक पहुँचने,
  • सच्ची प्रक्रियात्मक विशेषताओं का उपयोग करें, OOP,
  • स्क्रीन, कीबोर्ड, सॉकेट्स तक पहुंचना।

हम्म, लगता है कि एक भाषा का चयन यादृच्छिक होना चाहिए।


-2

प्रश्न के कई उत्तर हैं: 1. जावा और सी # उच्च स्तरीय भाषाएं हैं जिन्हें वे मौजूदा ऑपरेटिंग सिस्टम पर एप्लिकेशन डेवलपमेंट के लिए विकसित किया गया है जो मेमोरी का प्रबंधन करता है (यह हाइब्रिड प्रोग्राम बनाना संभव बनाता है जो विभिन्न सिस्टम पर चल सकते हैं)। 2. जिन क्षेत्रों में निम्न स्तर की प्रोग्रामिंग की आवश्यकता होती है, वह है OS विकास, चालक विकास, AAA खेल विकास, आदि। सामान्यतया निम्न स्तर की प्रोग्रामिंग जावा या C # में नहीं की जाती है, इसे C / C ++ और असेंबली भाषा का उपयोग किया जाता है।

केवल इस दो बिंदुओं के साथ हम कह सकते हैं कि निम्न स्तर की प्रोग्रामिंग अलग से की जाती है और उच्च स्तर की प्रोग्रामिंग में निम्न स्तर की प्रोग्रामिंग की आवश्यकता नहीं होती है। जिन भागों में निम्न प्रोग्रामिंग की आवश्यकता होती है जैसे I / O की व्याख्या दुभाषिया द्वारा की जाती है जो स्वयं एक निम्न स्तर की भाषा में लिखी जाती है (उदाहरण के लिए जावा की JVM C में लिखी गई है)।

आपके प्रश्न का मुख्य उत्तर यह है कि यह चीजें जावा और सी # का उपयोग करके विकसित नहीं की गई हैं, यह चीजें सी और असेंबली में की जाती हैं, इसलिए इसे जावा और सी # में करने के तरीके खोजने के बजाय आपको सी और असेंबली को सीखना चाहिए क्योंकि वे सबसे बड़े दोस्त हैं प्रोग्रामिंग और हाँ बड़ा फायदा यह है कि निम्न स्तर पर लिखे गए कार्यक्रम छोटे और शीघ्र होते हैं।


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