पॉलीग्लॉट बनाने के लिए टिप्स


48

एक एक प्रोग्राम है जो 2 या अधिक विभिन्न प्रोग्रामिंग भाषाओं में चलाया जा सकता है है।

पॉलीग्लॉट बनाने के लिए आपके पास क्या सामान्य सुझाव हैं, या ऐसी भाषाएं चुनना जो किसी विशिष्ट कार्य के लिए पॉलीग्लॉट लिखना आसान हो?

कृपया उन युक्तियों को पोस्ट करें जो ज्यादातर स्थितियों में लागू की जा सकती हैं। यानी उन्हें केवल दो विशिष्ट भाषाओं के पॉलीग्लॉट में काम नहीं करना चाहिए। (यदि आपके पास बहुत विशिष्ट टिप है, तो आप केवल बहुवैकल्पिक प्रश्न का उत्तर पोस्ट कर सकते हैं।) लेकिन आप एक ऐसी भाषा की विशेषताओं को पेश कर सकते हैं जो कई भाषाओं के साथ काम करना आसान बनाती है, या किसी भी मौजूदा पॉलीग्लॉट्स में जोड़ा जाना आसान है।

कृपया प्रति उत्तर एक टिप पोस्ट करें। और अगर कोई भाषा-विशिष्ट टिप किसी अन्य भाषा पर भी लागू होती है, तो संपादित करने का सुझाव देने के लिए स्वतंत्र महसूस करें।

जवाबों:


25

टिप्पणी प्रतीकों का खुलासा करें

दो-भाषा बहुभाषाविद बनाने का एक सरल तरीका यह है कि कोड को दो भागों में विभाजित किया जाए:

  1. पहला भाग भाषा A में वास्तविक कार्य करता है, भाषा B (कोई त्रुटि नहीं) में हानिरहित है, और भाषा-A टिप्पणी प्रतीक में समाप्त होता है, जो भाषा A के दूसरे भाग को छुपाता है।
  2. दूसरा भाग भाषा बी में वास्तविक कार्य करता है।

इस प्रकार

  • भाषा ए पहले भाग को देखती है, जो काम करता है, और फिर एक टिप्पणी करता है।
  • भाषा बी एक बेकार पहला भाग और फिर दूसरा भाग देखती है, जो काम करता है।

यहाँ एकमात्र मुश्किल भाग बयानों का एक सेट (पहला भाग) है जो भाषा ए में काम करता है जबकि भाषा बी में त्रुटियां नहीं दे रहा है। इसके लिए कुछ सुझाव:

  • अधिकांश स्टैक-आधारित भाषाएं कार्यक्रम के अंत में केवल स्टैक के शीर्ष को प्रदर्शित करने की अनुमति देती हैं (कभी-कभी यह डिफ़ॉल्ट भी होता है, जैसा कि 05AB1E में है)।
  • कुछ भाषाएँ अपरिभाषित कथनों को अनदेखा करती हैं (उदाहरण के लिए गोल्फस्क्रिप्ट)।

इन दिशानिर्देशों का उपयोग करने वाला एक सरल उदाहरण यहां पाया जा सकता है । भाषाएँ A और B क्रमशः MATL और 05AB1E हैं।


24

द्वि-आयामी भाषाओं का उपयोग करें

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

एक बोनस के रूप में, कई द्वि-आयामी भाषाओं में कार्यक्रम के ऊपरी-बाएँ के अलावा एक प्रविष्टि बिंदु होता है, जिसका अर्थ है कि आपको उन्हें अन्य भाषाओं से अलग करने के लिए किसी भी प्रयास पर जाने की आवश्यकता नहीं है; वे स्वाभाविक रूप से समूह से खुद को अलग कर लेंगे।


20

अपने Trues और झूठ को जानें

प्रत्येक भाषा "सत्य" और "असत्य" को थोड़े अलग तरीके से देखती है। यदि उनके पास समान वाक्यविन्यास है, तो आप एक निर्णय जोड़कर इसका फायदा उठा सकते हैं कि भाषाएँ अलग तरीके से संभालेंगी।

ट्रिक या ट्रीट थ्रेड का एक उदाहरण'' , एक खाली स्ट्रिंग का उपयोग करता है । लुआ में, यह सत्य का मूल्यांकन करता है, लेकिन पायथन में मिथ्या है, इसलिए निम्नलिखित हैं:

print(''and'trick'or'treat')

.. प्रत्येक भाषा में एक अलग स्ट्रिंग प्रिंट करें।

