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

From Vigyanwiki
(Created page with "{{About|the programming language||Crystal (disambiguation)}} {{Infobox programming language | name = Crystal | logo = Crystal language logo.svg | paradigm = Multi-parad...")
 
No edit summary
 
(11 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{About|the [[programming language]]||Crystal (disambiguation)}}
{{About|[[प्रोग्रामिंग भाषा]]||क्रिस्टल (बहुविकल्पी)}}


{{Infobox programming language
{{Infobox programming language
Line 17: Line 17:
}}
}}


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


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


क्रिस्टल कंपाइलर पहले रूबी में लिखा गया था, लेकिन बाद में क्रिस्टल में फिर से लिखा गया, इस प्रकार नवंबर 2013 तक [[स्व-होस्टिंग (संकलक)]]कंपाइलर) | सेल्फ-होस्टिंग बन गया।<ref name="goodbye_ruby"/>पहला आधिकारिक संस्करण जून 2014 में जारी किया गया था।<ref name="rel_0.1.0"/>जुलाई 2016 में, क्रिस्टल TIOBE इंडेक्स में शामिल हो गया।
क्रिस्टल कंपाइलर पहले रूबी में लिखा गया था, लेकिन बाद में क्रिस्टल में फिर से लिखा गया, इस प्रकार नवंबर 2013 तक [[स्व-होस्टिंग (संकलक)]] कंपाइलर सेल्फ-होस्टिंग बन गया।<ref name="goodbye_ruby"/> पहला आधिकारिक संस्करण जून 2014 में जारी किया गया था।<ref name="rel_0.1.0"/> जुलाई 2016 में, क्रिस्टल टीआईओबीई इंडेक्स में सम्मिलित हो गया।


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




Line 32: 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 प्रारंभ करें (@ नाम: स्ट्रिंग)
  अंत
 
  डीईएफ़ सलामी
    हेलो #{@name} डालता है!
  अंत
अंत
 
जी = ग्रीटर.न्यू (दुनिया)
जी सलाम
</वाक्यविन्यास हाइलाइट>


=== HTTP सर्वर ===
=== HTTP सर्वर ===
<वाक्यविन्यास लैंग = क्रिस्टल>
<syntaxhighlight>
http/सर्वर की आवश्यकता है
require "http/server"
 
सर्वर = HTTP::Server.new do |context|
  context.response.content_type = text/plain
  context.response.print हैलो वर्ल्ड! समय #{समय.स्थानीय} है
अंत


सर्वर.बाइंड_टीसीपी (0.0.0.0, 8080)
server = HTTP::Server.new do |context|
लिसनिंग को http://0.0.0.0:8080 पर रखता है
  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>
 
=== टीसीपी इको सर्वर ===
=== टीसीपी इको सर्वर ===
<वाक्यविन्यास लैंग = क्रिस्टल>
<syntaxhighlight>
सॉकेट की आवश्यकता है
require "socket"


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


सर्वर = TCPServer.new (लोकलहोस्ट, 1234)
server = TCPServer.new("localhost", 1234)
जबकि क्लाइंट = सर्वर। स्वीकार करें?
while client = server.accept?
   स्पॉन हैंडल_क्लाइंट (क्लाइंट)
   spawn handle_client(client)
अंत
end
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


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


<वाक्यविन्यास लैंग = क्रिस्टल>
spawn do
चैनल = चैनल (Int32)। नया
   puts "Before first send"
 
स्पॉन करते हैं
   पहले भेजने से पहले रखता है
   channel.send(1)
   channel.send(1)
   दूसरे भेजने से पहले रखता है
   puts "Before second send"
   channel.send(2)
   channel.send(2)
अंत
end


पहले प्राप्त करने से पहले डालता है
puts "Before first receive"
मूल्य = चैनल। प्राप्त करें
value = channel.receive
मूल्य डालता है # => 1
puts value # => 1


दूसरा प्राप्त करने से पहले रखता है
puts "Before second receive"
मूल्य = चैनल। प्राप्त करें
value = channel.receive
मूल्य डालता है # => 2
puts value # => 2
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


== अग्रिम पठन ==
== अग्रिम पठन ==
Line 232: Line 224:
* [https://reddit.com/r/crystal_programming /r/crystal_programming subreddit]
* [https://reddit.com/r/crystal_programming /r/crystal_programming subreddit]
* [https://crystal-ann.com Crystal Announcements]
* [https://crystal-ann.com Crystal Announcements]
[[Category: वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ]] [[Category: 2014 में बनाई गई प्रोग्रामिंग लैंग्वेज]] [[Category: सॉफ्टवेयर अपाचे लाइसेंस का उपयोग कर रहा है]] [[Category: वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]]


[[Category: Machine Translated Page]]
[[Category:2014 में बनाई गई प्रोग्रामिंग लैंग्वेज]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:CS1 Deutsch-language sources (de)]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Machine Translated Page]]
[[Category:Official website not in Wikidata]]
[[Category:Pages with script errors]]
[[Category:Pages with syntax highlighting errors]]
[[Category:Templates Vigyan Ready]]
[[Category:वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ]]
[[Category:वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]]
[[Category:सॉफ्टवेयर अपाचे लाइसेंस का उपयोग कर रहा है]]

Latest revision as of 10:17, 14 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.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

अग्रिम पठन

  • 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. 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.


बाहरी संबंध