आपली स्वतःची प्रोग्रामिंग भाषा तयार करा (मी)

प्रोग्रामिंग भाषांची उत्क्रांती

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

आपण कदाचित आश्चर्यचकित आहात: Virtual व्हर्च्युअल मशीन? पण हे खूप कठीण नाही आणि त्यामुळे प्रोग्राम्स हळू होतात? " याउलट, एक साधी व्हर्च्युअल मशीन अतिशय सोपी आणि तुलनेने वेगवान आहे. मी निवडले आहे गंज आभासी मशीन भाषा म्हणून. पण ते काय आहे गंज?

गंज ही एक प्रोग्रामिंग भाषा आहे जी अंमलबजावणीच्या सुरक्षिततेवर केंद्रित आहे, म्हणून याचा उपयोग करून एखाद्याला आभासी मशीन बंद करण्यास सक्षम करणे व्यावहारिकदृष्ट्या अशक्य होईल. ही विकसित केलेल्या विकासातील एक संकलित भाषा आहे Mozilla. सर्व्हो, पर्याय गेको, त्याच्यात विकास होत आहे. आपण अद्याप आपला वाक्यरचना बदलू शकता परंतु मी वापरत असलेला कोड पहिल्या स्थिर रीलीझपर्यंत ठेवला जाईल.

गंज मध्ये स्थापित linux सोप्या मार्गाने. तथापि, तेथे अधिकृत पार्सल नाही. चे वापरकर्ते उबंटू या दोन जोडू शकता पीपीए: पीपीए: हंसोर्ग / गंज  y पीपीए: सेमीआरएक्स 64 / कार्गो, चे वापरकर्ते कमान वापरू शकता AUR (मालवाहू हे सर्वकाही स्थापित करणारे पॅकेज आहे). बाकीचे हे वापरू शकतात:

curl -s https://static.rust-lang.org/rustup.sh | sudo sh

व्हर्च्युअल मशीन कसे कार्य करते?

जर आपल्याला माहित असेल की असेंबलर जग कसे कार्य करते हे स्टॅक किंवा स्टॅकसह अगदी समान आहे. तसे नसल्यास मी ते तुम्हाला समजावून सांगेन. चला खालील कोडची कल्पना करूया:

2 + 3 मुद्रित करा

संगणकास 2 + 3 चा अर्थ काय आहे हे समजत नाही किंवा कोणत्या ऑर्डरचे अनुसरण करावे हे देखील त्यांना माहिती नाही. संगणक बॅटरी किंवा स्टॅकसह कार्य करतात ज्यात डेटा एकत्रित केला जातो आणि सतत काढला जातो. आमच्या व्हर्च्युअल मशीनमधील कोड यासारखे दिसला पाहिजे:

पुश 2 पुश 3 प्रिंट जोडा

मुळात आम्ही 2 वरच्या स्टॅकवर ठेवतो, 3 देखील. ADD स्टॅकवरील शेवटच्या 2 वस्तू ओढून काढेल (उदा. स्टॅकमधून काढून त्याचे मूल्य प्राप्त करेल) आणि परिणाम स्टॅकच्या शीर्षस्थानी जोडा. प्रिंट स्टॅकवरील शेवटची वस्तू घेईल आणि ती आमच्याकडे प्रदर्शित करण्यासाठी वापरेल. आता ते करूया गंज.

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

https://gist.github.com/a01de8904fd39a442c20

आम्ही प्रत्येक निर्देशासाठी हेक्साडेसिमल संकेतन वापरतो. उच्च आम्ही ठेवले आहे # [व्युत्पन्न (प्राइमेटिव्हकडून)]ही एक खासियत आहे गंज आणि नंतर आम्हाला थेट बाइट्ससह गणिताची तुलना करण्यास सक्षम होण्यासाठी मदत करेल.

आता आपण त्यातील प्रत्येक सूचना कार्यान्वित करणारे कार्य केले पाहिजे. यासाठी आपण एक बाइट वाचणे आवश्यक आहे आणि आपल्याकडे गणनेत असलेल्या सूचनांशी तुलना करणे आवश्यक आहे. आपणास अस्तित्वात असलेले कोणतेही आढळल्यास, आपण आपली क्रिया अंमलात आणली पाहिजे.

https://gist.github.com/8950ce212a2de2f397f9

आम्ही प्रत्येक बाईट वैयक्तिकरित्या वाचण्यासाठी आणि त्या कार्यान्वित करण्यासाठी करतो:

https://gist.github.com/12e24a1f0dd65e4cd65d

आपण पाहू शकता की, आम्हाला फरक आहे की आधी आम्हाला पुश कमांड (आमच्या इंटिगेर कमांड) दिली गेली असेल तर पुढील बाइट पूर्णपणे स्टॅकवर नेले जाईल. तिथे आम्ही दोन कार्ये वापरत आहोत जे मी तुम्हाला शिकवले नाही, सेल्फ.पॉप () y सेल्फ.पुश (), जे स्पष्टपणे स्टॅक हाताळण्यासाठी प्रभारी आहेत.

