Erlang 21

compile




erlang

compile

मॉड्यूल

संकलन

मॉड्यूल सारांश

एर्लैंग कम्पाइलर

विवरण

यह मॉड्यूल मानक Erlang संकलक को एक इंटरफ़ेस प्रदान करता है। यह या तो एक नई फ़ाइल उत्पन्न कर सकता है, जिसमें ऑब्जेक्ट कोड होता है, या एक बाइनरी लौटाता है, जिसे सीधे लोड किया जा सकता है।

निर्यात

env_compiler_options ()

पर्यावरण चर ERL_COMPILER_OPTIONS माध्यम से दिए गए कंपाइलर विकल्प ERL_COMPILER_OPTIONS । यदि मान एक सूची है, तो इसे उसी रूप में लौटा दिया जाता है। यदि यह एक सूची नहीं है, तो इसे एक सूची में डाल दिया जाता है।

फ़ाइल (फ़ाइल)

file(File, [verbose,report_errors,report_warnings]) के समान ही है file(File, [verbose,report_errors,report_warnings])

फ़ाइल (फ़ाइल, विकल्प) -> CompRet

प्रकार

फ़ाइल File कोड .erl करता है, जो .erl एक्सटेंशन के बिना एक Erlang स्रोत कोड फ़ाइल है। Options संकलक के व्यवहार को निर्धारित करते हैं।

यदि रिटर्न {ok,ModuleName} सफल है, या error तो त्रुटि। यदि ऑब्जेक्ट बिना त्रुटियों के सफल होता है, तो ऑब्जेक्ट कोड फ़ाइल बनाई जाती है। इसे एक त्रुटि माना जाता है यदि स्रोत कोड में मॉड्यूल का नाम आउटपुट फाइल के बेसनेम के समान नहीं है।

उपलब्ध विकल्प:

basic_validation

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

संकलक उत्पन्न करेगा कि सभी चेतावनियों को उत्पन्न करने के लिए विकल्प strong_validation का उपयोग करें।

strong_validation

विकल्प basic_validation समान। कोई कोड उत्पन्न नहीं होता है, लेकिन यह सुनिश्चित करने के लिए अधिक संकलक पास चलाए जाते हैं कि अनुकूलन पास द्वारा उत्पन्न चेतावनियां उत्पन्न होती हैं (जैसे कि क्लॉज का मिलान नहीं होगा, या जो रनटाइम पर अपवाद के साथ विफल होने की गारंटी है)।

binary

कंपाइलर ऑब्जेक्ट फ़ाइल बनाने के बजाय बाइनरी में ऑब्जेक्ट कोड लौटाता है। सफल होने पर, कंपाइलर {ok,ModuleName,Binary}

bin_opt_info

कंपाइलर बाइनरी मैचिंग ऑप्टिमाइज़ेशन (सफल और असफल दोनों) के बारे में सूचनात्मक चेतावनी का उत्सर्जन करेगा। अधिक जानकारी के लिए, दक्षता गाइड में bin_opt_info बारे में अनुभाग देखें।

{compile_info, [{atom(), term()}]}

जेनरेट की गई बीम फ़ाइल में compile_info चंक को अतिरिक्त संकलन मेटाडेटा संलग्न compile लिए compile शीर्ष पर निर्मित संकलक को अनुमति देता है।

कंपाइलर्स के लिए यह सलाह दी जाती है कि वे सभी गैर-नियतात्मक जानकारी को हटा दें यदि deterministic विकल्प का समर्थन किया जाता है और उपयोगकर्ता द्वारा इसकी आपूर्ति की जाती है।

compressed

कंपाइलर उत्पन्न ऑब्जेक्ट कोड को संपीड़ित करेगा, जो एम्बेडेड सिस्टम के लिए उपयोगी हो सकता है।

debug_info

संकलित बीम मॉड्यूल के debug_info चंक में debug_info Erlang Abstract Format के रूप में डिबग जानकारी शामिल है। डीबगर, Xref और कवर जैसे टूल को डीबग जानकारी शामिल करने की आवश्यकता होती है।

चेतावनी : स्रोत कोड को डीबग जानकारी से फिर से बनाया जा सकता है। इसे रोकने के लिए एन्क्रिप्टेड डीबग जानकारी (एन्क्रिप्ट_ encrypt_debug_info ) का उपयोग करें।

