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

From Vigyanwiki
No edit summary
No edit summary
Line 17: Line 17:
}}
}}


क्रिस्टल उच्च-स्तरीय प्रोग्रामिंग भाषा है सामान्य-उद्देश्य, वस्तु-उन्मुख प्रोग्रामिंग भाषा  है, जिसे आर्य बोरेन्सज़्वेग, जुआन वाजनरमैन, ब्रायन कार्डिफ और 300 से अधिक योगदानकर्ताओं द्वारा डिजाइन और विकसित किया गया है।<ref name="contributors" /> रूबी (प्रोग्रामिंग भाषा ) भाषा से प्रेरित सिंटैक्स के साथ,<ref name="rel_0.18.0"/> यह [[संकलित भाषा]] है जिसमें टाइप प्रणाली स्टेटिक टाइप-चेकिंग है, लेकिन चर या विधि तर्कों के प्रकार निर्दिष्ट करना सामान्यतः अनावश्यक है। प्रकार एक उन्नत वैश्विक प्रकार अनुमान एल्गोरिथम द्वारा हल किए जाते हैं।<ref name="type-inference-i" /> '''लेकिन चर या विधि तर्कों के प्रकार निर्दिष्ट करना सामान्यतः  अनावश्यक है। प्रकार एक उन्नत वैश्विक प्रकार अनुमान एल्गोरिथम द्वारा हल किए जाते हैं।<ref name="type-inference-i" /> क्रिस्टल'''
क्रिस्टल उच्च-स्तरीय प्रोग्रामिंग भाषा है सामान्य-उद्देश्य, वस्तु-उन्मुख प्रोग्रामिंग भाषा  है, जिसे आर्य बोरेन्सज़्वेग, जुआन वाजनरमैन, ब्रायन कार्डिफ और 300 से अधिक योगदानकर्ताओं द्वारा डिजाइन और विकसित किया गया है।<ref name="contributors" /> रूबी (प्रोग्रामिंग भाषा ) भाषा से प्रेरित सिंटैक्स के साथ,<ref name="rel_0.18.0"/> यह [[संकलित भाषा]] है जिसमें टाइप प्रणाली स्टेटिक टाइप-चेकिंग है, लेकिन चर या विधि तर्कों के प्रकार निर्दिष्ट करना सामान्यतः अनावश्यक है। प्रकार एक उन्नत वैश्विक प्रकार अनुमान एल्गोरिथम द्वारा हल किए जाते हैं।<ref name="type-inference-i" /> '''न्नत वैश्विक प्रकार अनुमान एल्गोरिथम द्वारा हल किए जाते हैं।<ref name="type-inference-i" /> क्रिस्टल'''


वर्तमान में सक्रिय विकास में है। यह [[अपाचे लाइसेंस]] संस्करण 2.0 के तहत [[मुफ़्त और ओपन-सोर्स सॉफ़्टवेयर]] के रूप में जारी किया गया है।
वर्तमान में सक्रिय विकास में है। यह [[अपाचे लाइसेंस]] संस्करण 2.0 के तहत [[मुफ़्त और ओपन-सोर्स सॉफ़्टवेयर]] के रूप में जारी किया गया है।
Line 82: Line 82:
   spawn handle_client(client)
   spawn handle_client(client)
end
end
</syntaxhighlight><वाक्यविन्यास लैंग = क्रिस्टल>
</syntaxhighlight>
सॉकेट की आवश्यकता है
 
डीईएफ़ हैंडल_क्लाइंट (क्लाइंट)
  संदेश = क्लाइंट.गेट्स
  क्लाइंट.पुट संदेश
अंत
 
सर्वर = TCPServer.new (लोकलहोस्ट, 1234)
जबकि क्लाइंट = सर्वर। स्वीकार करें?
  स्पॉन हैंडल_क्लाइंट (क्लाइंट)
अंत
</वाक्यविन्यास हाइलाइट>


=== प्रकार अनुमान और संघ प्रकार ===
=== प्रकार अनुमान और संघ प्रकार ===
Line 101: Line 90:
p typeof(desired_things.first) # typeof returns the compile time type, here (Symbol | String | Int32)
p typeof(desired_things.first) # typeof returns the compile time type, here (Symbol | String | Int32)
p desired_things.first.class  # the class method returns the runtime type, here Symbol
p desired_things.first.class  # the class method returns the runtime type, here Symbol
</syntaxhighlight><वाक्यविन्यास लैंग = क्रिस्टल>
</syntaxhighlight>
वांछित चीजें = [यूनिकॉर्न, तितलियां, 1_000_000]
p typeof(desired_things.first) # typeof संकलन समय प्रकार देता है, यहाँ (प्रतीक | स्ट्रिंग | Int32)
p वांछित_चीजें.फर्स्ट.क्लास # क्लास विधि रनटाइम प्रकार लौटाती है, यहां प्रतीक
</वाक्यविन्यास हाइलाइट>
 