https://gist.github.com/54147f853a8a2b8c01d9

ते फार क्लिष्ट नाहीत, परंतु पॉप फंक्शनमध्ये त्रुटी शोधण्याची यंत्रणा आहे. खरं तर, मध्ये गंज, जर आम्ही त्या यंत्रणा काढून टाकल्या तर त्या आम्हाला संकलित त्रुटी देईल. आता आपल्याला फक्त प्रोग्राममध्ये कॉल करावा लागेल पेरिन (आमचे आभासी मशीन) आणि बायकोड चालवा.

https://gist.github.com/99b1ab461318b3a644d0

तो बायकोड फाईल वरून वाचला जाऊ शकतो, परंतु येथे साधेपणासाठी मी ते व्हेरिएबलमध्ये संग्रहित केले आहेत. जर आपण ते कार्यान्वित केले तर ते आम्हाला अपेक्षित निकाल देईल:

पेरिन व्ही .१.१ पेरिन व्हीएम फ्लिनफ्लिप बायकोड चालविते पेरीनव्हीएम इन्सस्टेंस पेरीनव्हीएम व्ही .१.० पूर्णांक संख्या 0.1

सर्व कोड येथे उपलब्ध आहे GitHub अंतर्गत अपाचे परवाना 2.0: https://github.com/AdrianArroyoCalle/perin. संकलित करण्यासाठी त्यांच्याकडे असणे आवश्यक आहे मालवाहू स्थापित आणि ठेवले:

चार्ज बिल्ड && ./target/main

पुढील अध्यायात आपण आपल्या प्रोग्रामिंग भाषेबद्दल अधिक पाहू.


आपली टिप्पणी द्या

आपला ई-मेल पत्ता प्रकाशित केला जाणार नाही. आवश्यक फील्ड चिन्हांकित केले आहेत *

*