यह सब लेता है इस तरह एक मूल्य मिल रहा है। उदाहरण के लिए, आप उपयोग कर सकते हैं '0', जो falsePHP में लेकिन trueपायथन में मूल्यांकन करता है ।


17

कम से कम एक भाषा में ब्लॉकचोट

यहाँ एक उदाहरण है जो पायथन और सी ++ दोनों में काम करता है

#include <iostream> /*
""" */
int main() {
    std::cout << "Hello World!\n";
}

/* """
print("Hello World!")
# */

लुइस मेंडो ने कहा कि मुझे लगता है कि अब तक सबसे आसान समाधान है, जो टिप्पणियों का उपयोग करना है।

आप एक ऐसी भाषा खोजते हैं जिसमें ब्लॉक कमेंटिंग हो और दूसरी भाषा जहां पहले में रेगुलर सिंटैक्स हो, दूसरे में सिंटैक्स कमेंट करना हो।

यहां तक ​​कि आसान दो अलग-अलग ब्लॉक कमेंटिंग स्टाइल वाली दो भाषाएं हैं जो एक दूसरे के लिए सही वाक्यविन्यास हैं, लेकिन मुझे जांचने के लिए परेशान नहीं किया जा सकता है।

इसे पायथन 3.5 और C ++ में देखें


2
पहली पंक्ति में अर्धविराम नहीं होना चाहिए।

सच। शुभ अंक
3x पर dexgecko

15

विभाजन और जीत

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

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

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

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

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


13

स्ट्रिंग शाब्दिक के अंदर कोड छिपाएँ

अधिकांश भाषाओं में, अपने आप में एक स्ट्रिंग शाब्दिक या तो कुछ भी नहीं करता है, या ऐसा कुछ करता है जिसे आसानी से उलटा किया जा सकता है (जैसे कि स्टैक पर स्ट्रिंग को धक्का देना)। स्ट्रिंग सिंटल सिंटैक्स भी अपेक्षाकृत अस्वाभाविक है, विशेष रूप से वैकल्पिक सिंटैक्स के लिए जो कई भाषाओं में एम्बेडेड सुर्खियों के साथ तार को संभालने के लिए उपयोग करते हैं; उदाहरण के लिए, पायथन के पास """ ... """, पर्ल के पास q( ... )और लुआ के पास है [[ ... ]]

इनके दो मुख्य उपयोग हैं। आपको एक भाषा के पहले खंड के अंत में एक स्ट्रिंग शुरू करने और दूसरे की शुरुआत में इसे फिर से शुरू करने के माध्यम से विभिन्न भाषाओं के लिए अभिप्रेत वर्गों की अनुमति देने के लिए है: यह विभिन्न प्रकार के कारण गलती से स्ट्रिंग को बंद करने से बचने के लिए काफी आसान होना चाहिए विभिन्न भाषाओं के बीच स्ट्रिंग परिसीमन। दूसरी बात यह है कि कई स्ट्रिंग डेलिमिटर अन्य भाषाओं में एक कमांड के रूप में सार्थक होते हैं (अक्सर टिप्पणी मार्करों की तुलना में अधिक), इसलिए आप कुछ ऐसा कर सकते हैं x = [[4] ], जो उन भाषाओं में एक हानिरहित कार्य है जो सूचियों के लिए JSON नोटेशन का उपयोग करते हैं, लेकिन शुरू होता है लुआ में एक स्ट्रिंग (और इस तरह आप बाकी से लुआ कोड को विभाजित करने की अनुमति देते हैं, यह देखते हुए कि यह प्रभावी रूप से अगले पर "कूदता है" ]])।


13

कार्यक्रम की समाप्ति

आप प्रोग्राम को एक भाषा में अचानक समाप्त कर सकते हैं ताकि यह दूसरी भाषा में कोड को अनदेखा कर दे।

तो मूल रूप से इस प्रारूप का उपयोग किया जा सकता है

code_in_language1 end_program_in_language1 code_for_language2 end_program_in_language2 ...

end_program_in_languageNकार्यक्रम को समाप्त करने की आज्ञा कहां है।

उदाहरण के लिए, मेरे जवाब में आप धन्यवाद के लिए क्या लाएंगे? , मैंने डिप में कार्यक्रम समाप्त किया, और फिर मैंने एक और भाषा, वी के लिए कोड लिखा, ताकि डिप इंटरप्रेटर इसे अनदेखा कर दे।

"turkey"e#"corn"??"gravy"p&Ssalad
"turkey"e#"corn"??"gravy"                 
                         p&            # print stack and exit program (Dip) 
                           Ssalad      # Now that the program ended in Dip,
                                       # I can write V code that would otherwise
                                       # have caused errors in Dip

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

