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

From alpha
Jump to navigation Jump to search
Factor
200px
Paradigmmulti-paradigm: concatenative (stack-based), functional, object-oriented
DeveloperSlava Pestov
पहली प्रस्तुति2003
Stable release
0.98 / July 31, 2018 (2018-07-31)
टाइपिंग अनुशासनstrong, dynamic
ओएसWindows, macOS, Linux
लाइसेंसBSD license
वेबसाइटfactorcode.org
Influenced by
Joy, Forth, Lisp, Self

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

इतिहास

स्लाव पेस्टोव ने 2003 में एक वीडियो गेम के लिए स्क्रिप्टिंग भाषा के रूप में फैक्टर बनाया।[1] प्रारंभिक कार्यान्वयन, जिसे अब JFactor कहा जाता है, जावा (प्रोग्रामिंग भाषा) में लागू किया गया था और जावा वर्चुअल मशीन पर चलता था। यद्यपि प्रारंभिक भाषा सिंटैक्स (प्रोग्रामिंग भाषाओं) के मामले में सतही रूप से आधुनिक कारक के समान थी, आधुनिक भाषा व्यावहारिक दृष्टि से बहुत अलग है और वर्तमान कार्यान्वयन बहुत तेज है।

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

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

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


विवरण

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

 हैलो वर्ल्ड प्रिंट

print में एक शब्द है io शब्दावली जो स्टैक से एक स्ट्रिंग लेती है और कुछ भी नहीं लौटाती है। यह स्ट्रिंग को वर्तमान आउटपुट स्ट्रीम (डिफ़ॉल्ट रूप से, टर्मिनल या ग्राफ़िकल श्रोता) में प्रिंट करता है।[3]

तथ्यात्मक निम्नलिखित तरीके से फैक्टर में कार्यान्वित किया जा सकता है: <वाक्यविन्यास प्रकाश लैंग = कारक>

फैक्टोरियल (एन - एन!) डुप 1> [[1, बी] उत्पाद] [ड्रॉप 1] अगर;

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

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

कारक लचीलेपन और भाषा का विस्तार करने की क्षमता पर बल देता है।[3] मैक्रोज़ के साथ-साथ फैक्टर सिंटैक्स के मनमाने विस्तार के लिए एक प्रणाली है। डेटा संरचनाओं के लिए नए प्रकार की शब्द परिभाषाओं और नए प्रकार के शाब्दिक (कंप्यूटर विज्ञान) की अनुमति देने के लिए फैक्टर का सिंटैक्स अक्सर बढ़ाया जाता है। XML लाइब्रेरी में इसका उपयोग XML जनरेट करने के लिए लिटरल सिंटैक्स प्रदान करने के लिए भी किया जाता है। उदाहरण के लिए, निम्न शब्द एक स्ट्रिंग लेता है और एक XML दस्तावेज़ ऑब्जेक्ट बनाता है जो एक HTML दस्तावेज़ है जो स्ट्रिंग पर बल देता है: <वाक्यविन्यास प्रकाश लैंग = कारक>

: मेक-एचटीएमएल (स्ट्रिंग - एक्सएमएल)
   डुप
   <एक्सएमएल
       <एचटीएमएल>
           <सिर><शीर्षक><-></शीर्षक></सिर>

<body>

<->

</body>

       </html>
   एक्सएमएल>;

</वाक्यविन्यास हाइलाइट> शब्द dup स्टैक पर शीर्ष आइटम को डुप्लिकेट करता है। <-> ई> स्टैक से किसी आइटम के साथ एक्सएमएल दस्तावेज़ के उस हिस्से को भरने के लिए खड़ा है।

कार्यान्वयन और पुस्तकालय

फैक्टर में एक बड़ा मानक पुस्तकालय शामिल है, जो पूरी तरह से भाषा में लिखा गया है। इसमे शामिल है

  • एक क्रॉस-प्लेटफ़ॉर्म जीयूआई टूलकिट, ओपनजीएल के शीर्ष पर बनाया गया है और विभिन्न विंडोिंग सिस्टम, विकास पर्यावरण के लिए उपयोग किया जाता है।[4]
  • PostgreSQL और SQLite सहित कई डेटाबेस लाइब्रेरी के लिए बाइंडिंग।[5]
  • एक HTTP सर्वर और क्लाइंट, फर्नेस वेब फ्रेमवर्क के साथ।[6]
  • पूर्णांकों, फ्लोट्स और सी स्ट्रक्चर्स की कुशल सजातीय सरणियाँ।[7]
  • मिलान करने के लिए मशीन कोड उत्पन्न करने, नियमित अभिव्यक्तियों को लागू करने वाला एक पुस्तकालय।[8]

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

फैक्टर एक सिस्टम छवि-आधारित मॉडल का उपयोग करता है, जो कि कई स्मॉलटाक कार्यान्वयनों के समान है, जहां संकलित कोड और डेटा एक छवि में संग्रहीत होते हैं।[10] किसी प्रोग्राम को कंपाइल करने के लिए प्रोग्राम को एक इमेज में लोड किया जाता है और इमेज को सेव किया जाता है। एक विशेष उपकरण एक विशेष कार्यक्रम को चलाने के लिए एक न्यूनतम छवि बनाने की प्रक्रिया में सहायता करता है, परिणाम को किसी ऐसी चीज में पैक करता है जिसे एक स्टैंडअलोन एप्लिकेशन के रूप में तैनात किया जा सकता है।[3][11] फैक्टर कंपाइलर कई उन्नत अनुकूलनों को लागू करता है और इसका उपयोग नई अनुकूलन तकनीकों में अनुसंधान के लिए एक लक्ष्य के रूप में किया गया है।[3][12]


संदर्भ

  1. Pestov, Slava. "Slava Pestov's corner of the web".
  2. "Concatenative.org wiki: Factor/Implementation History".
  3. 3.0 3.1 3.2 3.3 3.4 3.5 3.6 Pestov, Sviatoslav; Ehrenberg, Daniel (2010). "Factor: a dynamic stack-based programming language". ACM SIGPLAN Notices. ACM. 45 (12): 43–58. doi:10.1145/1899661.1869637.
  4. Pestov, Slava. "Factor documentation: UI framework".
  5. Coleman, Doug. "Factor documentation: Database library".
  6. Pestov, Slava. "Factor documentation: HTTP server".
  7. Pestov, Slava. "Factor documentation: Specialized arrays".
  8. Coleman, Doug; Ehrenberg, Daniel. "Factor documentation: Regular expressions".
  9. Pestov, Slava (28 July 2010). "Overhauling Factor's C library interface".
  10. Pestov, Slava (10 January 2010). "Factor's bootstrap process explained".
  11. Pestov, Slava (5 July 2008). "On shaking trees".
  12. Ehrenberg, Daniel (2010). "Closure elimination as constant propagation" (PDF). Archived from the original (PDF) on 2011-07-26.


बाहरी संबंध