*

  1. डेटा जबाबदार: मिगुएल Áन्गल गॅटन
  2. डेटाचा उद्देशः नियंत्रण स्पॅम, टिप्पणी व्यवस्थापन.
  3. कायदे: आपली संमती
  4. डेटा संप्रेषण: कायदेशीर बंधन वगळता डेटा तृतीय पक्षास कळविला जाणार नाही.
  5. डेटा संग्रहण: ओकेन्टस नेटवर्क (EU) द्वारा होस्ट केलेला डेटाबेस
  6. अधिकारः कोणत्याही वेळी आपण आपली माहिती मर्यादित, पुनर्प्राप्त आणि हटवू शकता.

  1.   रोडर म्हणाले

    मनोरंजक कुतूहल, जरी हे वास्तविकतेत फारसे उपयुक्त नसले तरी ते जाणून दुखत नाही.

    आपण रस्टची जाहिरात केली ही चांगली गोष्ट आहे, ही एक भाषा असून ती बरीच आश्वासने देते, ती केवळ सी ++ पेक्षा अधिक सुरक्षित नाही, परंतु (आतासाठी) त्याच्या वाक्यरचनामध्ये स्पष्ट आहे.

    फोटोसाठी, मी जावा इव्होल्यूशन एक्सडीचा विचार करणार नाही.

    1.    रोडर म्हणाले

      आणि किल्ल्यापासून, मी हे कधीही वापरलेले नाही, परंतु मी याबद्दल फारसे ऐकले नाही ...

      1.    कल्पित म्हणाले

        मी करतो आणि अजिबात अजिबात उघडत असलं तरीही ते अभियांत्रिकीमध्ये उपयुक्त आहे.

      2.    जुआन म्हणाले

        फोर्ट्रानन ही सी बरोबर इतर एक मोठी भाषा आहे परंतु अद्याप खरोखर गंभीर प्रश्नांमध्ये एक किंवा इतर असेल.

        आणि हे चर्चेत असेल की फोर्ट्रान हा सी च्या 'विकास' म्हणून आहे, जेव्हा कदाचित तो जवळपास इतर मार्गाने असावा, कारण सी नवीन आहे, अधिक आधुनिक आहे आणि अधिक शक्यता आहे; जरी एकाला कमीतकमी दुसर्‍यापासून वेगळे केले जात नाही.

        जरी अंतिम स्थिती काही दृष्टीकोनातून सर्व चर्चेच्या रूपात आहे.

    2.    फ्रॅनसिसको म्हणाले

      जावा +1 वर

  2.   पोर्टारो म्हणाले

    मला हे आवडते आहे का ते पाहूया, मी प्रोग्रामिंगला काहीतरी देईन परंतु अधिक समजते की नाही हे पहाण्यासाठी मी प्राथमिक.

  3.   usergnulinux म्हणाले

    नवीन प्रोग्रामिंग भाषा तयार करण्याचा खरा हेतू काय आहे? स्त्रोत कोड लपविणे हे एक चाल आहे असे मला व्यक्तिशः वाटते.

  4.   येली म्हणाले

    मित्रा, "आपली स्वतःची ऑपरेटिंग सिस्टम" सुरू ठेवण्याचे काय झाले? कृपया ते तिथेच सोडू नका.

    वास्तविक, आपण एक मास्टर आहात आणि फक्त या दोन गाण्यांनी माझे पूर्ण लक्ष वेधून घेतले आहे, परंतु ते अर्ध्यावर रहावे असे मला वाटत नाही.

    मला माहित आहे की आपल्यापैकी बर्‍याच जणांनी असा विचार केला आहे आणि आम्ही या अतिशय मनोरंजक विषयांच्या सुरूवातीस आणि निष्कर्षांची वाट पाहत आहोत.

  5.   ख्रिश्चन डेव्हिड म्हणाले

    खूप मनोरंजक, तुमचे मनापासून आभार 🙂

  6.   विमा म्हणाले

    मी जावाला प्रोग्रामिंग भाषा मानत नाही, त्याऐवजी कमांड इंटरप्रिटर मानत नाही कारण ते संकलित करता येत नाही

    1.    मारिओ म्हणाले

      [प्रोग्रामिंग भाषा ही एक औपचारिक भाषा असते जी संगणकासारख्या मशीनद्वारे करता येणारी प्रक्रिया व्यक्त करण्यासाठी डिझाइन केलेली असते.]

      या कारणास्तव, जावा एक प्रोग्रामिंग भाषा आहे. अगदी बॅश भाषा (लिनक्स शेल भाषा) ही एक प्रोग्रामिंग भाषा आहे.

      दोन प्रकारच्या भाषा आहेत:
      - संकलित
      - अर्थ लावला
      - मिश्रित (आभासी मशीन, मूळ ग्रंथालये संकलित केली आहेत आणि फंक्शनल कोडचा अर्थ लावला आहे)

      जेव्हा मल्टीप्लेटफॉर्मवर येते तेव्हा दुभाष्यांना उपयुक्त ठरते आणि त्यासाठी आपत्तीजनक कामगिरी करत नाही. जावा, व्हीबी.नेट, सी ++ .नेट, एफ #, सी # या सर्व मिश्रित भाषा आहेत. बॅश भाषा, बॅट, पीएचपी, जावास्क्रिप्ट आणि इतर बर्‍याच भाषांचा अर्थ लावला जाते.

      आपण जावाला भाषा म्हणून मानत नाही कारण त्याची व्याख्या केली आहे (जी ती नाही) आपण प्रोग्राम बनवण्यासाठी वापरल्या जाणार्‍या इतर बर्‍याच भाषांचा विचार करू नये. शिवाय, त्या तीन नियमांनुसार आपण मशीन भाषेशिवाय कोणतीही प्रोग्रामिंग भाषा आहे याचा विचार करू नये.

      आणि का नाही? मशीन प्रोसेसरद्वारे भाषांतरित कमांडचा एक संच असल्यामुळे मशीन भाषादेखील एक भाषा मानली जाऊ शकत नाही.

      कारण प्रभावीपणे, सर्व भाषा प्रोसेसरद्वारे परिभाषित केलेल्या कमांडच्या संचाशिवाय काहीच नसतात.

      आपल्याला जास्तीत जास्त भाषा आवडेल (जावा, या प्रकरणात), कमीतकमी उपयुक्त आणि शक्तिशाली वाटली परंतु संकलित केलेली नाही कारण ती प्रोग्रामिंग भाषा नाही असे म्हणायला लागेल ... ही सर्व प्रोग्रामिंग भाषेच्या परिभाषाच्या विरूद्ध आहे.

    2.    मारिओ म्हणाले

      😐 मी आशा करतो की मी खूप कठोर दिसत नाही

      1.    मारिया अँटोनिएटा डी मॅनुएला कार्डिनेस म्हणाले

        शांत नाही आपण फक्त आमचे जीवन नष्ट केले

      2.    मारिओ म्हणाले

        hahahahaha, perdoooon. तो माझा हेतू xD नव्हता

    3.    कार्लोस म्हणाले

      जावा एक प्रोग्रामिंग भाषा आहे. कारण आपण एखादा अनुप्रयोग विकसित करू शकता आणि जेव्हा आपण संकलित करता तेव्हा आपण जे.व्ही.एम. द्वारे अर्थ लावलेला एक .जर तयार करा. मग आपल्या अजगर तर्कशास्त्रानुसार त्याचा अर्थ लावला जात नाही तर ते भिन्न एक्झिक्युटेबलसाठी संकलित करतात ...

  7.   इलियास मोंगेलोस म्हणाले

    खूप चांगली माहिती

  8.   कार्लोस आर्टुरो म्हणाले

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