जैसा कि @LuisMendo ने सुझाव दिया है, आप प्रोग्राम को समाप्त करने के लिए एक त्रुटि बना सकते हैं (यदि इसकी अनुमति है) यदि भाषा में पहले से "एंड प्रोग्राम" बिलिन नहीं है।


2
भले ही भाषा के पास कार्यक्रम समाप्त करने के लिए कोई फ़ंक्शन या कथन नहीं है, आमतौर पर एक त्रुटि होगी
लुइस मेंडो

1
@LuisMendo: सहमत हैं, हालांकि ध्यान दें कि कई पॉलीग्लॉटिंग समस्याएं विशेष रूप से बाहर निकलने के माध्यम से दुर्घटनाग्रस्त होने पर प्रतिबंध लगाती हैं क्योंकि इससे चीजें बहुत आसान हो जाती हैं। जब वे नहीं करते तो इसका फायदा उठाना अच्छा होता है।

1
आपको शायद यह उल्लेख करना चाहिए कि दूसरे भाग का कोड अभी भी पहली भाषा में वाक्यविन्यास रूप से सही होना चाहिए अन्यथा अधिकांश व्यावहारिक भाषाएं एक त्रुटि को फेंक देगी।
MilkyWay90

13

स्ट्रिंग शाब्दिक के अंदर परिवर्तनीय या कोड

डबल-उद्धृत स्ट्रिंग शाब्दिक कई भाषाओं में ज्यादातर हानिरहित हैं। लेकिन कुछ भाषाओं में वे कोड भी हो सकते हैं।

बैश में, आप उपयोग कर सकते हैं `...`(यह कार्यक्रम समाप्त नहीं करता है):

"`echo Hello world! >/proc/$$/fd/1`"

Tcl में, आप उपयोग कर सकते हैं [...]:

"[puts {hello world!};exit]"

PHP में, आप उपयोग कर सकते हैं ${...}(यह बैश में एक त्रुटि उत्पन्न करता है, इसलिए इसे बैश कोड के बाद दिखाई देना चाहिए):

"${die(print(Hello.chr(32).world.chr(33)))}";

रूबी में, आप उपयोग कर सकते हैं #{...}:

"#{puts 'Hello world!';exit}"

अन्य भी हो सकते हैं।

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

कई मामलों में, आप आसानी से वहाँ एक दोहरे उद्धरण वर्ण पर टिप्पणी कर सकते हैं और एक अधिक पारंपरिक पॉलीग्लॉट बना सकते हैं।


12

परिवर्तनशील अलियासिंग

यह शायद सबसे सरल अभी तक (IMO) का उपयोग करने के लिए सबसे महत्वपूर्ण चालों में से एक है, खासकर जब से यह कई भाषाओं तक पहुंच सकता है।

उदाहरण:

print=alert;print("Hello World!")

यह न केवल जावास्क्रिप्ट, बल्कि पायथन, रूबी, आदि में भी काम करेगा। अधिक उदाहरण बाद में जब मैं कुछ अन्य लोगों के बारे में सोचता हूं। बेशक, टिप्पणी के सुझाव / पोस्ट संपादन स्वागत योग्य हैं।


5
ध्यान दें कि JS / Python को करते समय, यह आमतौर पर Python (केवल 3) में उपनाम alertसे छोटा होता है printक्योंकि JS के टिप्पणी वाक्यविन्यास //, को आसानी से Python प्रोग्राम में काम किया जा सकता है, जबकि Python #को JS में काम नहीं किया जा सकता है।
3

11

#-बड़ी टिप्पणी

यह टिप कम से कम एक भाषा में एक्सप्लॉइट टिप्पणी प्रतीकों और ब्लॉकक्वाट का सबसेट है

कई भाषाओं के साथ पॉलीग्लॉट बनाते समय, विशेष रूप से उत्पादन के लिए तैयार भाषाओं के रूप में एसोलंग्स के विपरीत, यह उन भाषाओं को देखने के लिए उपयोगी हो सकता है जो #ब्लॉक या सिंगल-लाइन टिप्पणियों में उपयोग करते हैं ।

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

यहां उन भाषाओं की त्वरित सारांश सूची है जो #ब्लॉक टिप्पणी में उपयोग करते हैं (संपूर्ण नहीं):

