क्रिस्टल (प्रोग्रामिंग भाषा)

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

इतिहास
जून 2011 में भाषा पर काम शुरू हुआ, संकलित भाषा की गति, दक्षता और प्रकार की सुरक्षा के साथ रूबी की भव्यता और उत्पादकता को मिलाने के उद्देश्य से। शुरुआत में इसका नाम जॉय रखा गया, लेकिन जल्द ही इसका नाम बदलकर क्रिस्टल कर दिया गया।

क्रिस्टल कंपाइलर पहले रूबी में लिखा गया था, लेकिन बाद में क्रिस्टल में फिर से लिखा गया, इस प्रकार नवंबर 2013 तक स्व-होस्टिंग (संकलक)कंपाइलर) | सेल्फ-होस्टिंग बन गया। पहला आधिकारिक संस्करण जून 2014 में जारी किया गया था। जुलाई 2016 में, क्रिस्टल TIOBE इंडेक्स में शामिल हो गया।

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

हैलो वर्ल्ड
क्रिस्टल में हैलो वर्ल्ड प्रोग्राम लिखने का यह सबसे आसान तरीका है:

<वाक्यविन्यास लैंग = क्रिस्टल> हैलो वर्ल्ड डालता है!  रूबी के समान ही।

या ऑब्जेक्ट उन्मुख प्रोग्रामिंग शैली का उपयोग करना:

<वाक्यविन्यास लैंग = क्रिस्टल> वर्ग अभिवादनकर्ता def प्रारंभ करें (@ नाम: स्ट्रिंग) अंत

डीईएफ़ सलामी हेलो #{@name} डालता है! अंत अंत

जी = ग्रीटर.न्यू (दुनिया) जी सलाम 

HTTP सर्वर
<वाक्यविन्यास लैंग = क्रिस्टल> http/सर्वर की आवश्यकता है

सर्वर = HTTP::Server.new do |context| context.response.content_type = text/plain context.response.print हैलो वर्ल्ड! समय #{समय.स्थानीय} है अंत

सर्वर.बाइंड_टीसीपी (0.0.0.0, 8080) लिसनिंग को http://0.0.0.0:8080 पर रखता है सर्वर.सुनो 

टीसीपी इको सर्वर
<वाक्यविन्यास लैंग = क्रिस्टल> सॉकेट की आवश्यकता है

डीईएफ़ हैंडल_क्लाइंट (क्लाइंट) संदेश = क्लाइंट.गेट्स क्लाइंट.पुट संदेश अंत

सर्वर = TCPServer.new (लोकलहोस्ट, 1234) जबकि क्लाइंट = सर्वर। स्वीकार करें? स्पॉन हैंडल_क्लाइंट (क्लाइंट) अंत 

प्रकार अनुमान और संघ प्रकार
निम्नलिखित कोड एक सरणी को परिभाषित करता है जिसमें विभिन्न प्रकार होते हैं जिनमें कोई प्रयोग करने योग्य सामान्य पूर्वज नहीं होता है। क्रिस्टल स्वचालित रूप से अलग-अलग वस्तुओं के प्रकार से एक संघ प्रकार बनाता है।

<वाक्यविन्यास लैंग = क्रिस्टल> वांछित चीजें = [यूनिकॉर्न, तितलियां, 1_000_000] p typeof(desired_things.first) # typeof संकलन समय प्रकार देता है, यहाँ (प्रतीक | स्ट्रिंग | Int32) p वांछित_चीजें.फर्स्ट.क्लास # क्लास विधि रनटाइम प्रकार लौटाती है, यहां प्रतीक 

समवर्ती
चैनलों का उपयोग तंतुओं के बीच संवाद करने के लिए किया जा सकता है, जो कि कीवर्ड का उपयोग करके शुरू किए जाते हैं.

<वाक्यविन्यास लैंग = क्रिस्टल> चैनल = चैनल (Int32)। नया

स्पॉन करते हैं पहले भेजने से पहले रखता है channel.send(1) दूसरे भेजने से पहले रखता है channel.send(2) अंत

पहले प्राप्त करने से पहले डालता है मूल्य = चैनल। प्राप्त करें मूल्य डालता है # => 1

दूसरा प्राप्त करने से पहले रखता है मूल्य = चैनल। प्राप्त करें मूल्य डालता है # => 2 

बाहरी संबंध

 * Documentation
 * /r/crystal_programming subreddit
 * Crystal Announcements
 * /r/crystal_programming subreddit
 * Crystal Announcements