ई (प्रोग्रामिंग भाषा)

From alpha
Jump to navigation Jump to search
E
ParadigmMulti-paradigm: object-oriented, message passing
द्वारा डिज़ाइन किया गयाMark S. Miller
पहली प्रस्तुति1997
टाइपिंग अनुशासनStrong, dynamic
ओएसCross-platform
लाइसेंसPortions in different free licenses
वेबसाइटerights.org
Major implementations
E-on-Java, E-on-CL
Influenced by
Joule, Original-E, Java
Influenced
Pony

ई कंप्यूटर सुरक्षा वितरित कंप्यूटिंग के लिए एक वस्तु-उन्मुख प्रोग्रामिंग भाषा है, जिसे मार्क एस मिलर द्वारा बनाया गया है,[1] डैन बोर्नस्टीन, डगलस क्रॉकफोर्ड,[2] चिप मॉर्निंगस्टार[3] और 1997 में इलेक्ट्रिक समुदायों में अन्य। ई मुख्य रूप से समवर्ती भाषा जौल प्रोग्रामिंग भाषा से और मूल-ई से, सुरक्षित वितरित प्रोग्रामिंग के लिए जावा के एक्सटेंशन का एक सेट है। ई संदेश (कंप्यूटर विज्ञान) आधारित संगणना को जावा (प्रोग्रामिंग लैंग्वेज)-जैसे सिंटैक्स के साथ जोड़ती है। इवेंट-संचालित प्रोग्रामिंग और प्रॉमिस (प्रोग्रामिंग) पर आधारित एक समवर्ती प्रोग्रामिंग मॉडल यह सुनिश्चित करता है कि गतिरोध कभी नहीं हो सकता है।[4]


दर्शन

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

कम्प्यूटेशनल मॉडल

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

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

सिंटेक्स और उदाहरण

ई का सिंटैक्स जावा (प्रोग्रामिंग लैंग्वेज) के समान है, हालांकि यह पायथन (प्रोग्रामिंग लैंग्वेज) और पास्कल (प्रोग्रामिंग लैंग्वेज) से भी कुछ समानता रखता है। चर डेटाटाइप और लेक्सिकली स्कोप (प्रोग्रामिंग) हैं। जावा या पायथन के विपरीत, हालांकि, ई पूरी तरह से अभिव्यक्ति (प्रोग्रामिंग) से बना है। यहाँ एक अत्यंत सरल ई कार्यक्रम है:

<वाक्यविन्यास लैंग = अजगर>

Println (हैलो, दुनिया!)

</वाक्यविन्यास हाइलाइट>

यहाँ एक संख्या के क्रमगुणन की गणना के लिए एक पुनरावर्ती कार्य है, जिसे ई में लिखा गया है। कार्यों को उपयोग करके परिभाषित किया गया है def कीवर्ड।

<वाक्यविन्यास लैंग = अजगर>

डीफ़ फैक्टोरियल (एन: इंट): इंट {
  अगर (एन == 1) {
    वापसी 1
  } और अगर (एन > 0) {
    रिटर्न एन * फैक्टोरियल (एन -1)
  } वरना {
    फेंकें (फैक्टोरियल के लिए अमान्य तर्क: + एन)
  }
}

</वाक्यविन्यास हाइलाइट>

पहली पंक्ति में, :int एक गार्ड है जो कार्य के तर्क और परिणाम को विवश करता है। एक प्रकार की घोषणा के रूप में एक गार्ड काफी समान नहीं है; गार्ड वैकल्पिक हैं और बाधाओं को निर्दिष्ट कर सकते हैं। सबसे पहला :int यह सुनिश्चित करता है कि फ़ंक्शन के मुख्य भाग को केवल एक पूर्णांक तर्क को हैंडल करना होगा। दूसरे के बिना :int ऊपर, फ़ंक्शन एक मान वापस करने में सक्षम नहीं होगा। सामने से यह देखने में सक्षम होना कि जानकारी फ़ंक्शन से बाहर निकल जाती है, सुरक्षा ऑडिटिंग के लिए सहायक होती है।

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