Language            Start       End      Single-line #?     Notes
------------------------------------------------------------------------------------------
Agena               #/          /#             ✓
AutoIt              #cs         #ce
Brat                #*          *#             ✓
C                   #if 0       #endif                      Not actually a comment
CoffeeScript        ###         ###            ✓            Needs to be on separate line
Common Lisp         #|          |#
Julia               #=          =#             ✓
Lily                #[          ]#             ✓
Objeck              #~          ~#             ✓
Perl 6              #`{         }#             ✓            Any bracketing chars will do
Picolisp            #{          }#             ✓
Scheme              #|          |#

अधिक उदाहरणों के लिए, रोसेटा कोड देखें ।

यहाँ एक त्वरित और आसान उदाहरण है, प्रदर्शन के रूप में:

#|
###
#`[

print("Julia")
#=

|#
(format t "Common Lisp")
#|

###
alert("CoffeeScript")
###

]#
say "Perl 6"
#`[

...

# ]# # ### # |# ; =#

जेफायर के पास है #- ... -#
DLosc

11

अंकगणित ऑपरेटर विसंगतियां

समान भाषाओं या सरल बहुभाषाविदों के लिए, कभी-कभी यह उपयोगी होता है कि भाषाएं कैसे अंकगणित करती हैं। ऐसा इसलिए है क्योंकि अधिकांश (गैर-गूढ़) भाषाओं में infix अंकगणितीय संचालक हैं और अंकगणित एक अंतर को पेश करने का एक त्वरित और आसान तरीका हो सकता है।

उदाहरण के लिए:

  • ^ कुछ भाषाओं में बिटकॉइन XOR है और अन्य में घातांक है
  • / कुछ भाषाओं में पूर्णांक विभाजन और दूसरों में फ्लोटिंग पॉइंट डिवीजन है
    • पूर्णांक विभाजन भाषाओं के लिए, -1/2है -1कुछ भाषाओं (नीचे दौर) और 0(शून्य करने के लिए गोल) दूसरों में
  • -1%2है -1कुछ भाषाओं में और 1दूसरों में
  • --x कुछ भाषाओं में एक सेशन नहीं है (दुगना नकार) और दूसरों में पूर्व-गिरावट
  • 1/0 कुछ भाषाओं में अनंतता देता है और दूसरों में त्रुटियां
  • 1<<64कुछ भाषाओं में (ओवरफ्लो) और 36893488147419103232अन्य में 0 देता है

3
एक सरल उदाहरण होगा x=1;["JS","Python"][--x], जो उस भाषा का नाम देता है जो इसे (जेएस और पायथन के बीच) चलाया जाता है।
ETHproductions

10

ब्रेनफक का उपयोग करें

बहुत सारे सभी बीएफ कार्यान्वयनों ने चार को खत्म कर दिया है +-<>[].,, जो कि हमारे पक्ष में काम करने के लिए बस इतना ही होता है!

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

यहाँ एक बहुत सरल उदाहरण है:

.+[.+]

यह बहुत अधिक वेतन वृद्धि और चारकोड-आउटपुट "हमेशा के लिए" (रनटाइम सेटिंग्स के आधार पर)। अब अगर आप जेएस में एक यादृच्छिक कोड लिखना चाहते हैं, तो आप ऐसा कर सकते हैं:

x=>"asdf".repeat(+x)[x*Math.random()*2+1|0]

ध्यान दें कि JS को BF के आसपास कैसे ढाला जाता है।

यह जानना सुनिश्चित करें कि यह सबसे अच्छा काम करता है यदि आप वास्तव में बीएफ के साथ शुरू करते हैं; किसी अन्य भाषा के साथ शुरू करना और BF को शामिल करने का प्रयास करना शालीनता से कठिन है।


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

6
यह सिर्फ ब्रेनफक पर ही नहीं बल्कि ब्रेनफक-समान भाषाओं की एक बड़ी संख्या और अन्य ट्यूरिंग टारपीट्स पर लागू होता है।
''

2
पहला x=>सेल बदलता है, जो इस मामले में कोई फर्क नहीं पड़ता है, लेकिन सिर्फ यह कहना चाहता है
रोमन ग्रांफ

7

ऐसी भाषाओं का उपयोग करें जिनमें अधिकांश वर्ण मायने नहीं रखते