विवरण के लिए, beam_lib(3)

{debug_info, {Backend, Data}}

संकलित बीम मॉड्यूल में कस्टम Data साथ Backend मॉड्यूल के रूप में कस्टम डिबग जानकारी शामिल है। दिए गए मॉड्यूल को debug_info/4 फ़ंक्शन को लागू करना होगा और यह विभिन्न कोड अभ्यावेदन उत्पन्न करने के लिए ज़िम्मेदार है, जैसा कि debug_info beam_lib(3) तहत beam_lib(3) में वर्णित है।

चेतावनी : स्रोत कोड को डीबग जानकारी से फिर से बनाया जा सकता है। इसे रोकने के लिए एन्क्रिप्टेड डीबग जानकारी (एन्क्रिप्ट_ encrypt_debug_info ) का उपयोग करें।

{debug_info_key,KeyString}
{debug_info_key,{Mode,KeyString}}

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

Mode क्रिप्टो एल्गोरिथ्म का प्रकार है जिसका उपयोग डिबग जानकारी को एन्क्रिप्ट करने के लिए किया जाता है। डिफ़ॉल्ट (और वर्तमान में केवल) प्रकार des3_cbc

विवरण के लिए, beam_lib(3)

encrypt_debug_info

debug_info_key विकल्प के समान, लेकिन कुंजी को debug_info_key फ़ाइल से पढ़ा .erlang.crypt है।

विवरण के लिए, beam_lib(3)

deterministic

Module:module_info(compile) द्वारा लौटी सूची में options और source टुपल्स को Module:module_info(compile) । यह विकल्प प्रतिलिपि प्रस्तुत करने योग्य बिल्ड को प्राप्त करना आसान बना देगा।

makedep

हेडर निर्भरता को ट्रैक करने के लिए एक मेकफाइल नियम का उत्पादन करता है। कोई ऑब्जेक्ट फ़ाइल नहीं है।

डिफ़ॉल्ट रूप से, यह नियम <File>.Pbeam को लिखा जाता है। हालाँकि, यदि विकल्प binary सेट है, तो कुछ भी नहीं लिखा गया है और नियम Binary में वापस आ गया है।

उदाहरण के लिए, यदि आपके पास निम्न मॉड्यूल है:

-module(module).

-include_lib("eunit/include/eunit.hrl").
-include("header.hrl").

इस विकल्प द्वारा उत्पन्न Makefile नियम निम्नानुसार है:

module.beam: module.erl \
  /usr/local/lib/erlang/lib/eunit/include/eunit.hrl \
  header.hrl
makedep_side_effect

आश्रितों को सामान्य संकलन प्रक्रिया के साइड इफेक्ट के रूप में बनाया जाता है। इसका मतलब यह है कि ऑब्जेक्ट फ़ाइल का भी उत्पादन किया जाएगा। यह विकल्प makedep विकल्प को ओवरराइड करता है।

{makedep_output, Output}

डिफ़ॉल्ट <File>.Pbeam बजाय Output नियम <File>.Pbeam Output एक फ़ाइल नाम या io_device() । Stdout को लिखने के लिए, standard_io उपयोग करें। हालाँकि, यदि binary सेट है, तो Output को कुछ भी नहीं लिखा जाता है और परिणाम {ok, ModuleName, Binary} साथ कॉलर को वापस कर दिया जाता है।

{makedep_target, Target}

Target लिए उत्सर्जित नियम का नाम बदल देता है।

makedep_quote_target

Target विशेष में वर्ण बनाने के लिए (1) उद्धृत किए गए हैं।

makedep_add_missing

गायब हेडर को उत्पन्न फ़ाइलों के रूप में शामिल करता है और उन्हें निर्भरता में जोड़ता है।

makedep_phony

प्रत्येक निर्भरता के लिए एक phony लक्ष्य जोड़ता है।

'P'

फ़ाइल <File>.P में प्रीप्रोसेसिंग और पार्स ट्रांस्फ़ॉर्म के बाद, पार्स कोड की सूची तैयार करता है। कोई ऑब्जेक्ट फ़ाइल नहीं है।