=== समवर्ती ===
=== समवर्ती ===
चैनलों का उपयोग तंतुओं के बीच संवाद करने के लिए किया जा सकता है, जो कि कीवर्ड का उपयोग करके प्रारंभ  किए जाते हैं<syntaxhighlight>
चैनलों का उपयोग तंतुओं के बीच संवाद करने के लिए किया जा सकता है, जो कि कीवर्ड का उपयोग करके प्रारंभ  किए जाते हैं<code>spawn</code>.<syntaxhighlight>
channel = Channel(Int32).new
channel = Channel(Int32).new


Line 125: Line 109:
value = channel.receive
value = channel.receive
puts value # => 2
puts value # => 2
</syntaxhighlight><code>spawn</code>.
</syntaxhighlight>
 
हले रखता है
<वाक्यविन्यास लैंग = क्रिस्टल>
चैनल = चैनल (Int32)। नया
 
स्पॉन करते हैं
  पहले भेजने से पहले रखता है
   channel.send(1)
   channel.send(1)
   दूसरे भेजने से पहले रखता है
   दूसरे भेजने से पहले रखता है

Revision as of 14:28, 4 March 2023

Crystal
Crystal language logo.svg
ParadigmMulti-paradigm: object-oriented, concurrent
द्वारा डिज़ाइन किया गयाAry Borenszweig, Juan Wajnerman, Brian Cardiff
DeveloperManas Technology Solutions
पहली प्रस्तुतिJune 19, 2014; 10 years ago (2014-06-19)[1]
Stable release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.; Error: first parameter cannot be parsed as a date or time. (Script error: The module returned a nil value. It is supposed to return an export table.)

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

वर्तमान में सक्रिय विकास में है। यह अपाचे लाइसेंस संस्करण 2.0 के तहत मुफ़्त और ओपन-सोर्स सॉफ़्टवेयर के रूप में जारी किया गया है।

इतिहास

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

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

विवरण

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


उदाहरण

हैलो वर्ल्ड

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

puts "Hello World!"

रूबी के समान ही।


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

class Greeter
  def initialize(@name : String)
  end

  def salute
    puts "Hello #{@name}!"
  end
end

g = Greeter.new("world")
g.salute


HTTP सर्वर

require "http/server"

server = HTTP::Server.new do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello world! The time is #{Time.local}"
end

server.bind_tcp("0.0.0.0", 8080)
puts "Listening on http://0.0.0.0:8080"
server.listen

टीसीपी इको सर्वर

require "socket"

def handle_client(client)
  message = client.gets
  client.puts message
end

server = TCPServer.new("localhost", 1234)
while client = server.accept?
  spawn handle_client(client)
end


प्रकार अनुमान और संघ प्रकार

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

desired_things = [:unicorns, "butterflies", 1_000_000]
p typeof(desired_things.first) # typeof returns the compile time type, here (Symbol | String | Int32)
p desired_things.first.class   # the class method returns the runtime type, here Symbol

समवर्ती

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

channel = Channel(Int32).new

spawn do
  puts "Before first send"
  channel.send(1)
  puts "Before second send"
  channel.send(2)
end

puts "Before first receive"
value = channel.receive
puts value # => 1

puts "Before second receive"
value = channel.receive
puts value # => 2
हले रखता है
 channel.send(1)
 दूसरे भेजने से पहले रखता है
 channel.send(2)

अंत

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

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

अग्रिम पठन

  • St. Laurent, Simon; Balbaert, Ivo (February 1, 2019), Programming Crystal (P1.0 ed.), Pragmatic Bookshelf, ISBN 978-1-68050-286-2
  • Wartala, Ramon (March 2016), "Die Ruby-artige Programmiersprache Crystal" [The Ruby-like programming language Crystal], Linux Magazin (in Deutsch), no. 3/2016, ISSN 1432-640X


संदर्भ

  1. "Crystal 0.1.0 released!". crystal-lang. 19 June 2014.
  2. 2.0 2.1 2.2 2.3 2.4 Borenszweig, Ary (June 16, 2016). "Crystal 0.18.0 released!". crystal-lang.org. It's heavily inspired by Ruby, and other languages (like C#, Go and Python).
  3. 3.0 3.1 "Crystal Platform Support". crystal-lang.org.
  4. "Contributors". Retrieved July 25, 2019 – via GitHub.
  5. 5.0 5.1 Brian J., Cardiff (September 9, 2013). "Type inference part 1". crystal-lang.org.
  6. 6.0 6.1 6.2 David, María Inti (April 1, 2016). "The story behind #CrystalLang". manas.tech.
  7. Hsieh, Adler (September 20, 2015). "Why Crystal programming language?". motion-express.com.
  8. Borenszweig, Ary (November 14, 2013). "Good bye Ruby Thursday". crystal-lang.org.
  9. Borenszweig, Ary (June 19, 2014). "Crystal 0.1.0 released!". crystal-lang.org.


बाहरी संबंध