रैखिकता एक अद्वितीय स्टेटफुल प्रतिनिधित्व को कम करने के लिए एक पर्याप्त बाधा नहीं है, और इसलिए आपके प्रश्न का उत्तर इस बात पर निर्भर करता है कि आप राज्य के संदर्भ में रैखिक तर्क की व्याख्या कैसे करते हैं। यह आमतौर पर आप कैसे व्याख्या करना होगा परिलक्षित होता है तरीका।! ए
यदि आपके संदर्भ के अभिप्रेत शब्दार्थ यह कहते हैं कि सभी संकेत अद्वितीय मूल्य हैं (अर्थात, किसी वस्तु का अधिकतम एक ही संदर्भ है) तो डैग और ग्राफ संरचनाएं व्यक्त नहीं होती हैं, जैसे कि तांत्रिक तर्क के अनुसार कि एक डैग में कई संदर्भ हो सकते हैं एक ही वस्तु। इस मामले में एक होना चाहिए गणना किस प्रकार की एक नई प्रकार महत्व एक , जब से तुम नक्शे चाहते δ एक : ! ए ⊸ ! ए ⊗ ! एक और ।! एएδए:!A⊸!A⊗!AϵA:!A⊸A
हालांकि, लगता है कि आप चाहते हैं प्रतिनिधित्व करने के लिए साझा करने । फिर, ऑब्जेक्ट्स को संदर्भ गिनती के साथ, नक्शे साथ कचरा-एकत्र किया जा सकता है और को ऑपरेशन के रूप में महसूस किया जा सकता है, जो केवल संदर्भ संख्या को गिनता है। इस स्थिति में, आप यह मानने के लिए रैखिकता का उपयोग नहीं कर सकते कि मान साझा करना हमेशा सुरक्षित है, क्योंकि वहाँ साझाकरण है। लेकिन आप यह सुनिश्चित कर सकते हैं कि आपके कार्यक्रम में सभी मेमोरी आवंटन स्पष्ट हैं, और ढेर में कोई चक्र नहीं हैं।δ एक : ! ए ⊸ ! ए ⊗ ! एक ε एक : ! अ ⊸ अ!AδA:!A⊸!A⊗!AϵA:!A⊸A
रैखिक प्रकार के अधिकांश व्यावहारिक कार्यान्वयन न तो इन दो व्याख्याओं का उपयोग करते हैं। इसके बजाय, संदर्भों को स्वतंत्र रूप से डुप्लिकेट करने योग्य संस्थाओं के रूप में देखा जाता है, और हम जो रैखिक रूप से ट्रैक करते हैं, वास्तव में क्षमताओं में हैं । क्षमताएं रनटाइम मान नहीं हैं; वे विशुद्ध रूप से वैचारिक संस्थाएं हैं जिनका उद्देश्य किसी संदर्भ तक पहुंचने की अनुमति का प्रतिनिधित्व करना है। विचार यह है कि आप एक अनुमति-पास शैली में कार्यक्रम करते हैं, और यहां तक कि अगर एक ही वस्तु के कई संदर्भ हैं, तो राज्य के एक टुकड़े का एक पढ़ने या संशोधन केवल तभी हो सकता है यदि आपके पास इसे एक्सेस करने की क्षमता है। और चूंकि क्षमता रैखिक है, आप जानते हैं कि केवल आप इसे बदल सकते हैं।
newgetsetcopy::::∀α.α⊸∃c:ι.cap(c)⊗ref(α,c)∀α,c:ι.cap(c)⊗ref(α,c)⊸α⊗cap(c)⊗ref(α,c)∀α,c:ι.cap(c)⊗ref( α , सी)⊗α⊸cap(c)⊗ref(α,c)∀α,c:ι.ref(α,c)⊸ref(α,c)⊗ref(α,c)
ऊपर स्केच किए गए API में, से अधिक , संकलन-समय सूचकांकों के कुछ डोमेन, और प्रकारों में रेंज शामिल हैं। हमारे पास एक type जो द्वारा अनुक्रमित एक क्षमता है , और एक type , जो कि क्षमता द्वारा एक्सेस के संदर्भ का एक प्रकार है । कॉलिंग और एक संदर्भ पर क्षमता की आवश्यकता है , और बुला एक नया संदर्भ और एक नई क्षमता एक साधारण सूचकांक साझा करने बनाता है। हालाँकि,सीιαc a p (c)सीआर ई एफ( α , c )αसीजी ई टीs e tसीएन ई डब्ल्यूसी ओ पी वाई-एक संदर्भ में किसी भी क्षमता तक पहुंच की आवश्यकता नहीं होती है, इसलिए कोई भी संदर्भ को तब तक कॉपी कर सकता है जब तक वे उसके अंदर नहीं दिखते।