'E'

फ़ाइल के सभी स्रोत कोड परिवर्तन किए जाने के बाद, कोड की एक सूची का उत्पादन करता है, फ़ाइल <File>.E । कोई ऑब्जेक्ट फ़ाइल नहीं है।

'S'

फ़ाइल में कोडांतरक कोड की एक सूची का उत्पादन करता है <File>.S <File>.S । कोई ऑब्जेक्ट फ़ाइल नहीं है।

report_errors/report_warnings

त्रुटियों / चेतावनियों को मुद्रित करने के लिए जैसे वे होते हैं।

report

report_errors और report_warnings दोनों के लिए एक संक्षिप्त रूप।

return_errors

यदि यह ध्वज सेट किया गया है, तो {error,ErrorList,WarningList} को लौटा दिया जाता है।

return_warnings

यदि यह ध्वज सेट किया जाता है, तो एक अतिरिक्त फ़ील्ड, जिसमें WarningList , को सफलता पर लौटे WarningList में जोड़ा जाता है।

warnings_as_errors

चेतावनियों को त्रुटियों के रूप में माना जाता है। यह विकल्प R13B04 के बाद से समर्थित है।

return

return_errors और return_warnings दोनों के लिए एक संक्षिप्त रूप।

verbose

संकलक से अधिक क्रिया जानकारी का कारण बनता है, यह बताते हुए कि यह क्या कर रहा है।

{source,FileName}

मॉड्यूल का मान सेट करता है, जैसा कि module_info(compile) द्वारा लौटाया गया है।

{outdir,Dir}

ऑब्जेक्ट कोड के लिए एक नई निर्देशिका सेट करता है। वर्तमान निर्देशिका का उपयोग आउटपुट के लिए किया जाता है, सिवाय इसके कि जब कोई निर्देशिका इस विकल्प के साथ निर्दिष्ट की गई हो।

export_all

निर्यात किए जाने वाले मॉड्यूल के सभी कार्यों का कारण बनता है।

{i,Dir}

किसी फ़ाइल सहित खोजे जाने वाले निर्देशिकाओं की सूची में Dir जोड़ता है। एक -include या -include_lib निर्देशन का सामना करते समय, कंपाइलर निम्नलिखित निर्देशिकाओं में हेडर फ़ाइलों की खोज करता है:

  • "." , फ़ाइल सर्वर की वर्तमान कार्यशील निर्देशिका

  • संकलित फ़ाइल का आधार नाम

  • विकल्प i का उपयोग करके निर्दिष्ट निर्देशिकाएं; अंतिम निर्दिष्ट निर्देशिका को पहले खोजा जाता है

{d,Macro}
{d,Macro,Value}

मान का Value लिए Macro को परिभाषित करता है। Macro टाइप परमाणु का है, और Value कोई भी शब्द हो सकता है। डिफ़ॉल्ट Value true

{parse_transform,Module}

पार्स परिवर्तन फ़ंक्शन के कारण Module:parse_transform/2 को Module:parse_transform/2 त्रुटियों के लिए जाँच करने से पहले पार्स कोड पर लागू किया जाना चाहिए।

from_asm

इनपुट फ़ाइल कोडांतरक कोड (डिफ़ॉल्ट फ़ाइल प्रत्यय ".S") होने की उम्मीद है। ध्यान दें कि कोडांतरक फ़ाइलों का प्रारूप प्रलेखित नहीं है, और रिलीज के बीच बदल सकता है।

from_core

इनपुट फ़ाइल कोर कोड (डिफ़ॉल्ट फ़ाइल प्रत्यय ".core") होने की उम्मीद है। ध्यान दें कि कोर फ़ाइलों का प्रारूप प्रलेखित नहीं है, और रिलीज के बीच बदल सकता है।

no_strict_record_tests

यह विकल्प अनुशंसित नहीं है।

डिफ़ॉल्ट रूप से, ऑपरेशन Record#record_tag.field के लिए उत्पन्न कोड सत्यापित करता है कि टपल Record में Record के लिए सही आकार है, और पहला तत्व टैग record_tag । सत्यापन कोड को छोड़ने के लिए इस विकल्प का उपयोग करें।

