2013-02-13 59 views
6

निर्देशिका के तहत v8 पेड़ ब्राउज़ करना, कुछ जेएस फ़ाइलें वहां थीं, कुछ बुनियादी जेएस ऑब्जेक्ट्स जैसे मैथ, ऐरे इत्यादि प्रदान करना, उन फ़ाइलों को ब्राउज़ करना, मैंने पहचान चिन्हों को प्रतिशत चिह्न सहित देखा (%) उनके नामों में, यानी %Foo। मैंने पहले सोचा था कि यह जेएस के पहचानकर्ताओं में कुछ अन्य अनुमत चरित्र था, लेकिन जब मैंने इसे खोल में करने की कोशिश की, तो उसने मुझ पर चिल्लाया और कहा कि मैं वाक्यविन्यास नियमों का उल्लंघन कर रहा हूं। लेकिन अगर यह एक वाक्यविन्यास त्रुटि है, तो डी 8 कैसे काम करता है?पहचानकर्ताओं में 0 संकेतों का उपयोग कैसे किया जा सकता है

src/apinatives.js लाइनों 44 से 47, GitHub/v8/v8

function Instantiate(data, name) { 
    if (!%IsTemplate(data)) return data; 
     var tag = %GetTemplateField(data, kApiTagOffset); 
     switch (tag) { 

src/apinatives.js लाइनों से 41 से Git क्लोन: यहाँ वास्तविक स्रोत कोड से एक उदाहरण है 43, GitHub से Git क्लोन/v8/v8

function SetConstructor() { 
    if (%_IsConstructCall()) { 
    %SetInitialize(this); 

कैसे आ इस पहचानकर्ता वाक्यविन्यास त्रुटियों उपज नहीं है। Math.js और string.js और अन्य सभी समेत सभी जेएस फ़ाइलें: wq

+1

'%' [मॉड्यूलस ऑपरेटर] है (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Arithmetic_Operators); यह * कुछ परीक्षण * है, हालांकि मुझे यकीन नहीं है कि क्या। –

+1

@ डेविड थॉमस कैसे आते हैं!%% टेम्पलेट (डेटा) ' –

+0

काफी कुछ यह है कि यह 'IsTemplate (डेटा)' से वापस लौटाया गया है। –

उत्तर

15

यह तकनीकी रूप से मान्य जावास्क्रिप्ट नहीं है। ये वी 8 runtime functions पर कॉल कर रहे हैं। उस पृष्ठ से:

JavaScript लाइब्रेरी की ज्यादातर जावा स्क्रिप्ट कोड अपने आप में कार्यान्वित किया जाता है, सी ++ क्रम जावास्क्रिप्ट से प्रतिदेय कार्यों का एक न्यूनतम सेट का उपयोग। इनमें से कुछ को नामों का उपयोग करने के लिए कहा जाता है जो%, से शुरू होते हैं और ध्वज "--allow-natives-syntax" का उपयोग करते हैं। अन्य को केवल कोड जनरेटर द्वारा उत्पन्न कोड द्वारा बुलाया जाता है, और% सिंटैक्स का उपयोग करके जेएस में दिखाई नहीं दे रहा है, यहां तक ​​कि भी।

आप parser.cc में देखें, तो आप यह निर्धारित करता है कि क्या पार्सर JavaScript वह भाषा है वी 8 अपने क्रम के साथ बातचीत करने के लिए उपयोग कर रहा है इस विस्तार को स्वीकार करेंगे allow_natives_syntax से संबंधित कुछ कोड देख सकते हैं। इन फ़ाइलों को उस विकल्प के साथ पार्स किया जाना चाहिए।

मैं अनुमान लगाता हूं कि वी 8 आपको डिफ़ॉल्ट रूप से इन कॉल को करने की अनुमति नहीं देता है क्योंकि यह जावास्क्रिप्ट मानक का विरोधाभास करेगा और क्योंकि यह संभवतः आपको रनटाइम पर चीजें करने की अनुमति देगा, आपको ऐसा करने में सक्षम नहीं होना चाहिए।

+0

आपके स्पष्ट उत्तर के लिए बहुत बहुत धन्यवाद! –

-1

आप आश्वस्त रह सकते हैं कि जावास्क्रिप्ट में "%" का उपयोग एक यूनरी ऑपरेटर के रूप में नहीं किया जा सकता है, और न ही इसे एक चरित्र के रूप में उपयोग किया जा सकता है एक चर नाम या समारोह का नाम। "%" को केवल जावास्क्रिप्ट में एक मॉड्यूलस ऑपरेटर के रूप में उपयोग किया जा सकता है जब तक उद्धरण द्वारा संलग्न न हो।

ऐसा प्रतीत होता है कि Google का v8 जावास्क्रिप्ट इंजन किसी भी तरह जावास्क्रिप्ट फ़ाइलों को प्रीप्रोसेसिंग कर रहा है, संभवतः% functionName() सिंटैक्स जावास्क्रिप्ट इंजन द्वारा निष्पादित किए जाने से पहले जावास्क्रिप्ट फ़ाइलों को प्रीप्रोसेस करने के लिए किसी प्रकार का मैक्रो होता है, हालांकि मैं ' मैं वास्तव में परिचित नहीं हूं कि Google के पास जावास्क्रिप्ट इंजन कोड बेस में जावास्क्रिप्ट फ़ाइलें क्यों हैं जो बाइनरी बनाने के लिए C++ का उपयोग करती हैं।

+1

मुझे एक 'जेएस 2 सी पता चला है।स्रोत पेड़ में उपकरण निर्देशिका के तहत py'। कार्यक्रम को निम्नलिखित करने के लिए कहा जाता है (प्रासंगिक फ़ाइल में कोड टिप्पणी में):> यह जावास्क्रिप्ट स्रोत कोड को सी-शैली चार सरणी में परिवर्तित करने के लिए उपयोगिता है। इसका उपयोग V8 लाइब्रेरी में एम्बेडेड जावास्क्रिप्ट कोड के लिए किया जाता है। –

+1

'%' [शेष ऑपरेटर] है (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder), एक [मॉड्यूल ऑपरेटर] नहीं (http://wiki.ecmascript.org/doku.php?id=strawman:modulo_operator)। एक छोटा लेकिन महत्वपूर्ण भेद। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^