सबसे तेज़ कार्यात्मक भाषा


18

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

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


18
भाषाएं तेज़ या धीमी नहीं हैं, कार्यान्वयन हैं।
स्टारब्ले

6
भाषा कार्यान्वयन तेज या धीमी गति से नहीं होते हैं, प्रोग्राम उन भाषा कार्यान्वयनों का उपयोग करके चलते हैं (जब कुछ अन्य कार्यक्रमों की तुलना में)। धर्मार्थ बनो - जब कोई एक प्रोग्रामिंग भाषा को दूसरे की तुलना में तेज होने की बात करता है, तो स्पष्ट तरीका यह समझ में आता है कि वे विशेष भाषा कार्यान्वयन का उपयोग करके चलने वाले विशेष कार्यक्रमों के बारे में बात कर रहे हैं।
igouy

3
@starblue: यह एक बहुत ही शानदार जवाब है, और बहुत मददगार नहीं है। हालांकि, एक ही भाषा के दो कार्यान्वयन बनाने के लिए निश्चित रूप से संभव है, जिनमें से एक दूसरे की तुलना में धीमा है, जिस तरह से आपने इसे वहां रखा है उसका तात्पर्य है कि भाषा के डिजाइन के विवरण मौजूद नहीं हैं जो आवश्यक रूप से कार्यान्वयन में कुछ अक्षमताओं की आवश्यकता होती है जो कि अन्य भाषाओं, उनके द्वारा डिजाइन, आवश्यकता नहीं है। और यह केवल सच नहीं है। (विशेष रूप से इस विशेष विषय में; कार्यात्मक भाषाएं उनके लिए कुख्यात हैं!)
मेसन व्हीलर

3
@igouy "भाषा कार्यान्वयन तेज़ या धीमा नहीं है" यह सच नहीं है। CPythonबनाम PyPyजल्दी से मन में आता है।
19

@NlightNFotis - CPython को कितने सेकंड लगते हैं? PyPy को कितने सेकंड लगते हैं? भाषा कार्यान्वयन तेज या धीमा नहीं है। सीपीथॉन के साथ उस कार्यक्रम को कितने सेकंड लगते हैं?
इगौई

जवाबों:


25

ग्रेट बेंचमार्क गेम के अनुसार , एटीएस हास्केल, स्काला के साथ बाकी हिस्सों की तुलना में तेज है, और इसके पीछे की गति के लिए किसी न किसी टाई में कॉमन लिस्प के वेरिएंट में से एक है। उसके बाद Ocaml और F # लगभग रैकेट और क्लोजर पिछड़ने के साथ समान गति श्रेणी में हैं ...

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


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

विस्तृत तुलना जानकारी के साथ अच्छा लिंक। मैं क्लोज़र को बहुत अधिक मेमोरी का उपयोग करके और जावा की तुलना में काफी अधिक समय देखकर थोड़ा निराश हूं। मुझे याद है कि क्लोजर के बारे में कुछ दावे ऐसे ही हैं, जो ऐसा प्रतीत नहीं होता।
डीपीएम

एटीएस वेबसाइट बताती है कि एटीएस विभिन्न प्रकार के प्रोग्रामिंग प्रतिमानों का समर्थन करता है - इसलिए, इससे पहले कि आप दावा करें कि एटीएस बाकी की तुलना में तेज है, आपको यह दिखाने की आवश्यकता है कि उन कार्यक्रमों को वास्तव में एक कार्यात्मक शैली में लिखा गया है। यह सिर्फ यह हो सकता है कि कार्यात्मक एटीएस बाकी की तुलना में तेज नहीं है।
igouy

2
स्काला वेबसाइट बताती है कि स्काला ऑब्जेक्ट-ओरिएंटेड और फंक्शनल फीचर्स को एकीकृत करता है। क्या आपने जाँच की है कि स्केल प्रोग्राम को ऑब्जेक्ट ओरिएंटेड प्रोग्राम के बजाय फंक्शनल प्रोग्राम के रूप में लिखा जाता है?
igouy

12

यह भी बताया जाना चाहिए कि आप प्रोग्रामिंग भाषा के प्रदर्शन को माप / माप नहीं सकते हैं । आप जो सबसे अच्छा कर सकते हैं, वह विशिष्ट कार्यक्रमों को चलाने वाले विशिष्ट प्लेटफार्मों पर भाषा के विशिष्ट कार्यान्वयन के प्रदर्शन को मापता है ।

इसलिए जब आप "सबसे तेज़ कार्यात्मक भाषा" के बारे में पूछते हैं, तो आप वास्तव में भाषा के वर्तमान कार्यान्वयन के सर्वश्रेष्ठ के बारे में क्या पूछ रहे हैं।


@ igouy की टिप्पणी इस बात को उठाती है कि भाषा कार्यान्वयन के लिए अन्य प्रदर्शन उपाय हैं; उदाहरण संकलन समय। लेकिन यह इस तथ्य को नहीं बदलता है कि एप्लिकेशन प्रोग्राम का रन टाइम भाषा के कार्यान्वयन का एक (अप्रत्यक्ष) माप है, न कि भाषा का एक माप।