no_error_module_mismatch

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

{no_auto_import,[{F,A}, ...]}

फ़ंक्शन को बनाता है F/A अब erlang मॉड्यूल से ऑटो-इंपोर्ट नहीं किया जा रहा है, जो BIF नाम क्लैश को हल करता है। R14A से पहले BIFs ऑटो-आयातित के साथ नाम की गड़बड़ी को हल करने के लिए इस विकल्प का उपयोग किया जाना चाहिए, अगर यह आवश्यक है कि स्थानीय फ़ंक्शन को उसी नाम के साथ एक ऑटो-आयातित BIF के रूप में मॉड्यूल उपसर्ग के बिना कहा जाए।

ध्यान दें

R14A और आगे से, कंपाइलर ऑटो-आयातित बीआईएफ के साथ प्रयास करने से पहले स्थानीय या आयातित कार्यों के लिए मॉड्यूल उपसर्ग के बिना कॉल का निराकरण करता है। यदि BIF को कॉल किया जाना है, तो कॉल में erlang मॉड्यूल उपसर्ग का उपयोग करें, न कि {no_auto_import,[{F,A}, ...]}

यदि यह विकल्प स्रोत कोड में लिखा जाता है, तो -compile निर्देश के रूप में, वाक्यविन्यास F/A का उपयोग {F,A} बजाय किया जा सकता है, उदाहरण के लिए:

-compile({no_auto_import,[error/1]}).
no_auto_import

erlang मॉड्यूल से किसी भी फ़ंक्शन को ऑटो-आयात न करें।

no_line_info

ओमिट्स लाइन नंबर की जानकारी को थोड़ा छोटा आउटपुट फ़ाइल बनाने के लिए।

{extra_chunks, [{binary(), binary()}]}

.beam फ़ाइल में संग्रहीत करने के लिए अतिरिक्त विखंडू पास करें। अतिरिक्त विखंडू चार बाइट बाइनरी के साथ ट्यूपल्स की एक सूची होनी चाहिए क्योंकि चंक नाम चंक सामग्री के साथ बाइनरी द्वारा पीछा किया जाता है। अधिक जानकारी के लिए beam_lib देखें।

यदि चेतावनियाँ चालू हो जाती हैं (पहले से वर्णित विकल्प report_warnings ), तो निम्न विकल्प नियंत्रित करते हैं कि किस प्रकार की चेतावनी उत्पन्न होती है। {warn_format,Verbosity} छोड़कर, निम्न विकल्पों के दो रूप हैं:

  • चेतावनी को चालू करने के लिए एक warn_xxx फ़ॉर्म।
  • चेतावनी को बंद करने के लिए एक nowarn_xxx फ़ॉर्म।

अनुसरण करने वाले विवरणों में, डिफ़ॉल्ट मान को बदलने के लिए उपयोग किया जाने वाला प्रपत्र सूचीबद्ध होता है।

{warn_format, Verbosity}

io:format तर्क के रूप में विकृत प्रारूप के तार के लिए उत्सर्जित होने की चेतावनी का कारण io:format और समान कार्य।

Verbosity चेतावनियों की संख्या का चयन करती है:

  • 0 = कोई चेतावनी नहीं
  • 1 = अमान्य प्रारूप स्ट्रिंग और तर्कों की गलत संख्या के लिए चेतावनी
  • 2 = चेतावनी भी जब वैधता की जांच नहीं की जा सकती है, उदाहरण के लिए, जब प्रारूप स्ट्रिंग तर्क एक चर है।

डिफ़ॉल्ट क्रिया 1 । वर्बोसिटी 0 को विकल्प nowarn_format द्वारा भी चुना जा सकता है।

nowarn_bif_clash

इस विकल्प को हटा दिया जाता है, यदि इसका उपयोग किया जाता है तो यह एक घातक त्रुटि उत्पन्न करता है।

चेतावनी

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

इस विकल्प का उपयोग हमेशा हतोत्साहित किया गया है। R14A से, यह इसका उपयोग करने के लिए एक त्रुटि है।

BIF {no_auto_import,[F/A]} को हल करने के लिए, स्पष्ट मॉड्यूल नामों या {no_auto_import,[F/A]} कंपाइलर निर्देश का उपयोग करें।

