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

From Vigyanwiki
No edit summary
No edit summary
Line 27: Line 27:


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




Line 33: Line 33:


=== [[हैलो वर्ल्ड]] ===
=== [[हैलो वर्ल्ड]] ===
क्रिस्टल में हैलो वर्ल्ड प्रोग्राम लिखने का यह सबसे आसान तरीका है:
क्रिस्टल में हैलो वर्ल्ड प्रोग्राम लिखने का यह सबसे सरल विधि है:<syntaxhighlight>
puts "Hello World!"
</syntaxhighlight>'''<वाक्यविन्यास लैंग = क्रिस्टल>
हैलो वर्ल्ड डालता है!
</वाक्यविन्यास हाइलाइट>'''


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


या ऑब्जेक्ट उन्मुख प्रोग्रामिंग शैली का उपयोग करना:
या ऑब्जेक्ट उन्मुख प्रोग्रामिंग शैली का उपयोग करना:<syntaxhighlight>
class Greeter
  def initialize(@name : String)
  end
 
  def salute
    puts "Hello #{@name}!"
  end
end
 
g = Greeter.new("world")
g.salute
</syntaxhighlight>'''<वाक्यविन्यास लैंग = क्रिस्टल>'''


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


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


जी = ग्रीटर.न्यू (दुनिया)
'''जी = ग्रीटर.न्यू (दुनिया)
जी सलाम
जी सलाम
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>'''


=== HTTP सर्वर ===
=== HTTP सर्वर ===
<वाक्यविन्यास लैंग = क्रिस्टल>
<syntaxhighlight>
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
</syntaxhighlight><वाक्यविन्यास लैंग = क्रिस्टल>
http/सर्वर की आवश्यकता है
http/सर्वर की आवश्यकता है


Line 71: Line 94:


=== टीसीपी इको सर्वर ===
=== टीसीपी इको सर्वर ===
<वाक्यविन्यास लैंग = क्रिस्टल>
<syntaxhighlight>
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
</syntaxhighlight><वाक्यविन्यास लैंग = क्रिस्टल>
सॉकेट की आवश्यकता है
सॉकेट की आवश्यकता है


Line 86: Line 121:


=== प्रकार अनुमान और संघ प्रकार ===
=== प्रकार अनुमान और संघ प्रकार ===
निम्नलिखित कोड एक सरणी को परिभाषित करता है जिसमें विभिन्न प्रकार होते हैं जिनमें कोई प्रयोग करने योग्य सामान्य पूर्वज नहीं होता है। क्रिस्टल स्वचालित रूप से अलग-अलग वस्तुओं के प्रकार से एक संघ प्रकार बनाता है।
निम्नलिखित कोड एक सरणी को परिभाषित करता है जिसमें विभिन्न प्रकार होते हैं जिनमें कोई प्रयोग करने योग्य सामान्य पूर्वज नहीं होता है। क्रिस्टल स्वचालित रूप से अलग-अलग वस्तुओं के प्रकार से एक संघ प्रकार बनाता है।<syntaxhighlight>
 
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
</syntaxhighlight><वाक्यविन्यास लैंग = क्रिस्टल>
वांछित चीजें = [यूनिकॉर्न, तितलियां, 1_000_000]
वांछित चीजें = [यूनिकॉर्न, तितलियां, 1_000_000]
p typeof(desired_things.first) # typeof संकलन समय प्रकार देता है, यहाँ (प्रतीक | स्ट्रिंग | Int32)
p typeof(desired_things.first) # typeof संकलन समय प्रकार देता है, यहाँ (प्रतीक | स्ट्रिंग | Int32)
Line 95: Line 132:


=== समवर्ती ===
=== समवर्ती ===
चैनलों का उपयोग तंतुओं के बीच संवाद करने के लिए किया जा सकता है, जो कि कीवर्ड का उपयोग करके प्रारंभ  किए जाते हैं <code>spawn</code>.
चैनलों का उपयोग तंतुओं के बीच संवाद करने के लिए किया जा सकता है, जो कि कीवर्ड का उपयोग करके प्रारंभ  किए जाते हैं<syntaxhighlight>
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
</syntaxhighlight><code>spawn</code>.


<वाक्यविन्यास लैंग = क्रिस्टल>
<वाक्यविन्यास लैंग = क्रिस्टल>

Revision as of 14:14, 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] क्रिस्टल रूबी (प्रोग्रामिंग भाषा ) भाषा से प्रेरित सिंटैक्स के साथ,[2] यह एक संकलित भाषा है जिसमें टाइप प्रणाली # स्टेटिक टाइप चेकिंग | स्टेटिक टाइप-चेकिंग है, लेकिन चर या विधि तर्कों के प्रकार निर्दिष्ट करना सामान्यतः अनावश्यक है। प्रकार एक उन्नत वैश्विक प्रकार अनुमान एल्गोरिथम द्वारा हल किए जाते हैं।[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

<वाक्यविन्यास लैंग = क्रिस्टल>

वर्ग अभिवादनकर्ता

 def प्रारंभ करें (@ नाम: स्ट्रिंग)
 अंत
 डीईएफ़ सलामी
   हेलो #{@name} डालता है!
 अंत

अंत

जी = ग्रीटर.न्यू (दुनिया) जी सलाम </वाक्यविन्यास हाइलाइट>

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

<वाक्यविन्यास लैंग = क्रिस्टल>

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 पर रखता है सर्वर.सुनो </वाक्यविन्यास हाइलाइट>

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

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

<वाक्यविन्यास लैंग = क्रिस्टल>

सॉकेट की आवश्यकता है

डीईएफ़ हैंडल_क्लाइंट (क्लाइंट)

 संदेश = क्लाइंट.गेट्स
 क्लाइंट.पुट संदेश

अंत

सर्वर = TCPServer.new (लोकलहोस्ट, 1234) जबकि क्लाइंट = सर्वर। स्वीकार करें?

 स्पॉन हैंडल_क्लाइंट (क्लाइंट)

अंत </वाक्यविन्यास हाइलाइट>

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

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

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

<वाक्यविन्यास लैंग = क्रिस्टल>

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

समवर्ती

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

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

spawn.

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

स्पॉन करते हैं

 पहले भेजने से पहले रखता है
 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 2.5 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.


बाहरी संबंध