उदाहरण के लिए जावा पर विचार करें। मान लीजिए मैं क्लासिक (जावा 1.0) जावा की पूरी तरह से भाषा सुविधाओं का उपयोग करते हुए एक एकल-थ्रेडेड बेंचमार्क लिखता हूं। यदि मैं JDK 1.0 का उपयोग करके संकलन करता हूं और चलाता हूं, तो मुझे खराब प्रदर्शन मिलेगा ('cos JDK 1.0 में एक देशी कोड बॉयलर नहीं था)। यदि मैं JDK 1.1 से ... JDK 1.7 पर जाता हूं, तो मुझे सबसे अधिक संभावना उत्तरोत्तर बेहतर परिणाम प्राप्त होंगे। लेकिन यह जावा लैंग्वेज में बदलाव के कारण नहीं है ... क्योंकि मेरा बेंचमार्क उसी लैंग्वेज सब्मिट का उपयोग कर रहा है। बल्कि स्पीडअप कंपाइलरों में सुधार, रनटाइम सिस्टम और / या कक्षा पुस्तकालयों के कार्यान्वयन के कारण है। ये सभी कार्यान्वयन मुद्दे हैं।

दूसरा बिंदु यह है कि ये कार्यान्वयन अंतर एक ही भाषा के लिए वास्तव में महत्वपूर्ण हो सकते हैं (उदाहरण के लिए परिमाण के आदेश)। इसलिए यह तथ्य कि भाषा X के लिए सबसे अच्छा कार्यान्वयन भाषा Y के सर्वश्रेष्ठ (या केवल) कार्यान्वयन से तेज है, जरूरी नहीं कि आप भाषा के बारे में बहुत कुछ बताएं।


आप जो सबसे अच्छा कर सकते हैं वह विशिष्ट कार्यक्रमों के प्रदर्शन को मापता है। जब हम किसी भाषा के कार्यान्वयन के प्रदर्शन को मापते हैं तो हम यह पता लगाना चाहते हैं कि किसी कार्यक्रम को संकलित करने में कितना समय लगता है, न कि उस कार्यक्रम को चलाने में कितना समय लगता है।
इगौई

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

@igouy - यह सच है। लेकिन बहुत से लोग इस बात को स्पष्ट नहीं करते हैं, जैसा कि बहुत सी पुरानी वेबसाइटों द्वारा सचित्र बताया गया है कि "जावा धीमा है। दुर्भाग्य से, प्रोग्रामर्स की पूरी पीढ़ी द्वारा इस बकवास को शाब्दिक रूप से पढ़ा गया था ... और इसने जावा की प्रतिष्ठा को काफी नुकसान पहुंचाया। यही कारण है कि मैं इस बिंदु को यहाँ बना रहा हूँ।
स्टीफन C

आप स्वतंत्रता कहने के लिए करना चाहते हैं के रूप में - "एक (अप्रत्यक्ष) एक भाषा के कार्यान्वयन के उपाय" - कृपया बताएं कि क्यों किसी और कहते हैं कि करने के लिए स्वतंत्र नहीं होना चाहिए - एक भाषा की एक (अप्रत्यक्ष) उपाय
इगौई

@igouy - 1) आप यह कहने के लिए स्वतंत्र हैं कि आपको क्या पसंद है। लेकिन यह आपको सही नहीं बनाता है। 2) उस मामले पर विचार करें जहां किसी भाषा का एकमात्र कार्यान्वयन बकवास है। हम इसे बेंचमार्क करते हैं। फिर हम कार्यान्वयन को अद्यतन करते हैं, इसे बेंचमार्क करते हैं, और प्रदर्शन में नाटकीय रूप से सुधार हुआ है। क्या इसका मतलब यह है कि भाषा के प्रदर्शन में सुधार हुआ है? यह कैसे समझ में आता है ... यह देखते हुए कि भाषा नहीं बदली है !!!
स्टीफन सी

6

यदि आप निष्पादन की गति पर केवल भाषाओं को देख रहे हैं तो आप कुछ प्रमुख बिंदुओं को याद कर रहे हैं। गति एक अच्छी बात है, लेकिन यह केवल एक चीज नहीं है।

हास्केल प्रोग्राम बनाने के लिए बहुत मजबूत प्रकार की प्रणाली का उपयोग करता है जो बग मुक्त और मजबूत होने की अधिक संभावना होगी।

एरलैंग अपनी निगरानी प्रणाली में निर्मित का उपयोग करता है ताकि आप गलती सिस्टम बना सकें जो आपको विभिन्न प्रकार के दोषों का सामना करने में एक विशाल स्तर दे सकता है। इसके अलावा Erlang आपको समसामयिक स्तर दे सकता है जो अन्य भाषाओं में मेल करना मुश्किल है।

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

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