{nowarn_bif_clash, FAs}

इस विकल्प को हटा दिया जाता है, यदि इसका उपयोग किया जाता है तो यह एक घातक त्रुटि उत्पन्न करता है।

चेतावनी

इस विकल्प का उपयोग हमेशा हतोत्साहित किया गया है। R14A से, यह इसका उपयोग करने के लिए एक त्रुटि है।

BIF {no_auto_import,[F/A]} को हल करने के लिए, स्पष्ट मॉड्यूल नामों या {no_auto_import,[F/A]} कंपाइलर निर्देश का उपयोग करें।

nowarn_export_all

export_all विकल्प के उपयोग के लिए चेतावनी को बंद कर export_all है। डिफॉल्ट एक चेतावनी का उत्सर्जन करने के लिए है यदि विकल्प export_all भी दिया गया है।

warn_export_vars

उन सभी अनुमानित निर्यात चर के लिए चेतावनी देता है जो प्राथमिकताओं के बाद संदर्भित किए जाते हैं जहां वे पहले परिभाषित किए गए थे। डिफ़ॉल्ट रूप से, कंपाइलर केवल पैटर्न में संदर्भित निर्यात किए गए चर के लिए चेतावनी का उत्सर्जन करता है।

nowarn_shadow_vars

कार्यात्मक वस्तुओं में "ताज़ा" चर के लिए चेतावनी बंद कर देता है या कुछ पहले से ही परिभाषित चर के समान नाम के साथ सूची समझ। डिफ़ॉल्ट ऐसे चर के लिए चेतावनी का उत्सर्जन करने के लिए है।

nowarn_unused_function

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

{nowarn_unused_function, FAs}

अब उपयोग किए गए स्थानीय कार्यों जैसे कि nowarn_unused_function लिए चेतावनी को बंद कर nowarn_unused_function है, लेकिन केवल उल्लेखित स्थानीय कार्यों के लिए। FAs एक टपल {Name,Arity} या इस तरह के {Name,Arity} एक सूची है।

nowarn_deprecated_function

हटाए गए कार्यों के लिए कॉल के लिए चेतावनी बंद कर देता है। डिफ़ॉल्ट को संकलक द्वारा पहचाने जाने वाले फ़ंक्शन के लिए हर कॉल के लिए चेतावनी का उत्सर्जन करना है। ध्यान दें कि संकलक विशेषता -deprecated() बारे में नहीं जानता है, लेकिन Erlang / OTP में -deprecated() गए कार्यों की एक इकट्ठी सूची का उपयोग करता है। अधिक सामान्य जांच करने के लिए, Xref टूल का उपयोग किया जा सकता है। xref(3) और फंक्शन xref:m/1 को भी देखें, जो फंक्शन c:xm/1 माध्यम से भी सुलभ है।

{nowarn_deprecated_function, MFAs}

अब किए गए कार्यों जैसे कि nowarn_deprecated_function की nowarn_deprecated_function कार्यों के लिए चेतावनी को बंद कर nowarn_deprecated_function है, लेकिन केवल उल्लिखित कार्यों के लिए। MFAs एक ट्यूपल {Module,Name,Arity} या ऐसे ट्यूपल्स की सूची है।

nowarn_deprecated_type

हटाए गए प्रकारों के उपयोग के लिए चेतावनियाँ बंद कर देता है। डिफ़ॉल्ट को संकलक द्वारा पहचाने जाने वाले प्रकार के हर उपयोग के लिए चेतावनी का उत्सर्जन करना है।

nowarn_obsolete_guard

पुराने प्रकार के परीक्षण बीआईएफ जैसे कॉल के लिए चेतावनी को बंद कर देता है, जैसे कि pid/1 और list/1 । टाइप परीक्षण बीआईएफ और उनके पुराने समकक्षों की पूरी सूची के लिए एरलांग Erlang Reference Manual देखें। डिफ़ॉल्ट को पुराने प्रकार के परीक्षण BIF के कॉल के लिए चेतावनी देना है।

warn_unused_import

अप्रयुक्त आयातित कार्यों के लिए चेतावनी देता है। डिफ़ॉल्ट अप्रयुक्त आयातित कार्यों के लिए कोई चेतावनी नहीं है।