यह BF के बारे में मामा फन रोल की बात का एक सामान्यीकरण है । एक पात्र जो अधिकांश पात्रों की उपेक्षा करता है, वह बहुभाषाविदों में बहुत उपयोगी है। इसके अलावा उपयोगी: एक एसोलंग जिसमें वर्णों का एक बड़ा समूह विनिमेय है। कुछ उदाहरण:

  • व्हाट्सएप उन सभी चीजों को नजरअंदाज करता है जो स्पेस, टैब या न्यूलाइन नहीं है।
  • ब्रेन-फ्लैक मूल रूप से इसके अलावा सब कुछ अनदेखा करता है ()[]{}<>। ( @कभी-कभी एक त्रुटि का कारण बनता है जब दुभाषिया डिबग ध्वज की शुरुआत के रूप में पार्स करने की कोशिश करता है।)
  • OOo CODE अक्षरों को छोड़कर सब कुछ अनदेखा करता है। इसके अलावा, सभी लोअरकेस अक्षर विनिमेय हैं, जैसा कि सभी बड़े अक्षर हैं।
  • Wierd केवल व्हाट्सएप और गैर-व्हाट्सएप पात्रों के बीच अंतर करता है।
  • में आवेदन Wordy , कुछ विराम चिह्न वर्णों को अनदेखा किया जाता है, और सभी पत्र परस्पर विनिमय कर रहे।
  • पेरेंटेटिक और पेरेंटेसिस हेल दोनों ही कोष्ठक को छोड़कर सब कुछ अनदेखा करते हैं।

मैंने वह @त्रुटि ठीक कर दी ।
गेहूं जादूगर

पायथन के साथ
व्हॉट्सएप को

@enedil आपको पायथन के साथ टैब करने की आवश्यकता नहीं है। आप उपयोग कर सकते हैंexec('''...\t\n\40''')
MilkyWay90

5

नेस्टेड ब्लॉक कमेंट्स से सावधान रहें

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

उदाहरण के लिए, इस बहुभुज पर विचार करें:

#[#[]#print("Lily")#]#echo"Nim"

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

लिली दूसरे #[को विलक्षण ब्लॉक कमेंट का हिस्सा मानती हैं और पहला ]#ब्लॉक कमेंट को समाप्त करती हैं। ( #निम्नलिखित लिली का प्रिंट स्टेटमेंट एक लाइन टिप्पणी है जो निम के कोड को छुपाता है।)

निम वैकल्पिक #[]#रूप से, एक नेस्टेड (यद्यपि खाली) ब्लॉक टिप्पणी के print("Lily")#रूप में और बाहरी ब्लॉक टिप्पणी के रूप में देखता है ।


4

यकीन नहीं होता अगर ये मायने रखता है, लेकिन ...

एक वैध perlकार्यक्रम में सब कुछ चालू करने के लिए एक शबंग रेखा का उपयोग करें

के अनुसार यह उत्तर और पर्ल प्रलेखन, अगर आप किसी भी फ़ाइल है कि एक कुटिया लाइन के साथ शुरू होता है पारित करने के लिए perlहै, यह इसे चलाने के लिए उपयुक्त प्रोग्राम invokes। उदाहरण के लिए, यह

#!/usr/bin/python

for i in range(6):
    print i**2

यदि आप कॉल करते हैं तो पायथन दुभाषिया द्वारा निष्पादित हो जाता है perl filename.py


3
जबकि कार्यक्रम के साथ बुलाया जा सकता है perl, यह एक पर्ल कार्यक्रम नहीं बन जाता है।
पाओलो एबरमन

2
@ Pa @loEbermann मुझे पता है कि यह सीमा रेखा है, इसीलिए मैंने अपना जवाब "यह सुनिश्चित नहीं किया है कि यह मायने रखता है" के साथ शुरू किया। :) लेकिन क्या सही पर्ल को परिभाषित करता है, अगर "दस्तावेज में क्या लिखा गया है और संदर्भ कार्यान्वयन द्वारा वापस लौटाया गया है perl"? एक अच्छा फिलोसोर्प्टर मेम की तरह लगता है ...
फेडरिको पोलोनी


4

किसी भी फ़ंक्शंस को कॉल करें, फिर उनके तर्कों का मूल्यांकन करते हुए बाहर निकलें

कई प्रोग्रामिंग भाषाएं एक मनमाना पहचानकर्ता को पार्स करने में सक्षम हैं, उसके बाद कोष्ठक की एक जोड़ी के साथ एक अभिव्यक्ति है:

identifier(1 + 1)

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

हालाँकि, कई प्रोग्रामिंग भाषाएँ किसी फ़ंक्शन के तर्कों का मूल्यांकन करती हैं, इससे पहले कि वे देखें कि क्या फ़ंक्शन वास्तव में मौजूद है (उदाहरण Lua), और इसलिए आप इस तरह के निर्माण का उपयोग कर सकते हैं; आपको केवल फ़ंक्शन के तर्कों के अंदर प्रोग्राम से बाहर निकलने की आवश्यकता है।

यहाँ एक उदाहरण है, एक dc / Lua बहुभुज:

c2pq(1 + #os.exit(print(3)))

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.