हास्केल से प्राप्त ज्ञान और कौशल को निर्यात करने के लिए सबसे अधिक संगत, व्यापक रूप से इस्तेमाल की जाने वाली उत्पादन भाषा क्या है?


14

मुझे हास्केल, सादा और सरल पसंद है। जबकि Haskell का उपयोग उत्पादन सॉफ्टवेयर में किया जाता है, यह विशेष रूप से व्यापक रूप से मैंने जो देखा है, उससे तैनात नहीं है। उत्पादन परियोजनाओं के संबंध में सबसे समान और अभी भी व्यापक रूप से उपयोग की जाने वाली भाषा क्या है ताकि मेरे पास उद्योग में समान रूप से भयानक चीज़ का उपयोग करने का स्नोबॉल मौका हो?

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

जवाबों:


21

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

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

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

खुद के लिए बोलते हुए, इस डिस्क्लेमर के साथ कि कार्यात्मक प्रोग्रामिंग के साथ मेरा पहला अनुभव स्कीम में था, मैं शायद क्लोजर की ओर झुक जाऊंगा, ओमेक्एल एक दूसरी पसंद के साथ।


1
कहा जाता है कि F # से प्रेरित है, यदि OCaml से प्राप्त नहीं हुआ है। एक पिछला SO प्रश्न, F # और OCaml , उस रिश्ते की एक अच्छी चर्चा को शामिल करता है। यदि आप .NET की तरफ हैं, तो F # एक उत्कृष्ट विकल्प होगा और Microsoft अब F # को "प्रथम श्रेणी" .NET भाषा मानता है। जेवीएम की तरफ, स्काला के पास औद्योगिक उपयोग का एक ट्रैक रिकॉर्ड है और क्लर्जुर चार्ट में बढ़ रहा है। मुझे इस समय कोई भी सबसे अच्छी पसंद का पता नहीं है, क्योंकि बाजार ने अभी तक इस ऑब्जेक्ट-फंक्शनल स्पेस में स्पष्ट विजेता घोषित नहीं किया है।
जॉन टॉबलर

4

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


3

एक कार्यात्मक विकल्प Erlang है । हालांकि यह एक बहुत ही समवर्ती भाषा है, अनुक्रमिक सबसेट, कार्यात्मक भाषाओं के कई गुणों के साथ एक शुद्ध कार्यात्मक भाषा है, उदाहरण के लिए क्लोजर, अपरिवर्तनीय डेटा और पैटर्न मिलान। यह linux, विभिन्न unixes, windows और macosx सहित कई प्लेटफार्मों पर चलता है। अब JVM, erjang पर भी कार्यान्वयन है । यह आसानी से अन्य भाषाओं के साथ संवाद कर सकता है और सह-अस्तित्व में है, यह इस तरह से अक्सर उपयोग किया जाता है।

की जाँच करें मुख्य साइट


3

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

मुख्य क्लोजर सुविधाएँ जो हास्केल उपयोगकर्ताओं को परिचित और सम्मोहक लग सकती हैं:

  • मुख्य भाषा विशुद्ध रूप से कार्यात्मक है - जबकि साइड इफेक्ट्स संभव हैं वे विशिष्ट स्थानों (जैसे एसटीएम संदर्भ, आईओ फ़ंक्शन, जावा इंटरऑपरेबिलिटी) में दूर दफन हो जाते हैं
  • सभी डेटा संरचनाएं अपरिवर्तनीय और लगातार हैं
  • आलस्य - लज्जत के सर्वव्यापी आलसी दृश्यों के माध्यम से बड़े पैमाने पर प्राप्त किया, यह हास्केल उपयोगकर्ताओं के लिए बहुत परिचित महसूस करेगा। अनंत आलसी क्रम ठीक हैं।
  • सॉफ्टवेयर ट्रांजेक्शनल मेमोरी - क्लोजर में उत्परिवर्तनीय स्थिति से निपटने का मुख्य तरीका है। इस बेहतरीन वीडियो को देखने के लायक है, जहां रिच हिकी, क्लोजर के पहचान और राज्य के दृष्टिकोण के बारे में बताते हैं: http://www.infoq.com/pretations/Value-Identity-State-Rich-Hickey

मुख्य अंतर (आपके दृष्टिकोण के आधार पर सकारात्मक या नकारात्मक हो सकता है):

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

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


1

यदि आप हास्केल को पसंद करते हैं, लेकिन जेवीएम के लिए कोड बनाना है, तो फ्रीज आपके लिए दिलचस्प हो सकता है। यह हास्केल 2010 के जितना संभव हो उतना करीब होने के लिए डिज़ाइन किया गया है, फिर भी जावा कोड उत्पन्न करता है।

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

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