nowarn_unused_vars

डिफ़ॉल्ट रूप से, अप्रयुक्त चर के लिए चेतावनी उत्सर्जित की जाती है, एक अंडरस्कोर के साथ शुरू होने वाले चरों को छोड़कर ("प्रोलॉग स्टाइल चेतावनियाँ")। इस तरह की चेतावनियों को बंद करने के लिए इस विकल्प का उपयोग करें।

nowarn_unused_record

अप्रयुक्त रिकॉर्ड प्रकारों के लिए चेतावनी को बंद कर देता है। डिफ़ॉल्ट स्थानीय रूप से परिभाषित रिकॉर्ड प्रकारों के लिए चेतावनी का उत्सर्जन करना है।

अनुकूलन और कोड पीढ़ी के दौरान संकलक द्वारा चेतावनी का एक और वर्ग उत्पन्न होता है। वे उन पैटर्न के बारे में चेतावनी देते हैं जो कभी मेल नहीं खाते (जैसे कि a=b ), गार्ड जो हमेशा झूठ का मूल्यांकन करते हैं, और ऐसे भाव जो हमेशा विफल होते हैं (जैसे कि atom+42 )।

उन चेतावनियों को अक्षम नहीं किया जा सकता है (सभी चेतावनियों को अक्षम करके)।

ध्यान दें

संकलक अभिव्यक्तियों के लिए चेतावनी नहीं देता है कि यह अनुकूलन करने का प्रयास नहीं करता है। उदाहरण के लिए, कंपाइलर 1/0 का मूल्यांकन करने की कोशिश करता है, पता लगाता है कि यह एक अपवाद का कारण होगा, और चेतावनी का उत्सर्जन करता है। हालांकि, संकलक X/0 के समान अभिव्यक्ति के बारे में चुप है, क्योंकि इसमें चर है। इस प्रकार, संकलक मूल्यांकन करने की कोशिश भी नहीं करता है और इसलिए यह चेतावनी नहीं देता है।

चेतावनी

चेतावनियों की अनुपस्थिति का मतलब यह नहीं है कि कोड में शेष त्रुटियां नहीं हैं।

ध्यान दें

शामिल पथ ( {i,Dir} ) को छोड़कर सभी विकल्प, फ़ाइल में विशेषता- -compile([Option,...]) साथ भी दिए जा सकते हैं। फ़ंक्शन परिभाषाओं के बाद विशेषता -compile() की अनुमति है।

ध्यान दें

विकल्प {nowarn_unused_function, FAs} , {nowarn_bif_clash, FAs} , और {nowarn_deprecated_function, MFAs} केवल फाइलों में दिए जाने पर पहचाने जाते हैं। वे warn_unused_function , warn_bif_clash , या warn_deprecated_function विकल्पों से प्रभावित नहीं होते हैं।

संकलक के डिबगिंग के लिए, या शुद्ध जिज्ञासा के लिए, प्रत्येक संकलक पास द्वारा उत्पन्न मध्यवर्ती कोड का निरीक्षण किया जा सकता है। सूची फ़ाइलों का उत्पादन करने के लिए विकल्पों की पूरी सूची को प्रिंट करने के लिए, Erlang शेल प्रॉम्प्ट पर compile:options() लिखें। विकल्प इस क्रम में मुद्रित किए जाते हैं कि पास निष्पादित किए जाते हैं। यदि एक से अधिक लिस्टिंग विकल्प का उपयोग किया जाता है, तो जल्द से जल्द पास का प्रतिनिधित्व करने वाला प्रभावी हो जाता है।

गैर-मान्यता प्राप्त विकल्पों की अनदेखी की जाती है।

WarningList और ErrorList WarningList दोनों में निम्न प्रारूप हैं:

[{FileName,[ErrorInfo]}].

इस अनुभाग में बाद में ErrorInfo का वर्णन किया गया है। फ़ाइल नाम को यहां शामिल किया गया है, क्योंकि कंपाइलर एरलैंग प्री-प्रोसेसर epp का उपयोग करता है, जो कोड को अन्य फ़ाइलों में शामिल करने की अनुमति देता है। इसलिए यह जानना महत्वपूर्ण है कि किसी त्रुटि या चेतावनी के लाइन नंबर को कौन सी फाइल करें।