<वाक्यविन्यास लैंग = अजगर>

डीईएफ़ मेकमिंट (नाम): कोई भी {
  डीईएफ़ [सीलर, अनसीलर] := मेकब्रांडपेयर (नाम)
  डेफ मिंट {
    पर्स बनाने के लिए (var बैलेंस :(int >= 0)): कोई भी {
      def decr(राशि :(0..बैलेंस)):शून्य {
        शेष - = राशि
      }
      डेफ पर्स {
        संतुलन प्राप्त करने के लिए (): int {वापसी संतुलन}
        अंकुरित करने के लिए (): कोई भी {रिटर्न मिंट.मेकपर्स (0)}
        प्राप्त करने के लिए (): कोई भी {रिटर्न सीलर.सील (डीसीआर)}
        जमा करने के लिए (राशि: int, src): शून्य {
          unsealer.unseal(src.getDecr())(राशि)
          शेष राशि + = राशि
        }
      }
      पर्स लौटाओ
    }
  }
  पुदीना लौटाओ
}

</वाक्यविन्यास हाइलाइट>

ई में वस्तुओं को परिभाषित किया गया है def कीवर्ड, और वस्तु परिभाषा के भीतर, to कीवर्ड प्रत्येक विधि शुरू करता है। इस उदाहरण में गार्ड एक्सप्रेशंस बताते हैं कि वैल्यू कंस्ट्रेंट को कैसे निर्दिष्ट किया जाए (जैसा कि :(int >= 0) या :(0..balance)).

टकसाल का उदाहरण एक अंतर्निहित तंत्र का उपयोग करता है जिसे सीलर कहा जाता है। कार्यक्रम makeBrandPair दो संबद्ध वस्तुओं, एक सीलर और एक अनसीलर बनाता है, जैसे कि सीलर किसी बॉक्स में किसी वस्तु को सील कर सकता है और अनसीलर एकमात्र वस्तु है जो बॉक्स की सामग्री को पुनः प्राप्त कर सकता है। इस पैसे के उदाहरण की अधिक विस्तृत व्याख्या के लिए ई वेबसाइट देखें।[5]


यह भी देखें

  • वस्तु-क्षमता मॉडल

संदर्भ

  1. Handy, Alex (14 November 2016). "सॉफ्टवेयर सुरक्षा का भविष्य". SD Times.
  2. Seibel, Peter (21 December 2009). "कोडर्स एट वर्क: रिफ्लेक्शंस ऑन द क्राफ्ट ऑफ प्रोग्रामिंग". Apress. pp. 95–96.
  3. "ई का इतिहास". www.erights.org.
  4. Miller, Mark S.; Tribble, E. Dean; Shapiro, Jonathan (2005). "अजनबियों के बीच संगति" (PDF). Trustworthy Global Computing. Lecture Notes in Computer Science. 3705: 195–229. Bibcode:2005LNCS.3705..195M. doi:10.1007/11580850_12. ISBN 978-3-540-30007-6.
  5. Rees, Jonathan; Miller, Mark (2001). "वस्तुओं से क्षमताओं तक - सरल धन". erights.org. ERights. Retrieved 8 July 2014. क्षमता-आधारित धन का निम्नलिखित सरल उदाहरण प्रस्तुत करने से पहले, हमें उस भ्रम को दूर करने का प्रयास करना चाहिए जो यह उदाहरण बार-बार पैदा करता है। हम वास्तव में इस तरह पैसा बनाने का प्रस्ताव नहीं कर रहे हैं! एक वांछनीय धन प्रणाली के लिए भी प्रदान करना चाहिए...


इस पेज में लापता आंतरिक लिंक की सूची

बाहरी संबंध