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

From Vigyanwiki
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.


बाहरी संबंध