रूपों (रूप)

forms(Forms, [verbose,report_errors,report_warnings]) रूप में एक ही forms(Forms, [verbose,report_errors,report_warnings])

फॉर्म (फॉर्म, विकल्प) -> कंपेट

प्रकार

file/1 अनुरूप, लेकिन पहले तर्क के रूप में रूपों की सूची (एरलैंग अमूर्त प्रारूप प्रतिनिधित्व में) लेता है। विकल्प binary निहित है, अर्थात, कोई ऑब्जेक्ट कोड फ़ाइल उत्पन्न नहीं होती है। आम तौर पर एक लिस्टिंग फ़ाइल का उत्पादन करने वाले विकल्पों के लिए, जैसे कि 'ई', उस कंपाइलर पास के लिए आंतरिक प्रारूप (एक एरलंग शब्द, आमतौर पर एक बाइनरी नहीं) एक बाइनरी के बजाय वापस आ जाता है।

format_error (ErrorDescriptor) -> वर्ण ()

प्रकार

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

output_generated (विकल्प) -> सच | असत्य

प्रकार

निर्धारित करता है कि संकलक दिए गए विकल्पों के साथ एक beam फ़ाइल बनाता है या नहीं। true है कि एक beam फ़ाइल उत्पन्न होती है। false मतलब है कि संकलक कुछ लिस्टिंग फ़ाइल उत्पन्न करता है, एक बाइनरी देता है, या केवल स्रोत कोड के सिंटैक्स की जांच करता है।

noenv_file (फ़ाइल, विकल्प) -> अनुपालन

file/2 तरह काम करता है, सिवाय इसके कि पर्यावरण चर ERL_COMPILER_OPTIONS से परामर्श नहीं किया जाता है।

noenv_forms (फ़ॉर्म, विकल्प) -> अनुपालन

forms/2 जैसे काम करता है, सिवाय इसके कि पर्यावरण चर ERL_COMPILER_OPTIONS से परामर्श नहीं किया जाता है।

noenv_output_generated (विकल्प) -> सच | असत्य

प्रकार

output_generated/1 जैसे कार्य करता है, सिवाय इसके कि पर्यावरण चर ERL_COMPILER_OPTIONS से परामर्श नहीं किया जाता है।

डिफ़ॉल्ट संकलक विकल्प

डिफ़ॉल्ट कंपाइलर विकल्प देने के लिए (होस्ट ऑपरेटिंग सिस्टम) पर्यावरण चर ERL_COMPILER_OPTIONS का उपयोग किया जा सकता है। इसका मान एक मान्य एर्लैंग शब्द होना चाहिए। यदि मान एक सूची है, तो इसका उपयोग किया जाता है। यदि यह एक सूची नहीं है, तो इसे एक सूची में डाल दिया जाता है।

सूची file/2 , forms/2 , और output_generated/1 को दिए गए किसी भी विकल्प से output_generated/1 । यदि आप पर्यावरण चर से परामर्श नहीं करना चाहते हैं, उदाहरण के लिए, यदि आप एक पार्स ट्रांसफॉर्मर के अंदर से पुन: संकलक को बुला रहे हैं, तो वैकल्पिक कार्यों noenv_file/2 , noenv_forms/2 , या noenv_output_generated/2

सूची को env_compiler_options/0 साथ पुनर्प्राप्त किया जा सकता है।

इनलाइनिंग

कंपाइलर एक एरलांग मॉड्यूल के भीतर फंक्शन इनलाइनिंग कर सकता है। इनलाइनिंग का मतलब है कि फ़ंक्शन को कॉल फ़ंक्शन बॉडी के साथ वास्तविक मानों के साथ बदले गए तर्कों के साथ बदल दिया जाता है। सिमेंटिक्स संरक्षित हैं, सिवाय इसके कि अगर इनबिल्ट कोड में अपवाद उत्पन्न होते हैं। अपवादों को रिपोर्ट किया जाता है क्योंकि फ़ंक्शन को शरीर में अंतर्निर्मित किया गया था। साथ ही, function_clause अपवादों को समान case_clause अपवादों में बदल दिया जाता है।

जब किसी फ़ंक्शन को इनलाइन किया जाता है, तो मूल फ़ंक्शन को रखा जाता है यदि इसे निर्यात किया जाता है (या तो एक स्पष्ट निर्यात द्वारा या यदि विकल्प export_all दिया गया था) या यदि फ़ंक्शन के सभी कॉल export_all नहीं हैं।

जरूरी नहीं कि दौड़ने के समय में सुधार हो। उदाहरण के लिए, इनलाइनिंग बीम स्टैक का उपयोग बढ़ा सकती है, जो संभवतः पुनरावर्ती कार्यों के लिए प्रदर्शन के लिए हानिकारक है।

Inlining कभी भी डिफ़ॉल्ट नहीं होता है। यह स्रोत मॉड्यूल में एक संकलक विकल्प या एक- -compile() विशेषता के साथ स्पष्ट रूप से सक्षम होना चाहिए।

इनलाइनिंग को सक्षम करने के लिए, या तो inline का उपयोग करने के लिए विकल्प inline का उपयोग करें, यह तय करने के लिए कि कौन से कार्य इनलाइन या {inline,[{Name,Arity},...]} करने के लिए हैं, कंपाइलर इनलाइन को दिए गए फ़ंक्शंस पर कॉल करने के लिए। यदि विकल्प एक Erlang मॉड्यूल में compile निर्देश के अंदर दिया गया है, तो {Name,Arity} को Name/Arity रूप में लिखा जा सकता है।

स्पष्ट inlining का उदाहरण:

-compile({inline,[pi/0]}).

pi() -> 3.1416.
    

अंतर्निहित इनलाइनिंग का उदाहरण:

-compile(inline).

विकल्प {inline_size,Size} नियंत्रित करता है कि कितने बड़े कार्यों को {inline_size,Size} करने की अनुमति है। डिफ़ॉल्ट 24 , जो 24 कोड के आकार को लगभग-समान संस्करण के समान रखता है (केवल अपेक्षाकृत छोटे कार्य इनबिल्ड होते हैं)।

उदाहरण:

%% Aggressive inlining - will increase code size.
-compile(inline).
-compile({inline_size,100}).

सूची कार्यों की सूची

कंपाइलर STDLIB में मॉड्यूल list से विभिन्न सूची हेरफेर कार्यों को भी इनलाइन कर सकता है।

इस सुविधा को स्पष्ट रूप से संकलक विकल्प या स्रोत मॉड्यूल में -compile() विशेषता के साथ सक्षम किया जाना चाहिए।

सूची कार्यों की इनलाइनिंग को सक्षम करने के लिए, inline_list_funcs विकल्प का उपयोग करें।

निम्नलिखित कार्य निम्न हैं:

  • lists:all/2
  • lists:any/2
  • lists:foreach/2
  • lists:map/2
  • lists:flatmap/2
  • lists:filter/2
  • lists:foldl/3
  • lists:foldr/3
  • lists:mapfoldl/3
  • lists:mapfoldr/3

पार्स ट्रांसफॉर्मेशन

पार्स परिवर्तनों का उपयोग तब किया जाता है जब एक प्रोग्रामर एरलैंग सिंटैक्स का उपयोग करना चाहता है लेकिन विभिन्न शब्दार्थों के साथ। मूल Erlang कोड तब अन्य Erlang कोड में बदल जाता है।

त्रुटि सूचना

पहले उल्लिखित ErrorInfo मानक ErrorInfo संरचना है, जो सभी I / O मॉड्यूल से वापस आ जाती है। इसका निम्न प्रारूप है:

{ErrorLine, Module, ErrorDescriptor}

ErrorLine none परमाणु none यदि त्रुटि एक विशिष्ट लाइन के अनुरूप नहीं है, उदाहरण के लिए, यदि स्रोत फ़ाइल मौजूद नहीं है।

त्रुटि का वर्णन करने वाला एक स्ट्रिंग निम्नलिखित कॉल के साथ प्राप्त किया जाता है:

Module:format_error(ErrorDescriptor)

यह भी देखें

erl_id_trans(3) , erl_lint(3) , beam_lib(3) , beam_lib(3)